无影客户端插件化文档,简述无影插件化集成方案,帮助客户更快地集成。
本文介绍无影Windows/macOS插件化使用,为客户通过无影客户端集成无影云电脑能力提供支持,结合客户和无影各自的产品优势,合力为用户提供更有价值的虚拟化计算方案,创造更大的客户价值。
前提条件
平台签约
第三方与无影完成商务合作签约,入驻开放平台,获取无影接口使用权限及开放平台接口访问凭证。
无影服务端开放平台对接请参考API Overview。
插件服务安装
macOs:https://ecd-client.oss-cn-shanghai.aliyuncs.com/wuying/mac1015/wuying-setup.dmg
Windows:https://ecd-client.oss-accelerate.aliyuncs.com/wuying/windows10/wuying-setup.exe
静默安装
如果有静默安装的需求,可以参考如下方式
安装前需要判断是否已经安装插件服务,判断的方法可以参考附1。
Windows:
wuying-setup.exe /sp- /verysilent /norestart /nocancel
Windows端安装后会有桌面快捷方式和开始菜单,如果不需要,可以删除,参考附3。
macOS:
hdiutil attach wuying-setup.dmg -mountpoint /Volumes/AliyunEds -nobrowse
&& cp -R /Volumes/AliyunEds/无影云电脑.app /Applications/无影云电脑.app
&& hdiutil detach /Volumes/AliyunEds
插件化集成
集成方式
命令行集成
找到无影插件化服务stream_launcher,通过以下命令传递执行参数
stream_launcher 的路径查找可以参考附1。
macOS:
stream_launcher --param='{"operation": "xxx", xxxxxx}'
Windows:
stream_launcher.exe --param='{"operation": "xxx", xxxxxx}'
关联文件集成
将整个param参数的json格式内容,保存在一个文本文件,文件名后缀修改为.aspkey,通过系统接口使用默认应用打开此文件,即可自动关联到无影客户端执行对应的操作。
示例文件demo.aspkey
{
"param": {
"operation": "xxx"
}
}
文件关联也可以通过命令行集成
macOS:
stream_launcher --file="xxx/param.aspkey"
open -a stream_launcher "xxx/param.aspkey"
Windows:
stream_launcher.exe --file="xxx/param.aspkey"
URL scheme集成
无影客户端支持通过URL scheme集成打开云电脑,通过wuying:// 前缀关联,直接通过浏览器访问
wuying://?param={"operation": "xxx", xxxxxx}
URL scheme 也可以通过命令行集成
macOS:
stream_launcher --url='wuying://?param={"operation": "xxx", xxxxx}'
open 'wuying://?param={"operation": "xxx", xxxxx}'
Windows:
stream_launcher.exe --url='wuying://?param={"operation": "xxx", xxxx}'
start 'wuying://?param={"operation": "xxx", xxxx}'
/// power shell
Start-Process 'wuying://?param={"operation": "xxx", xxxx}'
Windows支持开放SDK集成,具备更灵活的集成方式,参考 Windows SDK
打开云电脑
通过无影服务端开放平台获取打开云电脑的必要参数Ticket。
获取该参数时必须传入UUID字段,获取UUID获取的方法参考附2。
参数
参数为JSON结构
名称 | 类型 | 必填 | 描述 | 示例 |
operation | String | 是 | 操作名称 | openDesktop |
| object | 是 | 透传从无影服务端获取到的连接信息 | |
-- ticket | String | 是 | ticket为调用无影开放平台GetConnectionTicket - 获取连接凭证接口返回的ticket信息 | |
-- desktopId | String | 是 | 云电脑Id | ecd-7nvbz4ccjly95xxxx |
-- desktopName | String | 是 | 云电脑名称 | xx的云电脑 |
-- osType | String | 是 | 系统类型 | windows |
| object | 是 | 调用无影服务的合作方的信息 | |
-- partner | String | 是 | 合作方公司名称 | xxx公司 |
-- partnerApp | String | 是 | 合作方应用的名称 | xxx应用 |
| object | 否 | 扩展字段,外部配置参数 | |
-- language | String | 否 | 设置一次后所有打开的窗口UI都会显示设置的语言(未设置时默认为中文) | “zh” --- 中文 “en” --- 英文 |
-- cloudDpi | int | 否 | 云电脑启动时的默认dpi缩放比例
| 100 |
-- fullscreen | bool | 否 | 是否在全屏窗口状态打开云资源
| true |
-- isVpc | bool | 否 | 是否走vpc网络
| false |
-- hideFloatingBall | bool | 否 | 是否隐藏云资源窗口内的悬浮球
| false |
| object | 否 | 网络代理配置 | |
-- type | String | 否 | 代理类型 目前支持系统代理、socket代理、HTTP代理3种方式 | system - 系统代理 socket - socket代理 HTTP - HTTP代理 |
-- host | String | 否 | 代理的host | 127.x.x.x |
-- port | int | 否 | 代理端口号 | 50550 |
-- account | String | 否 | 代理账号 | |
-- password | String | 否 | 代理密码 |
示例
JSON格式
{
"operation": "openDesktop",
"bizParam": {
"ticket": "xxxxxxxxxxxxxxxxxxxxxxx",
"desktopId": "ecd-7nvbz4ccjly95xxxx",
"desktopName": "xx的云电脑",
"osType": "windows"
},
"partnerInfo": {
"partner": "wuyingPartnerTest",
"partnerApp": "WuyingPartnerTestApp"
},
"extInfo": {
"language": "zh",
"cloudDpi": 150,
"fullscreen": true,
"isVpc": true,
"hideFloatingBall": true,
"proxy": {
"type": "system",
"host": "xxxxxx",
"port": 1111,
"account": "xxxx",
"password": "xxx"
}
}
断开云资源
参数
名称 | 类型 | 必填 | 描述 | 示例 |
operation | String | 是 | 操作名称 | closeConnection |
| object | 是 | 透传从无影服务端获取到的连接信息 | |
-- id | String | 是 | 需要关闭的云资源的Id 如果需要关闭云电脑则需要填desktopId | ecd-7nvbz4ccjly95xxxx |
| object | 是 | 调用无影服务的合作方的信息 | |
-- partner | String | 是 | 合作方公司名称 | xxx公司 |
-- partnerApp | String | 是 | 合作方应用的名称 | xxx应用 |
示例
JSON格式
{
"operation": "closeConnection",
"bizParam": {
"id": "ecd-7nvbz4ccjly95xxxx"
},
"partnerInfo": {
"partner": "wuyingPartnerTest",
"partnerApp": "WuyingPartnerTestApp"
}
}
打开问题反馈
如果有需要无影的支持,需要上传插件化日志时使用
参数
名称 | 类型 | 必填 | 描述 | 示例 |
operation | String | 是 | 操作名称 | feedback |
| object | 是 | 调用无影服务的合作方的信息 | |
-- partner | String | 是 | 合作方公司名称 | xxx公司 |
-- partnerApp | String | 是 | 合作方应用的名称 | xxx应用 |
示例
JSON格式
{
"operation": "feedback",
"partnerInfo": {
"partner": "wuyingPartnerTest",
"partnerApp": "WuyingPartnerTestApp"
}
}
打开检测升级页面
需要升级插件化服务时使用
参数
名称 | 类型 | 必填 | 描述 | 示例 |
operation | String | 是 | 操作名称 | upgrade |
| object | 是 | 调用无影服务的合作方的信息 | |
-- partner | String | 是 | 合作方公司名称 | xxx公司 |
-- partnerApp | String | 是 | 合作方应用的名称 | xxx应用 |
示例
JSON格式
{
"operation": "upgrade",
"partnerInfo": {
"partner": "wuyingPartnerTest",
"partnerApp": "WuyingPartnerTestApp"
}
}
退出插件化服务
合作方客户端退出登录,调用无影插件化服务退出(仅支持命令行集成)
macOS:
stream_launcher --requestExit
Windows:
stream_launcher.exe --requestExit
附1: 判断插件服务是否已安装以及获取插件服务地址
无影插件服务是否已经安装以及获取stream_launcher插件服务路径,可以参考如下方式
Windows:
#include <Windows.h>
#include <Shlwapi.h>
#include <string>
#include <iostream>
DWORD length = 0;
HRESULT hr = AssocQueryString(0, ASSOCSTR_EXECUTABLE, ".aspkey", NULL, NULL, &length);
if (length == 0) {
// 未安装无影插件服务
}
char* path = new char[length + 1];
hr = AssocQueryString(0, ASSOCSTR_EXECUTABLE, ".aspkey", NULL, path, &length);
if (SUCCEEDED(hr)) {
// path 为stream_launcher.exe路径
} else {
// 未安装无影插件服务
}
macOS:
#import <Foundation/Foundation.h>
#import <CoreServices/CoreServices.h>
NSString *extension = @"aspkey";
CFStringRef exUTI = UTTypeCreatePreferredIdentifierForTag(kUTTagClassFilenameExtension, (__bridge CFStringRef)(extension), NULL);
if (exUTI) {
CFURLRef appURL = LSCopyDefaultApplicationURLForContentType(exUTI, kLSRolesAll, NULL);
if (appURL) {
// appPath 为stream_launcher 路径
NSString *appPath = [(__bridge NSURL*)appURL path];
CFRelease(appURL);
} else {
// 未安装无影插件服务
NSLog(@"No default application found for .%@ files", extension);
}
CFRelease(exUTI);
} else {
// 未安装无影插件服务
NSLog(@"Could not find UTI for extension .%@", extension);
}
import Foundation
import CoreServices
let fileExtension = "aspkey"
if let exUTI = UTTypeCreatePreferredIdentifierForTag(kUTTagClassFilenameExtension, fileExtension as CFString, nil)?.takeRetainedValue() {
if let appURLCF = LSCopyDefaultApplicationURLForContentType(exUTI, .all, nil)?.takeRetainedValue() {
let appURL = appURLCF as URL
let appPath = appURL.path
// appPath 为stream_launcher路径
} else {
// 未安装无影插件服务
}
} else {
// 未安装无影插件服务
}
附2: 获取UUID
在无影插件化服务启动的时候,在mac平台上,将uuid写入到文件中;在windows平台上,写入到注册表中。
macOS:将uuid写入到文件中,文件名为wuying_id,路径为/Users/xxxx/Library/Application\ Support/wuying/wuying_id
Windows:将uuid放入到注册表中HKEY_CURRENT_USER中,具体路径为Software\\alibaba\\wuying\\UUID
附3: 删除windows快捷方式
Windows端安装后会有桌面快捷方式和开始菜单,如果不需要,可以删除对应文件
wuyingStartMenuPath = "C:\ProgramData\Microsoft\Windows\Start Menu\Programs\无影云电脑.lnk";
wuyingDesktopPath = "C:\Users\Public\Desktop\无影云电脑.lnk";