无影Web SDK是用于连接云电脑、云应用、云手机的无影Web Client开放接口。通过集成Web Client SDK,您可以根据业务需求快速定制和搭建Web客户端。
1. 快速开始
1.1 获取SDK和DEMO
获取方式
下载和使用即表示您认可《无影云电脑SDK隐私权政策》。
本平台所有文档、SDK、客户端程序仅限于本人或本企业使用,未经阿里云同意不会转发给第三方个人或企业。
目录结构说明
├── WuyingWebDemo.html //SDK示例。
├── WuyingWebSDK.js //SDK的接口文件,需要在前端页面中引用该文件。
└── sdk //iframe内嵌资源文件
└── ASP
└── container.html
Web.SDK.Demo是一个Vue工程,启动步骤为:
在命令行工具中执行以下命令,检查本地环境是否已安装Node.js。
node
若返回
Welcome to Node.js
信息,则说明已安装。若没有返回上述信息,则说明未安装,请先安装Node.js。
执行以下命令,进入Vue工程根目录。
说明请将
<ProjectRootPath>
替换为Vue工程根目录的实际路径。cd <ProjectRootPath>
执行以下命令,安装Node.js项目的依赖包。
npm i
执行以下命令启动。
npm run dev
命令运行成功后会输出可访问的链接地址。
WuyingWebDemo.html的启动步骤为:
执行以下命令,进入HTML文件所在目录。
说明请将
<HTMLPath>
替换为HTML文件所在目录的实际路径。cd <HTMLPath>
执行以下命令,启动HTTP服务器。
python3 -m http.server
在浏览器中打开
http://localhost:8000/WuyingWebDemo.html
。
1.2 对接流程
1.3 最佳实践
方案详见无影云手机快速集成最佳实践。 云手机集成的总体方案如下图所示
有多种登录方式,获取集成SDK所需要的连接云手机Ticket凭证,流程图为:
具体代码可以参考生命周期接口的参考代码。
2. 生命周期接口
2.1 初始化创建Session
var userInfo = {
sessionId: sessionId,
authCode: authCode,
loginToken: loginToken,
ticket: 'xxx',
};
var appInfo = {
osType: 'Android', // 必填
appId: "android",
resourceGroupId: "aig-xxxxxxxxx", //resourceGroupId以aig-开头
resourceld: "p-xxxxxx", //resourceld以p-开头
appInstanceGroupId: "aig-xxxxxxxxx", //与resourceGroupId相同
productType: "AndroidCloud",
connectionProperties: JSON.stringify({ authMode: "Session" }) ,
};
var sessionParam = {
openType: openType,
iframeId: 'sessionIframe',
resourceType: "local",
connectType: 'app',
userInfo: userInfo,
appInfo: appInfo,
};
var wuyingSdk = Wuying.WebSDK;
session = wuyingSdk.createSession('appstream', sessionParam);
createSession参数说明:
参数 | 类型 | 是否必填 | 说明 |
id | string | 是 | 常量值,云手机是appstream |
sessionParams | SessionParam | 是 | 创建会话参数,参考 4.1 SessionParam |
sessionParams参数说明:
userInfo:
sessionId
:请求loginToken或stsToken得到的SessionId。authCode
:通过GetAuthCode - 获取授权码 API获取。loginToken
:通过GetLoginToken - 获取登录凭证 API获取。ticket
:获取ticket有多种方式。如:通过authCode
请求GetStsToken - 获取临时身份凭证得到stsToken
,再通过stsToken
请求GetConnectionTicket - 获取应用连接凭证得到ticket值。
用户登录有两种方式,免授权登录和便捷账号登录,便携账号登录依赖无影的用户体系,免授权登录客户可以使用自己的用户体系。免授权登录鉴权参数为authCode
,便捷账号登录鉴权参数为loginToken
。ticket
是连接实例的鉴权信息,loginToken
和authCode
最终都是转换成ticket去连接实例。请在authCode
、ticket
和loginToken
三者之间选一个。
appInfo:实例相关信息。
resourceGroupId
:在便携账号下,端侧可通过请求DescribeUserResources - 查询用户拥有的无影云资源列表API获得返回的ResourceGroupId。
在免授权登录下,可通过自己服务端请求DescribeAndroidInstances - 查询实例详细信息API获得返回的AppInstanceGroupId。
resourceld
:在便携账号下,端侧可通过请求DescribeUserResources - 查询用户拥有的无影云资源列表API获得返回的ResourceId。
在免授权登录下,可通过自己服务端请求DescribeAndroidInstances - 查询实例详细信息API获得返回的PersistentAppInstanceId。
appInstanceGroupId
:同resourceGroupId
。
openType:打开云手机的方式,参考本文档openType枚举定义。
2.2 建立连接
session.start();
2.3 断开连接
session.stop();
2.4 回调说明
回调接口: addHandle(name: SessionEventType, callback: Function)
回调接口参数说明:
名称 | 类型 | 描述 |
name | string | 监听事件的类型,参考本文档5.9 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);
});
3. 业务接口
接口 | 说明 |
WebSDK.apiVersion | 获取当前WebSDK的版本号,类型为 |
setInputEnabled(param: boolean) enableInput(param: boolean) | 打开和关闭输入操作。
|
enableKeyBoard(param: boolean) | 是否唤起移动端的键盘。 |
setClipboardEnabled(param: boolean) | 是否开启剪贴板控制。 |
setMicrophoneEnabled(param: boolean) | 是否开启麦克风控制。 |
setTouchEnabled(param: boolean) | 是否开启触摸控制。 |
setUiParams(param: UiConfig) | session建立后主动设置UI配置(如菜单是否显示/是否强制横屏)。 说明 关于UIConfig的详细信息,请参见4.4 UiConfig。 示例:
|
dataChannel | 端云接发自定义数据通道。
|
lyncChannel | 端侧发送adb命令通道
|
4. 参数详细说明
4.1 SessionParam
创建会话的参数。
名称 | 类型 | 必填 | 描述 |
openType | OpenType | 是 | iframe内嵌还是新标签页打开 |
iframeId | string | 否 | 如果iframe打开,则需要填入iframeId |
sdkPath | string | 否 | 配置SDK文件所在路径,不填则默认为相对路径,例如 |
resourceType | ResourceType | 是 | 目前只支持打开本地连接页面 |
connectType | ConnectType | 是 | 打开云手机还是云电脑 |
isOverseas | boolean | 否 | 是否海外访问,默认false |
userInfo | UserInfo | 是 | 用户的登录态信息 |
regionId | string | 是 | 打开云手机时必填为云手机所在的地域 |
appInfo | AppInfo | 否 | 云手机相关信息 |
fileInfo | FileInfo | 否 | 网盘相关参数 |
uiConfig | UiConfig | 否 | UI设置项 |
logDisabled | bool | 否 | 是否关闭ARMS统计,默认为false不关闭 |
loginType | LoginType | 否 | 默认无影账号登录 |
networkAccessType | string | 否 | 默认不填,支持VPC登录 |
4.2 UserInfo
用户的登录态信息。请在authCode
、ticket
和loginToken
三者之间,根据自身情况选择其一。authCode
是免授权登录得到的;loginToken
是便携账号登录得到的;ticket
是通过authCode
或loginToken
请求得到的。
名称 | 类型 | 必填 | 描述 |
authCode | string | 是 | 只能用一次的登录态凭证,优先级最高 |
ticket | string | 是 | 1.4.7版本之后支持直接传入Ticket建立连接 |
loginToken | string | 是 | 便携账号鉴权凭证 |
sessionId | string | 是 | 请求loginToken或stsToken得到的SessionId |
4.3 AppInfo
打开云手机的参数。
名称 | 类型 | 必填 | 描述 |
osType | string | 是 | 常量值Android |
appId | string | 是 | 填入 PersistentAppInstanceId (示例值:p-0caoet4e18cui****) |
appVersion | string | 否 | 打开应用的版本 |
loginRegionId | string | 是 | 云手机资源所在的地域 |
connConfig | ConnConfig | 否 | 连接配置参数 |
appInstanceGroupId | string | 否 | 交付组ID |
appInstanceId | string | 否 | 实例ID,若使用ticket连接为必填 (示例值:ai-0cc7s3n1iagyq****) |
taskId | string | 否 | 应用启动任务ID |
bizRegionId | string | 否 | 应用资源所在的地域 |
productType | string | 否 | 交付组类型,云手机填默认 |
4.4 UiConfig
连接页面UI设置。
名称 | 类型 | 必填 | 描述 |
toolbar | ToolBarConfig | 否 | 连接页面工具栏显示设置 |
exitCheck | bool | 否 | 退出当前页面浏览器二次确认,默认开启 |
rotateDegree | number | 否 | 强制横屏(目前只支持 |
vconsoleVisiable | bool | 否 | 是否显示vconsole调试框 |
debugPanelVisiable | bool | 否 | 是否显示码流、帧率等信息框 |
reconnectType | ReconnectType | 否 | 重连提示框样式 |
defaultResolution | ResolutionType | 否 | 首次连接的默认分辨率,默认为'A' |
language | Language | 否 | 设置内部弹窗提示的语言,默认为简体中文 |
allowErrorDialog | bool | 否 | 是否弹出错误提示窗 |
backgroundColor | string | 否 | 自定义加载过程背景 |
backgroundImg | string | 否 | 自定义加载过程图片 |
4.5 ToolBarConfig
工具栏显示设置。
名称 | 类型 | 必填 | 描述 |
visible | bool | 否 | 工具栏是否显示 |
noMenu | bool | 否 | 悬浮球是否支持打开右键菜单,默认为 |
4.6 ConnConfig
连接配置参数。
名称 | 类型 | 必填 | 描述 |
decodeType | ConnDecodeType(数字枚举) | 否 | 编码方式配置 |
playSoundBackground | bool | 否 | 切换后台后是否继续播放声音 |
5. 枚举类型
5.1 OpenType
打开云手机的方式。
名称 | 含义 |
newTab | 新的Tab页面打开 |
inline | 内嵌iframe页面打开 |
urlScheme | 支持本地原生客户端打开,需安装V6.2以上版本的无影桌面客户端 |
5.2 ConnectType
打开云电脑或者云手机。
名称 | 含义 |
app | 打开云手机 |
desktop | 打开云电脑 |
目前云手机复用app类型,连接云手机时,connectType
固定填app
。
5.3 ResourceType
打开本地连接页面还是无影WebClient。
名称 | 含义 |
local | 打开本地连接HTML页面 |
无影云手机集成固定填local
。
5.4 ReconnectType
重连提示弹窗的UI。
名称 | 含义 |
simple | 简单的加载样式 |
normal | 倒计时弹窗 |
5.5 ResolutionType
初始化连接默认分辨率(连接时优先取用户设置过的分辨率)。
名称 | 含义 |
A | 速度优先,当前窗口大小 |
B | 质量优先,当前窗口大小乘以window.devicePixelRatio |
5.6 ChargeType
云手机付费类型。
名称 | 含义 | 开始支持版本 |
PostPaid | 按量付费 | 1.4.0 |
PrePaid | 包年包月付费 | 1.4.0 |
5.7 Language
语言设置选项,默认为zh-CN
。
名称 | 含义 |
zh-CN | 简体中文 |
en-US | 英文 |
ja-JP | 日文 |
5.8 LoginType
登录云手机方式。
名称 | 含义 |
aliyunLogin | 阿里云账号登录 |
normalLogin | 无影账号登录(云手机只支持 |
5.9 SessionEventType
会话的事件类型映射(加云手机事件说明)。
名称 | 含义 | 开始支持版本 |
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 |
5.10 ConnDecodeType
流的解码类型。
名称 | 含义 | 开始支持版本 |
0 | 软解 | 1.2.0 |
1 | 硬解 | 1.2.0 |
2 | WebRTC | 1.2.0 |
5.11 ProtocolType
协议类型。
名称 | 含义 | 开始支持版本 |
ASP | 阿里云自研ASP协议(云手机只支持ASP协议) | 1.3.0 |
HDX | Citrix协议 | 1.3.0 |
6. 错误代码
6.1 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 |
6.2 onError接收连接过程的错误信息
接收格式:{code: string, message: string, api: string}
,message
包含requestId
,api
为报错的请求。
错误码 | 错误说明 |
AccountNotAvailable | 域账号被锁定、禁用或已过期,请联系IT管理员或系统域控管理员解决。 |
ClientLockedForAliasFailed | 输入错误次数达到上限,请5分钟后再试。 |
content-monthpackageenterpostpaidphase | 此台云手机在本月度周期内的时长包已使用完毕,开机或唤醒后将按需计费。 |
content-recordingscreen | 您的云手机已被企业IT管理员启用了录屏审计功能,您在云手机内的所有操作将会被录制,如对录屏审计功能有任何疑问请您联系您的管理员。 |
desktop-AgentUnbinding | 由于您之前连接的临时云手机尚在解绑中导致新的临时云手机连接失败。请稍候再次连接。 |
desktop-AssignUserFailed | 云手机分配失败,请稍候重试。 |
desktop-ConnectTicket.Timeout | 由于连接超时导致云手机连接失败。请重启云手机后再重新连接。 |
desktop-DesktopAgentFileLose | 云手机的核心进程文件已丢失,导致连接失败。请重启云手机后再次连接。如仍旧出现连接失败,请联系IT管理员。 |
desktop-DesktopContainSecuritySoftware | 此台云手机安装了安全软件导致云手机的网络出现异常,云环境和管控的连接已中断。请联系您的IT管理员退出安全软件后再次连接。 |
desktop-DesktopContainVpn | 此台云手机安装了VPN软件导致云手机的网络出现异常,云环境和管控的连接已中断。您可通过重启云手机修复此问题。如仍旧出现连接失败,请联系IT管理员。 |
desktop-DesktopGuestStop | 此台云手机非“运行中”状态导致连接失败。 |
desktop-DesktopNetworkAnomaly | 此台云手机的网络出现异常,导致云环境和管控的连接已中断。您可通过重启云手机修复此问题。如仍旧出现连接失败,请联系IT管理员。 |
desktop-DesktopNetworkError | 此台云手机的网络出现异常,导致云环境和管控的连接已中断。您可重启云手机修复此问题。如仍旧出现连接失败,请联系IT管理员。 |
desktop-DesktopResourceStatusInvalid | 云服务器ECS当前非运行状态,导致云手机连接失败。请重启云手机后再次连接。 |
desktop-DesktopResourceStop | 云服务器ECS已关机,导致云手机连接失败。请重启云手机后再次连接。 |
desktop-DesktopsUnderMaintenance | 此台云手机非“运行中”状态导致连接失败。 |
desktop-DesktopUnavailable | 连接失败,请稍候重试。如仍旧出现连接失败,请联系IT管理员更新此台云手机的状态。 |
desktop-DistributeLockFailed | 由于当前连接临时云手机的用户量过多导致连接失败,请稍候再次连接。 |
desktop-GENERAL_ERROR | 出现服务异常,请重新连接云手机。如仍旧无法连接,请联系IT管理员。 |
desktop-GET_TICKET_LOCK | 云手机连接请求频繁,请稍候再试。 |
desktop-INSUFFICIENT_QUOTA | 由于IT管理员账号下的云手机配额不足导致当前无可用的临时云手机,请联系IT管理员寻求运维帮助。 |
desktop-INTERNAL_ERROR | 出现服务异常,请重新连接云手机。如仍旧无法连接,请联系IT管理员。 |
desktop-InvalidBundleId.NotFound | 此台云手机的镜像模板出现异常,请联系IT管理员。 |
desktop-InvalidClientIp.Policy | IT管理员设置了IP白名单策略导致无法在您目前的IP环境下连接此台云手机,请联系IT管理员。 |
desktop-InvalidClientType.AccessDenied | IT管理员设置了禁止在此客户端内运行此台云手机。如需继续使用此台云手机,请联系IT管理员。 |
desktop-InvalidDesktopId.NotFound | IT管理员已取消您使用此台云手机的权限。 |
desktop-InvalidDesktopId.Status | 此台云手机非“运行中”状态导致连接失败。 |
desktop-InvalidDesktopStatus.NotRunning | 服务端异常导致关机失败,请稍后重试或联系您的IT管理员。 |
desktop-InvalidDesktopStatus.NotStopped | 服务端异常导致开机失败,请稍后重试或联系您的IT管理员。 |
desktop-InvalidDesktopStatusInvalid | 此台云手机当前非运行状态导致连接失败。 |
desktop-InvalidLiteConnectionCheck | 由于协议服务出现异常导致云手机重连失败,请尝试重新连接。 |
desktop-NoEnoughDesktops | 由于IT管理员的设置导致当前无可分配的临时云手机,请联系IT管理员。 |
desktop-NotFindDesktopId | 此台云手机已被IT管理员释放。 |
desktop-NotFoundUserDesktop | IT管理员已取消您使用此台云手机的权限。 |
desktop-PermissionDeny.Desktop | IT管理员已取消您的使用权限。如需继续使用云手机,请联系IT管理员重新授权。 |
desktop-RES_GW_ERROR | 出现服务异常,请重新连接云手机。如仍旧无法连接,请联系IT管理员。 |
desktop-SDK.ReadTimeout | 出现服务异常,请重新连接云手机。如仍旧无法连接,请联系IT管理员。 |
desktop-ServiceUnavailable | 服务连接超时,请重新连接云手机。如仍旧无法连接,请联系IT管理员。 |
desktop-THROTTLING_USER | 出现服务异常,请重新连接云手机。如仍旧无法连接,请联系IT管理员。 |
desktop-UnavailableDesktop | 云手机登录超时,您可通过重连或重启云手机修复此问题。如仍旧出现连接失败,请联系IT管理员。 |
desktop-UnavailableDesktop.2901 | 协议服务与云环境连接失败导致云手机连接失败。您可通过重启云手机修复此问题。如仍旧出现连接失败,请联系IT管理员。 |
desktop-UnavailableDesktop.2902 | 协议服务无响应,导致云手机连接失败。您可通过重启云手机修复此问题。如仍旧出现连接失败,请联系IT管理员。 |
desktop-UnavailableDesktop.2903 | 云环境出现异常,导致云手机连接失败,您可通过重启云手机修复此问题,如仍旧出现连接失败,请联系IT管理员。 |
desktop-UnavailableDesktop.2904 | 云环境出现异常云手机连接失败。您可通过重启云手机修复此问题。如仍旧出现连接失败,请联系IT管理员。 |
desktop-UnavailableDesktop.2905 | 此台云手机被分配给了多个用户,为其他用户注销会话时出现超时导致连接失败。请重新连接或重启云手机。 |
desktop-UnavailableDesktop.2906 | 由于登录系统时出现响应超时导致连接失败,请重新连接或重启云手机。 |
desktop-UnavailableDesktop.2907 | 由于协议服务仍在启动中,导致云手机连接失败。请稍后重新连接或重启云手机,如仍旧出现连接失败,请联系IT管理员。 |
desktop-UnavailableDesktop.NotRegistered | IT管理员已删除此台云手机。 |
desktop-UnavailableDesktop.ServerNotReady | 由于登录系统时出现异常导致连接失败,请联系IT管理员重新为您授权云手机的使用权限。 |
desktop.linux-UnavailableDesktop.AuthFailed | 可能由于脱域问题导致云手机连接失败。请重启云手机后再重新连接或联系您的IT管理员。 |
DesktopNetworkError.AbortBySoftware | 此台云手机的网络出现异常,导致云环境和管控的连接已中断。您可重启云手机修复此问题。 |
DesktopNetworkError.BadHandShake | 此台云手机的网络出现异常,导致云环境和管控的连接已中断。您可重启云手机修复此问题。 |
DesktopNetworkError.BindAddressFailed | 此台云手机的网络出现异常,导致云环境和管控的连接已中断。您可重启云手机修复此问题。 |
DesktopNetworkError.ConnectAddressFailed | 此台云手机的网络出现异常,导致云环境和管控的连接已中断。您可重启云手机修复此问题。 |
DesktopNetworkError.ConnectionClosedError | 此台云手机的网络出现异常,导致云环境和管控的连接已中断。您可重启云手机修复此问题。 |
DesktopNetworkError.ConnectionRefusedError | 此台云手机的网络出现异常,导致云环境和管控的连接已中断。您可重启云手机修复此问题。 |
DesktopNetworkError.ConnectionResetError | 此台云手机的网络出现异常,导致云环境和管控的连接已中断。您可重启云手机修复此问题。 |
DesktopNetworkError.ConnectionTimeout | 此台云手机的网络出现异常,导致云环境和管控的连接已中断。您可重启云手机修复此问题。 |
DesktopNetworkError.DnsLookupFailed | 此台云手机的网络出现异常,导致云环境和管控的连接已中断。您可重启云手机修复此问题。 |
DesktopNetworkError.Forbidden | 此台云手机的网络出现异常,导致云环境和管控的连接已中断。您可重启云手机修复此问题。 |
DesktopNetworkError.ReceivedUnexpectedEOF | 此台云手机的网络出现异常,导致云环境和管控的连接已中断。您可重启云手机修复此问题。 |
DesktopNetworkError.SystemOutOfResource | 此台云手机的网络出现异常,导致云环境和管控的连接已中断。您可重启云手机修复此问题。 |
DesktopNetworkError.UnKnowError | 此台云手机的网络出现异常,导致云环境和管控的连接已中断。您可重启云手机修复此问题。 |
DesktopStatus-Desc-Updating | 正在变更此台云手机的配置 ,暂时不可使用。 |
DesktopStatus-Repairing | 修复中 |
DesktopStatus-Updating | 变配中 |
DeviceNotInManage | 无法登录。该办公网络或组织已开启可信设备认证,需请管理员关闭可信设备认证或手动将当前终端纳管为可信设备。 |
DirectoryLoginUnsupported | 输入信息有误,请使用组织ID登录。 |
DomainFailed | 由于系统加域失败导致云手机连接失败。 |
DomainRelationshipFailed | 由于系统域关系出现异常导致云手机连接失败。 |
ExistedEmail | 该邮箱地址已被占用。请输入其他邮箱地址。 |
ExistedEndUserId | 该用户名已被占用。请输入其他用户名。 |
ExistedPhoneNumber | 该手机号码已被占用。请输入其他手机号码。 |
ExpiredEmailVerifyCode | 邮箱验证码已过期,请重新获取。 |
FailedToSendEmailVerifyCode | 邮箱验证码获取失败,请重试。 |
ForbidByClientVersionForBusiness | 该组织ID为商业版,须将当前客户端升级至最新版本才能登录。 |
ForbidByPasswordPolicy | 修改失败,您的IT管理员已禁用“修改登录密码”。 |
FOTA_DESKTOP_IN_USE | 云手机“%s”正在使用中,请断开连接后重试“更新”。 |
FOTA_SNAPSHOT_IN_PROGRESS | 由于云手机“%s”正在创建系统快照中,当前无法执行镜像更新,请稍后重试。 |
GuestOperateDesktopFail | 云手机关机或重启失败 |
GuestOperateDesktopTimeout | 由于响应超时导致您在云手机内操作的关机或重启执行失败。 |
GuestRebootOperateFail | 云手机重启失败 |
GuestRebootOperateTimeout | 由于响应超时导致您在云手机内操作的重启执行失败。 |
GuestStopOperateFail | 云手机关机失败 |
GuestStopOperateTimeout | 由于响应超时导致您在云手机内操作的关机执行失败。 |
InvalidDirectoryType | RAM账号已下线,请联系IT管理员。 |
InvalidEmailVerifyCode | 邮箱验证码错误,请重新输入。 |
InvalidMfaDeviceStatus | 虚拟多因素认证设备错误。请使用与您的账号绑定的设备。 |
InvalidPassword | 用户名或密码输入错误 |
LoginError.MissingConcatForVerify | 由于此账号为管理员激活账号,无法完成身份安全校验,请联系IT管理员。 |
LoginForbidden | 无法登录。该办公网络或组织已开启可信设备认证,需请管理员关闭可信设备认证或手动将当前终端纳管为可信设备。 |
LoginForbidden.LockedByAdmin | 该便捷账号已被锁定,请联系您的IT管理员手动解锁。 |
LoginForbiddenByDevice | 无法登录。管理员限定该终端只能被特定用户登录,当前账号不在限定范围内。 |
LoginForbiddenByUntrustedDevice | 无法登录,管理员已开启“拦截不可信终端登录 ”,需要管理员将此终端纳管为可信设备或禁用此功能。 |
LoginForbiddenByUser | 无法登录。管理员开启用户登录终端限制,请至指定终端进行登录。 |
MfaClientNotSupport | 客户端版本过低,不支持该多因素认证方式,请升级客户端。 |
MfaNotAllowed | 您的账号缺少该多因素认证方式要求的信息,请联系IT管理员补充。 |
MfaTypeNotAllowed | 您的IT管理员尚未启用该多因素认证方式 |
MfaUserGoingToBeLocked | 验证码错误。若连续错误达10次,您的账号将被锁定20分钟。 |
MfaUserNotExist | 此账号已被删除。请向您的IT管理员咨询详情。 |
MfaVerifyCodeDiscarded | 该验证码已失效,请重新获取。 |
PhoneIsNotRegistered | 手机号输入错误或管理员未将手机号绑定到账号。 |
SessionForceQuit | 已自动退登。 原因:已在其他终端注销或登录终端数量超出IT管理员限制。 |
StartApplicationGuestTimeout | 网络信号不稳定,应用打开失败,请重试。 |
StartDesktopFail | 云手机开机失败 |
ThrottlingSendEmailVerifyCodeLimit | 一分钟只能发送一次验证码 |
UnavailableDesktop.2907 | 由于协议服务仍在启动中,导致云手机连接失败。请稍后重新连接或重启云手机,如仍旧出现连接失败,请联系IT管理员。 |
7. 常见问题
如何关闭悬浮球?
创建会话(createSession)阶段初始化uiConfig
时,可以关闭悬浮球。
uiConfig: {
toolbar: {
visible: false,
},
},
怎么通过ASP通道发送ADB命令?
创建会话(createSession)时初始化lyncChannelConfig。
lyncChannelConfig: [
{
lyncChannelName: "lync_adb_shell",
},
],
需要发送命令时,可以调用session.sendLyncMessage
,例如:
session.sendLyncMessage(
"lync_adb_shell",
JSON. stringify({
id: crypto. randomUUID(),
cmd: 'input keyevent KEYCODE_VOLUME_UP',
})
);
接收命令执行的结果,可以添加监听session.addLyncListener
,例如:
session.addLyncListener('lync_adb_shell', 'onReceivedLyncData', data => console.log('data from lync_adb_shell', data));
常见命令:
功能 | 命令 |
返回键 | input keyevent KEYCODE_BACK |
Home键 | input keyevent KEYCODE_HOME |
切换键 | input keyevent KEYCODE_APP_SWITCH |
静音 | input keyevent 164 |
音量增大 | input keyevent KEYCODE_VOLUME_UP |
音量减小 | input keyevent KEYCODE_VOLUME_DOWN |
隐藏导航栏 | setprop persist.wy.hasnavibar false; killall com.android.systemui |
显示导航栏 | setprop persist.wy.hasnavibar true; killall com.android.systemui |
截图 | screencap -p /sdcard/Download/abc.png |
摄像头使用常见问题
使用Demo连接云手机使用摄像头时,需注意,因为浏览器对摄像头有权限控制,所以访问Demo的链接地址必须是https开头的,才能正确使用摄像头。
针对一些特殊场景,比如仅需要端侧前置摄像头或者后置摄像头时,需要做如下设置。
// 前摄
session.setLocalConfig('setCameraType', 1);
// 后摄
session.setLocalConfig('setCameraType', 2);
剪贴板使用常见问题
遇到剪贴板不生效情况
检测浏览器是否开启了剪贴板权限。
在无影云手机控制台检测实例绑定的策略,剪贴板策略是否是双向开启。