無影客戶端插件化文檔,簡述無影插件化集成方案,幫助客戶更快地集成。
本文介紹無影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";