1. 什么是Web SDK
Wuying Web SDK是用于連接云電腦、云應用的無影Web Client開放接口。通過集成Web Client SDK,客戶根據自身業務,快速定制、搭建Web客戶端。
2. 快速開始
下載和使用即表示您認可《無影云電腦SDK隱私權政策》。
本平臺所有文檔、SDK、客戶端程序僅限于本人或本企業使用,未經阿里云同意不會轉發給三方個人或企業。
目錄結構
├── WuyingWebDemo.html
├── WuyingWebSDK.js
├── HDXEngine.html
├── HDXLauncher.js
└── sdk
└── ASP
└── container.html
說明: WuyingWebDemo.html -- Sdk例子 WuyingWebSDK.js -- Sdk的接口文件,需要再前端頁面中引用該文件 HDXEngine.html -- citrix桌面必要文件,不需要可以移除 HDXLauncher.js -- citrix桌面必要文件,不需要可以移除 sdk -- iframe內嵌資源文件
3. 接口說明
3.1 WebSDK
Name | Type | Description |
apiVersion | string | WebSDK的版本號 |
createSession(sessionId:string, sessionParams: SessionParam)
創建一個云電腦或云應用的session,這里的session與管控的session不是同一個概念
名稱 | 類型 | 描述 |
id | string | 創建者自定義,session的唯一標識 |
sessionParams | SessionParam | 創建session參數 |
var userInfo = {
loginToken: loginToken,
sessionId: sessionId,
authCode: authCode,
};
var appInfo = {
appId: appId,
appVersion: appVersion,
loginRegionId: 'cn-shanghai',
};
var sessionParam = {
openType: openType,
iframeId: 'sessionIframe',
resourceType: resourceType,
connectType: 'app',
userInfo: userInfo,
appInfo: appInfo,
};
var wuyingSdk = Wuying.WebSDK;
var session = wuyingSdk.createSession('appstream', sessionParam);
3.2 Methods
start()開始建立連接
var session = wuyingSdk.createSession('appstream', sessionParam);
session.start();
stop()斷開連接
var session = wuyingSdk.createSession('appstream', sessionParam);
session.start();
....
session.stop();
addHandle(name: SessionEventType, callback: Function)
增加監聽事件
名稱 | 類型 | 描述 |
name | string | 監聽事件的類型,參考SessionEventType枚舉定義 |
callback | Function | 回調函數 |
session.addHandle('getConnectionTicketInfo', (data) => {
console.log(data);
});
session.addHandle('onConnected', (data) => {
console.log('connected', data);
});
session.addHandle('onDisConnected', (data) => {
console.log('disconnect', data);
});
session.addHandle('onRuntimeMsg', (data) => {
document.getElementById('GuestMsgContext').value = JSON.stringify(data);
});
session.start();
sendRuntimeMsg(msg: string, appId: string)
發送消息給Guest內的應用
名稱 | 類型 | 描述 |
msg | string | 具體的消息內容 |
appId | string | 消息發送給GuestOS的某個應用 |
var msg = document.getElementById('sendMsgTypeData').value;
var appId = document.getElementById('sendMsgAppId').value;
session.sendRuntimeMsg(msg, appId);
enableInput(param: boolean)
打開和關閉鍵鼠操作
名稱 | 類型 | 描述 |
param | bool | 是否打開 |
enableKeyBoard(param: boolean)
喚起和關閉鍵盤
名稱 | 類型 | 描述 |
param | bool | 是否打開 |
setClipboardEnabled(param: boolean)
剪貼板控制
名稱 | 類型 | 描述 |
param | bool | 是否打開 |
setMicrophoneEnabled(param: boolean)
麥克風控制
名稱 | 類型 | 描述 |
param | bool | 是否打開 |
setInputEnabled(param: boolean)
輸入控制
名稱 | 類型 | 描述 |
param | bool | 是否打開 |
setTouchEnabled(param: boolean)
觸摸控制
名稱 | 類型 | 描述 |
param | bool | 是否打開 |
downloadFile()
打開云電腦內下載文件窗口
uploadFile(file: File)
上傳文件
名稱 | 類型 | 描述 |
file | File | 上傳的文件 |
enableDataIsland(enable: boolean)
顯示/隱藏runtime中的數據島
名稱 | 類型 | 描述 |
enable | boolean | 顯示/隱藏 |
uploadFileToPds(file: File[])
上傳文件到無影網盤
需要先開啟文件上傳配置,然后通過session.uploadFileToPds
調用
通過onTransferCallback
接收上傳進度及報錯
名稱 | 類型 | 描述 |
file | File | 上傳的文件數組 |
downloadFileFromPds(filePath: string)
從無影網盤中下載文件
配置開啟文件上傳,然后通過session.downloadFileFromPds
調用
名稱 | 類型 | 描述 |
filePath | string | 網盤中的文件路徑 |
getScreenshot(callback: (blob: Blob) => any, immediate: boolean)
獲取當前截圖,callback可獲取截圖的blob,immediate設置為true時直接下載到本地
setResolution(width: number, height: number, degree: number)
設置云電腦/應用畫面分辨率,degree為順時針旋轉角度
名稱 | 類型 | 描述 |
width | number | 寬度 |
height | number | 高度 |
degree | number | 0或者90 |
stopConnection()
斷開連接
getDesktopIdleTime(callback: (time: number) => any)
獲取云電腦無操作時間,時間單位ms
setUiParams(param: UiConfig)
session建立后,主動設置UI配置,如菜單是否顯示/強制橫屏
名稱 | 類型 | 描述 |
param | UiConfig | UI選項 |
var uiConfig = {
toolbar: {
visible: false,
},
rotateDegree: 90,
};
session.setUiParams(uiConfig);
3.3 參數類型說明
SessionParam
創建Session的參數
名稱 | 類型 | 必填 | 描述 |
openType | OpenType | 是 | iframe內嵌還是新標簽頁打開 |
iframeId | string | 否 | 如果frame打開,則需要填入iframeId |
sdkPath | string | 否 | 配置sdk文件所在路徑,不填默認為相對路徑如./ASP/container.html |
resourceType | ResourceType | 是 | 目前只支持打開本地連接頁面 |
connectType | ConnectType | 是 | 打開云應用還是云電腦 |
isOverseas | boolean | 否 | 是否海外訪問,默認false |
userInfo | UserInfo | 是 | 用戶的登錄態信息 |
regionId | string | 是 | 打開云電腦時必填為云電腦所在的region |
appInfo | AppInfo | 否 | 打開云應用的信息 |
desktopInfo | DesktopInfo | 否 | 打開云電腦的信息 |
fileInfo | FileInfo | 否 | 網盤相關參數 |
uiConfig | UiConfig | 否 | ui設置項 |
fileTransferConfig | FileTransferConfig | 否 | 文件傳輸配置 |
logDisabled | bool | 否 | 是否關閉arms統計,默認false不關閉 |
loginType | LoginType | 否 | 默認無影賬號登錄 |
networkAccessType | 'vpc' | 否 | 默認不填,支持vpc登錄 |
UserInfo
用戶的登錄態信息,現在使用authCode。
名稱 | 類型 | 必填 | 描述 |
authCode | string | 是 | 只能用一次的登錄態憑證,優先級最高 |
ticket | string | 是 | 1.4.7版本之后支持直接傳入ticket建立連接 |
loginToken | string | 是 | 用戶登錄態信息(deprecated) |
sessionId | string | 是 | 用戶登錄態信息(deprecated) |
AppInfo
打開云應用的參數
名稱 | 類型 | 必填 | 描述 |
appId | string | 是 | 打開的應用id |
appVersion | string | 是 | 打開應用的版本 |
loginRegionId | string | 是 | 云應用資源所在的地域 |
connConfig | ConnConfig | 否 | 連接配置參數 |
appInstanceGroupId | string | 否 | 應用交付組ID |
appInstanceId | string | 否 | 應用實例ID |
taskId | string | 否 | 應用啟動任務ID |
bizRegionId | string | 否 | 應用資源所在的地域 |
productType | string | 否 | 交付組類型,默認'CloudApp' |
DesktopInfo
打開云電腦的參數
名稱 | 類型 | 必填 | 描述 |
desktopId | string | 是 | 打開的云電腦id |
realDesktopId | string | 否 | 若打開的是云電腦池云電腦則需要傳此id |
protocolType | ProtocolType | 否 | 打開云電腦的協議類型 |
loginRegionId | string | 是 | 云電腦資源所在的地域 |
connConfig | ConnConfig | 否 | 連接配置參數 |
assistanceConfig | AssistanceConfig | 否 | 遠程協助,不配置默認不開啟遠程協助 |
creationTime | string | 否 | 云電腦創建時間,UTC格式 |
expiredTime | string | 否 | 云電腦過期時間,UTC格式 |
chargeType | ChargeType | 否 | 云電腦付費類型 |
FileInfo
打開網盤的參數。說明:填入externalDomainId、externalDriveId和externalUserId時支持上傳文件至托管pds,此時不需要再填入driveId
名稱 | 類型 | 必填 | 描述 |
driveType | string | 是 | 網盤類型(目前只支持設置為"PDS") |
driveId | string | 是 | 網盤ID |
externalDomainId | string | 是 | 用戶PDS域ID |
externalDriveId | string | 是 | 用戶PDS網盤ID |
externalUserId | string | 是 | 外部用戶ID |
fileId | string | 是 | 文件ID |
filePath | string | 否 | 文件路徑 |
fileName | string | 否 | 文件名稱 |
fileRegion | string | 否 | 文件所在地域,如:cn-hangzhou |
FileTransferConfig
文件上傳、下載配置
名稱 | 類型 | 必填 | 描述 |
type | string | 否 | 網盤類型(目前只支持設置為"PDS",不填默認為"PDS") |
driveId | string | 否 | 設置上傳的網盤ID |
uploadPath | string | 否 | 文件上傳路徑 |
uploadType | string[] | 否 | 允許上傳的文件類型,參考MIME TYPE定義 |
onTransferCallback | function | 否 | 傳輸信息通知 (type,data=> any |
TransferData
onTransferCallback接收的data內容
名稱 | 含義 |
fileName | 上傳文件名稱 |
fileSize | 上傳文件大小 |
fileId | 上傳文件id |
progress | 上傳文件進度 |
cancelFn | 取消上傳回調,上傳中調用則取消當前文件上傳 |
回調消息代碼
type: 'result'
data: {Code, Message?: string, RequestId?: string, fileName?: string, fileSize?: string, fileId?: string}
名稱 | 含義 |
ERROR_DRIVE_ID | 網盤id錯誤 |
ERROR_UPLOAD_PATH | 上傳路徑錯誤 |
ERROR_UPLOAD_TYPE | 不允許的文件類型 |
ERROR_FILE_EXISTS | 同名文件已存在 |
ERROR_TOKEN | loginToken失效無法上傳 |
ERROR_SERVER | 服務錯誤,請聯系開發 |
ERROR_DOWNLOAD | 下載文件出錯 |
SUCCESS_UPLOAD | 上傳完成 |
UiConfig
設置連接頁面Ui設置
名稱 | 類型 | 必填 | 描述 |
toolbar | ToolBarConfig | 否 | 連接頁面工具欄顯示設置 |
exitCheck | bool | 否 | 退出當前頁面瀏覽器二次確認,默認開啟 |
rotateDegree | number | 否 | 強制橫屏 (目前只支持0:正常 90:強制橫屏) |
vconsoleVisiable | bool | 否 | 是否顯示vconsole調試框 |
debugPanelVisiable | bool | 否 | 是否顯示碼流、幀率等信息框 |
reconnectType | ReconnectType | 否 | 重連提示框樣式 |
defaultResolution | ResolutionType | 否 | 首次連接的默認分辨率,默認為'A' |
language | Language | 否 | 設置內部彈窗提示的語言,默認為中文 |
ToolBarConfig
工具欄顯示設置
名稱 | 類型 | 必填 | 描述 |
visible | bool | 否 | 工具欄是否顯示 |
noMenu | bool | 否 | 懸浮球式否支持打開右鍵菜單,默認false,1.4.20以上支持 |
ConnConfig
連接配置參數
名稱 | 類型 | 必填 | 描述 |
decodeType | ConnDecodeType(數字枚舉) | 否 | 編碼方式配置 |
playSoundBackground | bool | 否 | 切換后臺后是否繼續播放聲音 |
AssistanceConfig
連接配置參數注意作為管理員連接時,遠程協助的連接是一次性的,但是ticket目前是可以多次使用的,連接一次后應當清除ticket防止重連
名稱 | 類型 | 必填 | 描述 |
role | AssistanceRole | 是 | 當前使用遠程協助的角色 |
aliUid | string | 否 | 租戶id,用于用戶發起遠程協助請求,role為user時必填 |
ticket | string | 否 | 管理員協助參數,調用GetCoordinateTicket接口獲取, role為admin時必填 |
taskId | string | 否 | 管理員協助參數,調用GetCoordinateTicket接口獲取, role為admin時必填 |
coId | string | 否 | 管理員協助參數,調用GetCoordinateTicket接口獲取, role為admin時必填 |
remoteAssistance | string | 否 | 管理員協助參數,默認傳'on', role為admin時必填 |
accessKeyId | string | 否 | 管理員協助參數,role為admin時必填,用于鍵鼠控制 |
accessKeySecret | string | 否 | 管理員協助參數,role為admin時必填,用于鍵鼠控制 |
枚舉類型
OpenType
打開云電腦或者云應用的方式枚舉
名稱 | 含義 |
newTab | 新的tab頁面打開 |
inline | 內嵌Iframe頁面打開 |
urlScheme | 支持本地原生客戶端打開,需安裝6.2以上版本無影桌面端 |
ConnectType
打開云電腦或者云應用枚舉
名稱 | 含義 |
app | 打開云應用 |
desktop | 打開云電腦 |
ResourceType
打開本地連接頁面還是無影WebClient
名稱 | 含義 |
local | 打開本地連接HTML頁面 |
ReconnectType
重連提示彈窗的ui
名稱 | 含義 |
simple | 簡單的loading |
normal | 倒計時彈窗 |
ResolutionType
初始化連接默認分辨率(連接時優先取用戶設置過的分辨率)
名稱 | 含義 |
A | 速度優先,當前窗口大小 |
B | 質量優先,當前窗口大小乘以window.devicePixelRatio |
ChargeType
云電腦付費類型
名稱 | 含義 | 開始支持版本 |
PostPaid | 按量付費 | 1.4.0 |
PrePaid | 包年包月付費 | 1.4.0 |
Language
語言設置選項,默認為zh-CN
名稱 | 含義 |
zh-CN | 中文 |
en-US | 英文 |
ja-JP | 日文 |
LoginType
登錄云電腦方式
名稱 | 含義 |
aliyunLogin | 阿里云賬號登錄 |
normalLogin | 無影賬號登錄 |
事件說明
SessionEventType
session的事件類型映射
名稱 | 含義 | 開始支持版本 |
getConnectionTicketInfo | 連接云電腦、云應用事件 | 1.0.0 |
onConnected | 云應用、云電腦建立連接事件 | 1.0.0 |
onDisConnected | 云應用、云電腦斷開連接事件 | 1.0.0 |
onRuntimeMsg | Runtime內發送給SDK的消息 | 1.1.0 |
networkData | 網絡性能參數 | 1.3.1 |
onError | 接受連接過程中的錯誤 | 1.4.1 |
Guest消息類型
GuestMsgType
發送給GuestOS消息的類型
名稱 | 含義 | 開始支持版本 |
RUNTIME_API_MESSAGE | 發送給GuestOS消息 | 1.1.0 |
流的解碼類型
ConnDecodeType
名稱 | 含義 | 開始支持版本 |
0 | 軟解 | 1.2.0 |
1 | 硬解 | 1.2.0 |
2 | webrtc | 1.2.0 |
云電腦相關
ProtocolType
名稱 | 含義 | 開始支持版本 |
ASP | asp協議云電腦 | 1.3.0 |
HDX | citrix協議云電腦 | 1.3.0 |
遠程協助類型
AssistanceRole
名稱 | 含義 | 開始支持版本 |
user | 用戶 | 1.3.0 |
admin | 管理員 | 1.3.0 |
shared_user | 共享云電腦用戶 | 1.3.1 |
assistant | 接受共享協同用戶 | 1.4.0 |
3.4 錯誤代碼說明
onDisconnected接收斷連的報錯信息
名稱 | 含義 | 代碼 |
ASP_CLIENT_DISCONNECT_CONNECT_ERROR | 斷開連接 | 0 |
ASP_CLIENT_DISCONNECT_SOCKET_CLOSE | socket關閉 | 1 |
ASP_CLIENT_DISCONNECT_WEBRTC_CLOSE | webrtc關閉 | 2 |
ASP_CLIENT_DISCONNECT_CLOUD_APP_STOP | 云應用關閉 | 2001 |
ASP_CLIENT_DISCONNECT_CLIENT_PREEMPTION | 被搶占 | 2002 |
ASP_CLIENT_DISCONNECT_GUEST_SHUTDOWN_REBOOT | Guest重啟 | 2003 |
ASP_CLIENT_RTT_TIMEOUT | RTT超時 | 2200 |
ASP_CLIENT_NET_ERROR_IO | 網絡IO錯誤 | 2201 |
ASP_CLIENT_UPDATE_TICKET_FAILED | 更新ticket錯誤 | 2202 |
onError接收連接過程的錯誤信息
接受格式{code: string, message: string, api: string}
錯誤code列舉如下,message包含requestId,api為報錯的請求
錯誤code |
InvalidClientType.AccessDenied |
DesktopCpuHighLoad |
NotFindDesktopId |
UnavailableDesktop.NotRegistered |
NotFoundUserDesktop |
PRICE.WAN_HUA_TONG_SYS |
UnavailableDesktop |
AUTHORIZE_FAILED |
UnavailableDesktop.Initializing |
NotFindTaskId |
GENERAL_ERROR |
InvalidVersion |
UnavailableDesktop.Unregistered |
Forbidden |
InvalidDesktopId.NotFound |
PRICE.RATING_ACCOUNT_SYS |
AgentUnbinding |
USING_DESKTOP |
NoMoreActiveSessions |
GET_TICKET_LOCK |
DistributeLockFailed |
MissingLoginToken |
DesktopsUnderMaintenance |
NoEnoughDesktops |
InvalidTimeStamp.Expired |
GeneralAppLaunchError |
InvalidClientIp.Policy |
MissingClientId |
ACCOUNT.ALIYUN_ACCOUNT_NOT_EXIST |
DesktopNotReady |
InvalidAccessKeyId.NotFound |
CouldNotConnectToWorkstation |
AssignUserFailed |
InvalidTimeStamp.Format |
INVALID_CSRF_TOKEN |
INTERNAL_ERROR |
DesktopUnavailable |
UnavailableDesktop.ConnectionBroken |
AuthorizeFailed.OfficeSIteId |
SignatureDoesNotMatch |
USER_NOT_EXIST |
MissingAccessKeyId |
ServiceUnavailable |
NOT_LOGIN |
UnavailableDesktop.ServerNotReady |
InvalidDesktopId.Status |
PermissionDeny.Desktop |
InvalidOperation.NotSupportedEndpoint |
InvalidAccessKeyId |