简介
本文档为您提供具体的 API 描述、语法、参数说明及示例等,您可以调用 API 管理云手机服务资源。
更新记录
2025-02-20
- 新增 实例安装应用列表查询 接口
2025-02-12
- 更新 创建自动化任务 接口支持添加视频点赞评论任务
2025-02-08
- 更新 回调相关 接口
- 更新 设置智能IP 接口
- 更新 取消智能IP 接口
- 新增 设备任务执行结果查询 接口
2025-02-07
- 更新 智能IP代理检测 接口
2025-02-06
- 新增 开关root权限 接口
- 新增 云机状态示例 描述
- 优化 自动化任务类型请求参数描述
2025-01-26
2025-01-23
2025-01-22
- 新增GET请求获取签名JAVA示例demo
2025-01-21
2025-01-16
- 新增 本地截图 接口
- 新增 根据padCode获取SDK临时token 接口
- 新增 获取SDK临时token 接口
- 新增 清除SDK授权Token 接口
- 新增 升级镜像 接口
- 新增 升级真机镜像 接口
2025-01-08
2025-01-07
- 新增 新建云手机 接口
- 新增 云手机列表 接口
- 新增 云手机信息查询 接口
- 新增 修改实例时区 接口
- 新增 修改实例语言 接口
- 新增 修改实例SIM卡信息 接口
- 新增 设置实例经纬度 接口
- 新增 应用卸载 接口
- 新增 应用启动 接口
- 新增 应用停止 接口
- 新增 应用重启 接口
2024-12-17
2024-12-12
2024-12-09
2024-12-09
- 文档发布
调用说明
前置条件
获取账号的 Access Key ID 和 Secret Access Key (AK/SK),用于 API 请求鉴权。请联系技术对接人获取
公共请求参数
接口每次请求时,Headers中必须包含以下四个参数进行身份验证,否则接口无法正常请求。
参数名 | 类型 | 示例值 | 参数描述 |
---|---|---|---|
x-date | string | 20240301T093700Z | 发送请求的时间戳,使用UTC时间,精确到秒 |
x-host | string | openapi.armcloud.net | 接口访问域名 |
authorization | string | HMAC-SHA256 Credential={AccessKey}, SignedHeaders=content-type;host;x-content-sha256;x-date, Signature={Signature} | 发送的请求中包含的签名 |
Content-Type | string | application/json | 资源的MIME类型 |
Authorization签名机制
对于每一次 HTTPS 协议请求,会根据访问中的签名信息验证访问请求者的身份。具体由用户账号对应的 AccessKey ID 和 AccessKey Secret(AK/SK)加密验证实现。
手动签名
注意
签名需要对请求参数进行一系列处理,包括排序、拼接、加密等步骤。这种方法提供了更大的灵活性和可定制性,适用于开发者对签名算法有深入理解的情况。然而,手动签名需要开发者编写额外的代码来实现签名过程,可能会增加开发难度和出错的可能性,因此我们依然建议您使用SDK来调用API,尽量避免自行编写签名代码。若您需要了解签名计算的原理和具体过程,可参考以下文档。
手动签名机制要求请求者对请求参数进行哈希值计算,经过加密后同 API 请求一起发送到服务器中,服务器将以同样的机制对收到的请求进行签名计算,并将其与请求者传来的签名进行比对,若签名未通过验证,请求将被拒绝。
获取账号的 Access Key ID 和 Secret Access Key (AK/SK),用于 API 请求鉴权。请联系技术对接人获取
构建规范请求字符串(CanonicalRequest)
String canonicalStringBuilder=
"host:"+*${host}*+"\n"+
"x-date:"+*${xDate}*+"\n"+
"content-type:"+*${contentType}*+"\n"+
"signedHeaders:"+*${signedHeaders}*+"\n"+
"x-content-sha256:"+*${xContentSha256}*;
字段 | 解释 |
---|---|
host | 请求服务域名。固定为:api.vmoscloud.com |
x-date | 指代请求 UTC 时间,即请求头公共参数中 X-Date 的取值,使用遵循 ISO 8601 标准的格式:YYYYMMDD'T'HHMMSS'Z' ,例如:20201103T104027Z |
content-type | 请求或响应正文的媒体类型(application/json) |
signedHeaders | 参与签名的Header,和CanonicalHeaders包含的Header是一一对应的,目的是指明哪些Header参与签名计算,从而忽略请求被proxy添加的额外Header,其中host、x-date如果存在Header中则必选参与 伪代码如下: SignedHeaders=Lowercase(HeaderName0)+';'+Lowercase(HeaderName1)+";"+...+Lowercase(HeaderNameN) 示例: SignedHeaders=content-type;host;x-content-sha256;x-date |
x-content-sha256 | hashSHA256(body)注:body要去空格后再去计算hashSHA256 |
构建待签名字符串(StringToSign)
签名字符串主要包含请求以及规范化请求的元数据信息,由签名算法、请求日期、信任状和规范化请求哈希值连接组成。
构建待签名字符串,伪代码如下:
StringToSign=
Algorithm+'\n'+
xDate+'\n'+
CredentialScope+'\n'+
hashSHA256(canonicalStringBuilder.getByte())
字段 | 解释 |
---|---|
Algorithm | 指代签名的算法,目前仅支持 HMAC-SHA256 的签名算法。 |
x-date | 指代请求 UTC 时间,即请求头公共参数中 X-Date 的取值,使用遵循 ISO 8601 标准的格式:YYYYMMDD'T'HHMMSS'Z' ,例如:20201103T104027Z |
CredentialScope | 指代信任状,格式为: ${YYYYMMDD}/${service}/request ,其中${YYYYMMDD} 取 X-Date 中的日期,${service} 固定为armcloud-paas,request 为固定值。参考下方《计算CredentialScope》 |
CanonicalRequest | 指构建规范请求字符串的结果。 |
计算CredentialScope
String credentialScope = shortXDate+"/"+service+"/request";
shortXDate:短请求时间(x-date截取前8位示例:20201103)
service:服务名(固定填armcloud-paas)
"/request":固定值
Signingkey示例
HMAC哈希操作序列生成的派生签名密钥
byte[]Signingkey=hmacSHA256(hmacSHA256(hmacSHA256(sk.getBytes(),shortXDate),service),”request”);
字段 | 解释 |
---|---|
sk | 客户密钥 |
shortXDate | 短请求日期 |
Service | 服务名暂时固定填armcloud-paas |
Signature示例
signature=HexEncode(hmacSHA256(Signingkey,StringToSign))
Signature生成工具类示例(java)
import javax.crypto.Mac;
import javax.crypto.spec.SecretKeySpec;
import java.security.MessageDigest;
public class PaasSignUtils {
public static final String service = "armcloud-paas";
public static String signature(String contentType, String signedHeaders, String host, String xDate, String sk, byte[] body) throws Exception {
if (body == null) {
body = new byte[0];
}
String xContentSha256 = hashSHA256(body);
String shortXDate = xDate.substring(0, 8);
String canonicalStringBuilder = "host:" + host + "\n" + "x-date:" + xDate + "\n" + "content-type:" + contentType + "\n" + "signedHeaders:" + signedHeaders + "\n" + "x-content-sha256:" + xContentSha256;
String hashcanonicalString = hashSHA256(canonicalStringBuilder.getBytes());
String credentialScope = shortXDate + "/" + service + "/request";
String signString = "HMAC-SHA256" + "\n" + xDate + "\n" + credentialScope + "\n" + hashcanonicalString;
byte[] signKey = genSigningSecretKeyV4(sk, shortXDate, service);
return bytesToHex(hmacSHA256(signKey, signString));
}
public static String hashSHA256(byte[] content) throws Exception {
try {
MessageDigest md = MessageDigest.getInstance("SHA-256");
return bytesToHex(md.digest(content));
} catch (Exception e) {
throw new Exception("Unable to compute hash while signing request: " + e.getMessage(), e);
}
}
public static byte[] hmacSHA256(byte[] key, String content) throws Exception {
try {
Mac mac = Mac.getInstance("HmacSHA256");
mac.init(new SecretKeySpec(key, "HmacSHA256"));
return mac.doFinal(content.getBytes());
} catch (Exception e) {
throw new Exception("Unable to calculate a request signature: " + e.getMessage(), e);
}
}
private static byte[] genSigningSecretKeyV4(String secretKey, String date, String service) throws Exception {
byte[] kDate = hmacSHA256((secretKey).getBytes(), date);
byte[] kService = hmacSHA256(kDate, service);
return hmacSHA256(kService, "request");
}
public static String bytesToHex(byte[] bytes) {
if (bytes == null || bytes.length == 0) {
return "";
}
final StringBuilder result = new StringBuilder();
for (byte b : bytes) {
result.append(String.format("%02x", b));
}
return result.toString();
}
}
接口调用demo示例(java)
import com.alibaba.fastjson.JSONObject;
import com.alibaba.fastjson.parser.Feature;
import lombok.extern.slf4j.Slf4j;
import org.apache.http.HttpEntity;
import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.entity.StringEntity;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.util.EntityUtils;
import org.springframework.stereotype.Component;
import java.nio.charset.StandardCharsets;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
@Slf4j
@Component
public class ApiRequestUtils {
private static final String API_HOST = "api.vmoscloud.com";
private static final String CONTENT_TYPE = "application/json;charset=UTF-8";
private static final String ACCESS_KEY = "Access Key ID";
private static final String SECRET_ACCESS_KEY = "Secret Access Key";
/**
* 测试调用
*/
public static void main(String[] args) {
//POST请求
JSONObject params = new JSONObject();
params.put("taskIds", new int[]{4224});
String url = "https://api.vmoscloud.com/vcpcloud/api/padApi/padTaskDetail";
String result = sendPostRequest(url, params);
System.out.println(result);
//GET请求
// String url = "https://api.vmoscloud.com/vcpcloud/api/padApi/stsToken";
// String result = sendGetRequest(url, null);
}
public static String sendGetRequest(String url, JSONObject params) {
String xDate = DateToUTC(LocalDateTime.now());
StringBuilder urlWithParams = new StringBuilder(url);
// 构建 URL 参数
if (params != null && !params.isEmpty()) {
urlWithParams.append("?");
params.forEach((key, value) ->
urlWithParams.append(key).append("=").append(value).append("&")
);
// 去掉最后的 "&"
urlWithParams.setLength(urlWithParams.length() - 1);
}
HttpGet httpGet = new HttpGet(urlWithParams.toString());
// 设置公共头部
httpGet.setHeader("content-type", CONTENT_TYPE);
httpGet.setHeader("x-host", API_HOST);
httpGet.setHeader("x-date", xDate);
// 生成 Authorization 头部
String authorizationHeader = getAuthorizationHeader(xDate, params == null ? null : params.toJSONString(), SECRET_ACCESS_KEY);
httpGet.setHeader("authorization", authorizationHeader);
// 执行请求
try (CloseableHttpClient httpClient = HttpClients.createDefault();
CloseableHttpResponse response = httpClient.execute(httpGet)) {
HttpEntity responseEntity = response.getEntity();
return EntityUtils.toString(responseEntity, StandardCharsets.UTF_8);
} catch (Exception e) {
throw new RuntimeException("Request failed", e);
}
}
/**
* 公共请求方法
*/
public static String sendPostRequest(String url, JSONObject params) {
String xDate = DateToUTC(LocalDateTime.now());
HttpPost httpPost = new HttpPost(url);
// 设置公共头部
httpPost.setHeader("content-type", CONTENT_TYPE);
httpPost.setHeader("x-host", API_HOST);
httpPost.setHeader("x-date", xDate);
// 生成 Authorization 头部
String authorizationHeader = getAuthorizationHeader(xDate, params.toJSONString(), SECRET_ACCESS_KEY);
httpPost.setHeader("authorization", authorizationHeader);
// 设置请求体
StringEntity entity = new StringEntity(params.toJSONString(), StandardCharsets.UTF_8);
httpPost.setEntity(entity);
// 执行请求
try (CloseableHttpClient httpClient = HttpClients.createDefault();
CloseableHttpResponse response = httpClient.execute(httpPost)) {
HttpEntity responseEntity = response.getEntity();
return EntityUtils.toString(responseEntity, StandardCharsets.UTF_8);
} catch (Exception e) {
throw new RuntimeException("Request failed", e);
}
}
/**
* 使用UTC时间,精确到秒
*
* @param dateTime LocalDateTime
* @return String
*/
public static String DateToUTC(LocalDateTime dateTime) {
// 定义日期时间格式
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("uuuuMMdd'T'HHmmss'Z'");
return dateTime.format(formatter);
}
/**
* 获取签名
*/
private static String getSign(String xDate, String sk, String requestBody) throws Exception {
String body = requestBody == null ? null : JSONObject.parseObject(requestBody, Feature.OrderedField).toJSONString();
return PaasSignUtils.signature(CONTENT_TYPE, "content-type;host;x-content-sha256;x-date", API_HOST, xDate, sk, body == null ? null : body.getBytes(StandardCharsets.UTF_8));
}
/**
* 获取Authorization头
*/
private static String getAuthorizationHeader(String currentTimestamp, String body, String sk) {
try {
String sign = getSign(currentTimestamp, sk, body);
return String.format("HMAC-SHA256 Credential=%s, SignedHeaders=content-type;host;x-content-sha256;x-date, Signature=%s", ACCESS_KEY, sign);
} catch (Exception e) {
throw new RuntimeException("Failed to generate signature", e);
}
}
}
接口调用demo示例(python)
import binascii
import datetime
import hmac
import hashlib
import json
import traceback
import requests
def get_signature(data, x_date, host, content_type, signed_headers, sk):
# 给定的JSON数据
# TODO 将JSON数据转换为字符串 (修改的地方,传入的json需要去除空格)
json_string = json.dumps(data, separators=(',', ':'), ensure_ascii = False)
print(json_string)
# 计算SHA-256哈希值
hash_object = hashlib.sha256(json_string.encode())
x_content_sha256 = hash_object.hexdigest()
# 使用f-string构建canonicalStringBuilder
canonical_string_builder = (
f"host:{host}\n"
f"x-date:{x_date}\n"
f"content-type:{content_type}\n"
f"signedHeaders:{signed_headers}\n"
f"x-content-sha256:{x_content_sha256}"
)
# 假设这些变量已经被赋值
# short_x_date = datetime.datetime.now().strftime("%Y%m%d") # 短请求时间,例如:"20240101"
short_x_date = x_date[:8] # 短请求时间,例如:"20240101"
service = "armcloud-paas" # 服务名
# 构建credentialScope
credential_scope = "{}/{}/request".format(short_x_date, service)
# 假设这些变量已经被赋值
algorithm = "HMAC-SHA256"
# 计算canonicalStringBuilder的SHA-256哈希值
hash_sha256 = hashlib.sha256(canonical_string_builder.encode()).hexdigest()
# 构建StringToSign
string_to_sign = (
algorithm + '\n' +
x_date + '\n' +
credential_scope + '\n' +
hash_sha256
)
# 假设这些变量已经被赋值
service = "armcloud-paas" # 服务名
# 第一次hmacSHA256
first_hmac = hmac.new(sk.encode(), digestmod=hashlib.sha256)
first_hmac.update(short_x_date.encode())
first_hmac_result = first_hmac.digest()
# 第二次hmacSHA256
second_hmac = hmac.new(first_hmac_result, digestmod=hashlib.sha256)
second_hmac.update(service.encode())
second_hmac_result = second_hmac.digest()
# 第三次hmacSHA256
signing_key = hmac.new(second_hmac_result, b'request', digestmod=hashlib.sha256).digest()
# 使用signing_key和string_to_sign计算HMAC-SHA256
signature_bytes = hmac.new(signing_key, string_to_sign.encode(), hashlib.sha256).digest()
# 将HMAC-SHA256的结果转换为十六进制编码的字符串
signature = binascii.hexlify(signature_bytes).decode()
return signature
def paas_url_util(url, data, ak, sk):
x_date = datetime.datetime.now().strftime("%Y%m%dT%H%M%SZ")
content_type = "application/json"
signed_headers = f"content-type;host;x-content-sha256;x-date"
ShortDate = x_date[:8]
host = "openapi-hk.armcloud.net"
# 获取signature
signature = get_signature(data, x_date, host, content_type, signed_headers, sk)
url = f"http://openapi-hk.armcloud.net{url}"
payload = json.dumps(data)
headers = {
'Content-Type': content_type,
'x-date': x_date,
'x-host': host,
'authorization': f"HMAC-SHA256 Credential={ak}/{ShortDate}/armcloud-paas/request, SignedHeaders=content-type;host;x-content-sha256;x-date, Signature={signature}"
}
response = requests.request("POST", url, headers=headers, data=payload)
return response.json()
def vmos_url_util(url, data, AccessKey, sk):
x_date = datetime.datetime.now().strftime("%Y%m%dT%H%M%SZ")
content_type = "application/json;charset=UTF-8"
signed_headers = f"content-type;host;x-content-sha256;x-date"
ShortDate = x_date[:8]
host = "api.vmoscloud.com"
# 获取signature
signature = get_signature(data, x_date, host, content_type, signed_headers, sk)
url = f"https://api.vmoscloud.com{url}"
payload = json.dumps(data, ensure_ascii = False)
headers = {
'content-type': "application/json;charset=UTF-8",
'x-date': x_date,
'x-host': "api.vmoscloud.com",
'authorization': f"HMAC-SHA256 Credential={AccessKey}, SignedHeaders=content-type;host;x-content-sha256;x-date, Signature={signature}"
}
response = requests.request("POST", url, headers=headers, data=payload)
return response.json()
#根据查询条件分页获取实例列表信息/vcpcloud/api/padApi/infos
pad_infos_url='/vcpcloud/api/padApi/padTaskDetail'
pad_infos_body={"taskIds":[4224]}
#vmos接口调用
print(vmos_url_util(pad_infos_url, pad_infos_body, 'Access Key ID','Secret Access Key'))
数据加解密示例
Java AES GCM 解密
import javax.crypto.Cipher;
import javax.crypto.spec.GCMParameterSpec;
import javax.crypto.spec.SecretKeySpec;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.security.SecureRandom;
import java.util.Base64;
public class AESUtils {
private static final String AES = "AES";
private static final String AES_CIPHER_ALGORITHM = "AES/GCM/NoPadding";
private static final int GCM_TAG_LENGTH = 16;
private static final int GCM_IV_LENGTH = 12;
/**
* Generates a SecretKeySpec from a given string key
*/
private static SecretKeySpec getKeyFromPassword(String password) throws NoSuchAlgorithmException {
MessageDigest sha = MessageDigest.getInstance("SHA-256");
byte[] key = sha.digest(password.getBytes());
return new SecretKeySpec(key, AES);
}
/**
* Generates a new Initialization Vector (IV)
*/
public static byte[] generateIv() {
byte[] iv = new byte[GCM_IV_LENGTH];
new SecureRandom().nextBytes(iv);
return iv;
}
/**
* Encrypts a plain text using AES algorithm and returns both the cipher text and IV
*/
public static String encrypt(String input, String key) {
try {
SecretKeySpec secretKeySpec = getKeyFromPassword(key);
byte[] iv = generateIv();
Cipher cipher = Cipher.getInstance(AES_CIPHER_ALGORITHM);
GCMParameterSpec gcmParameterSpec = new GCMParameterSpec(GCM_TAG_LENGTH * 8, iv);
cipher.init(Cipher.ENCRYPT_MODE, secretKeySpec, gcmParameterSpec);
byte[] cipherText = cipher.doFinal(input.getBytes());
// Encode IV and cipher text to Base64 and concatenate them with a separator
String ivString = Base64.getEncoder().encodeToString(iv);
String cipherTextString = Base64.getEncoder().encodeToString(cipherText);
return ivString + ":" + cipherTextString;
} catch (Exception e) {
log.error("encrypt error >>>input:{} key:{}", input, key, e);
return null;
}
}
/**
* Decrypts an encrypted text using AES algorithm
*/
public static String decrypt(String encryptedData, String key) {
try {
SecretKeySpec secretKeySpec = getKeyFromPassword(key);
// Split the encrypted data into IV and cipher text
String[] parts = encryptedData.split(":");
String ivString = parts[0];
String cipherTextString = parts[1];
byte[] iv = Base64.getDecoder().decode(ivString);
byte[] cipherText = Base64.getDecoder().decode(cipherTextString);
Cipher cipher = Cipher.getInstance(AES_CIPHER_ALGORITHM);
GCMParameterSpec gcmParameterSpec = new GCMParameterSpec(GCM_TAG_LENGTH * 8, iv);
cipher.init(Cipher.DECRYPT_MODE, secretKeySpec, gcmParameterSpec);
byte[] plainText = cipher.doFinal(cipherText);
return new String(plainText);
} catch (Exception e) {
log.error("decrypt error >>>encryptedData:{} key:{}", encryptedData, key, e);
return null;
}
}
/**
* Encodes the input byte array to a Base64 string
*/
public static String encodeToString(byte[] input) {
return Base64.getEncoder().encodeToString(input);
}
// Encodes the input string to a Base64 string
public static String encodeToString(String input) {
return Base64.getEncoder().encodeToString(input.getBytes());
}
/**
* Decodes the input Base64 string to a byte array
*/
public static byte[] decodeToBytes(String input) {
return Base64.getDecoder().decode(input);
}
/**
* Decodes the input Base64 string to a regular string
*/
public static String decodeToString(String input) {
byte[] decodedBytes = Base64.getDecoder().decode(input);
return new String(decodedBytes);
}
/**
* Encodes the input byte array to a Base64 byte array
*/
public static byte[] encodeToBytes(byte[] input) {
return Base64.getEncoder().encode(input);
}
/**
* Decodes the input Base64 byte array to a byte array
*/
public static byte[] decodeToBytes(byte[] input) {
return Base64.getDecoder().decode(input);
}
public static void main(String[] args) throws Exception {
String key = "AC22030010001"; // 任意字符串作为密钥
// Decrypt the cipher text
String decryptedText = decrypt("iMzQUI7SwzSD0kGJ:4FZ1fn1Jdd5Z4j2ehn/F3VSUVWBwLFQZH/HOCjLAI95r", key);
System.out.println("Decrypted text: " + decryptedText);
}
}
接口概览
实例管理
接口 | 接口名 | 接口说明 |
---|---|---|
/vcpcloud/api/padApi/restart | 实例重启 | 对指定实例执行重启操作,用以解决系统无响应、卡死等问题 |
/vcpcloud/api/padApi/reset | 实例重置 | 对指定实例执行重置操作 |
/vcpcloud/api/padApi/padProperties | 查询实例属性 | 查询指定实例的属性信息 |
/vcpcloud/api/padApi/batchPadProperties | 批量查询实例属性 | 批量查询指定实例的属性信息,包括系统属性信息和设置信息。 |
/vcpcloud/api/padApi/updatePadProperties | 修改实例属性 | 动态修改实例的属性信息,包括系统属性和设置。 |
/vcpcloud/api/padApi/dissolveRoom | 停止推流 | 停止指定实例推流 |
/vcpcloud/api/padApi/updatePadAndroidProp | 修改实例安卓改机属性 | 修改实例安卓改机属性 |
/vcpcloud/api/padApi/setProxy | 实例设置代理 | 对指定实例设置代理信息 |
/vcpcloud/api/padApi/replacePad | 一键新机 | 一键新机 |
实例操控
接口 | 接口名 | 接口说明 |
---|---|---|
/vcpcloud/api/padApi/asyncCmd | 异步执行ADB命令 | 在一个或多个云手机实例中执行adb命令(异步任务) |
/vcpcloud/api/padApi/syncCmd | 同步执行ADB命令 | 在一个或多个云手机实例中同步执行adb命令 |
/vcpcloud/api/padApi/generatePreview | 生成预览图 | 对当前云手机画面进行截图,并获取下载截图文件的地址 |
/vcpcloud/api/padApi/adb | 打开/关闭实例adb | 根据实例编号打开或关闭实例adb |
/vcpcloud/api/padApi/updateContacts | 修改通讯录 | 修改通讯录 |
/vcpcloud/api/padApi/updateTimeZone | 修改实例时区 | 修改实例时区 |
/vcpcloud/api/padApi/updateLanguage | 修改实例语言 | 修改实例语言 |
/vcpcloud/api/padApi/updateSIM | 修改实例SIM卡信息 | 修改实例SIM卡信息 |
/vcpcloud/api/padApi/gpsInjectInfo | 设置实例经纬度 | 设置实例经纬度 |
/vcpcloud/api/padApi/screenshot | 本地截图 | 本地截图 |
/vcpcloud/api/padApi/upgradeImage | 升级镜像 | 升级镜像 |
/vcpcloud/api/padApi/virtualRealSwitch | 升级真机镜像 | 升级真机镜像 |
/vcpcloud/api/padApi/checkIP | 智能IP代理检测 | 智能IP代理检测 |
/vcpcloud/api/padApi/smartIp | 设置智能IP | 设置智能IP |
/vcpcloud/api/padApi/notSmartIp | 取消智能IP | 取消智能IP |
/vcpcloud/api/padApi/getTaskStatus | 设备任务执行结果查询 | 设备任务执行结果查询 |
/vcpcloud/api/padApi/switchRoot | 开关root权限 | 开关root权限 |
资源管理
接口 | 接口名 | 接口说明 |
---|---|---|
/vcpcloud/api/padApi/infos | 实例列表信息 | 查询所有已订购实例列表信息 |
应用管理
接口 | 接口名 | 接口说明 |
---|---|---|
/vcpcloud/api/padApi/updateApp | 应用上传 | 上传应用安装文件到应用管理中心(异步任务) |
/vcpcloud/api/padApi/installApp | 应用安装 | 将指定应用安装部署到指定的云实例中(异步任务) |
/vcpcloud/api/padApi/uninstallApp | 应用卸载 | 应用卸载 |
/vcpcloud/api/padApi/startApp | 应用启动 | 应用启动 |
/vcpcloud/api/padApi/stopApp | 应用停止 | 应用停止 |
/vcpcloud/api/padApi/restartApp | 应用重启 | 应用重启 |
/vcpcloud/api/padApi/appDetail | 应用详情 | 查询应用详情信息 |
/vcpcloud/api/padApi/updateFile | 文件上传 | 上传文件到文件管理中心(异步任务) |
/vcpcloud/api/padApi/padUpdateFile | 实例文件上传 | 从文件管理中心推送文件到一个或多个云手机实例(异步任务) |
/vcpcloud/api/padApi/listInstalledApp | 实例安装应用列表查询 | 实例安装应用列表查询 |
任务管理
接口 | 接口名 | 接口说明 |
---|---|---|
/vcpcloud/api/padApi/padTaskDetail | 实例操作任务详情 | 查询指定实例操作任务的执行结果详细信息 |
/vcpcloud/api/padApi/fileTaskDetail | 文件任务详情 | 查询指定文件任务的执行结果详细信息 |
云手机管理
接口 | 接口名 | 接口说明 |
---|---|---|
/vcpcloud/api/padApi/createMoneyOrder | 新建云手机 | 新建云手机 |
/vcpcloud/api/padApi/userPadList | 云手机列表 | 云手机列表 |
/vcpcloud/api/padApi/padInfo | 云手机信息查询 | 云手机信息查询 |
/vcpcloud/api/padApi/getCloudGoodList | sku套餐列表 | sku套餐列表 |
/vcpcloud/api/padApi/replaceRealAdiTemplate | 修改真机ADI模板 | 修改真机ADI模板 |
TK自动化
接口 | 接口名 | 接口说明 |
---|---|---|
/vcpcloud/api/padApi/autoTaskList | 自动化任务列表查询 | 自动化任务列表查询 |
/vcpcloud/api/padApi/addAutoTask | 创建自动化任务 | 创建自动化任务 |
/vcpcloud/api/padApi/reExecutionAutoTask | 自动化任务重试 | 自动化任务重试 |
/vcpcloud/api/padApi/cancelAutoTask | 自动化任务取消 | 自动化任务取消 |
SDK Token
接口 | 接口名 | 接口说明 |
---|---|---|
/vcpcloud/api/padApi/stsToken | 获取SDK临时token | 签发sdk临时token,用于对接入云手机服务的用户进行鉴权 |
/vcpcloud/api/padApi/stsTokenByPadCode | 根据padcode获取sdk临时token | 签发sdk临时token,用于对接入云手机服务的用户进行鉴权 |
/vcpcloud/api/padApi/clearStsToken | 清除SDK授权Token | 清除SDK授权Token |
OpenAPI 接口列表
实例管理
实例重启
对指定实例执行重启操作,用以解决系统无响应、卡死等问题。
接口地址
/vcpcloud/api/padApi/restart
请求方式
POST
请求数据类型
application/json
请求Body参数
参数名 | 示例值 | 参数类型 | 是否必填 | 参数描述 |
---|---|---|---|---|
padCodes | String[] | 是 | ||
├─ | AC21020010001 | String | 是 | 实例编号 |
groupIds | Integer[] | 否 | ||
├─ | 1 | Integer | 否 | 实例组ID |
响应参数
参数名 | 示例值 | 参数类型 | 参数描述 |
---|---|---|---|
code | 200 | Integer | 状态码 |
msg | success | String | 响应消息 |
ts | 1756021167163 | Long | 时间戳 |
data | Object[] | ||
├─taskId | 1 | Integer | 任务ID |
├─padCode | AC21020010001 | String | 实例编号 |
├─vmStatus | 1 | Integer | 实例在线状态(0:离线;1:在线) |
请求示例
{
"padCodes": [
"AC22030022693"
],
"groupIds": [1]
}
响应示例
{
"code": 200,
"msg": "success",
"ts":1713773577581,
"data":[
{
"taskId": 1,
"padCode": "AC21020010001",
"vmStatus": 1
}
]
}
错误码
错误码 | 错误说明 | 操作建议 |
---|---|---|
10001 | 重启失败 | 联系管理员 |
110004 | 执行重启命令失败 | 稍后再次重启 |
110028 | 实例不存在 | 请检查实例是否存在 |
实例重置
对指定实例执行重置操作,清理应用和文件
接口地址
/vcpcloud/api/padApi/reset
请求方式
POST
请求数据类型
application/json
请求Body参数
参数名 | 示例值 | 参数类型 | 是否必填 | 参数描述 |
---|---|---|---|---|
padCodes | String[] | 是 | ||
├─ | AC21020010001 | String | 是 | 实例编号 |
groupIds | Integer[] | 否 | ||
├─ | 1 | Integer | 否 | 实例组ID |
响应参数
参数名 | 示例值 | 参数类型 | 参数描述 |
---|---|---|---|
code | 200 | Integer | 状态码 |
msg | success | String | 响应消息 |
ts | 1756021167163 | Long | 时间戳 |
data | Object[] | ||
├─taskId | 1 | Integer | 任务ID |
├─padCode | AC21020010001 | String | 实例编号 |
├─vmStatus | 1 | Integer | 实例在线状态(0:离线;1:在线) |
请求示例
{
"padCodes": [
"AC21020010001"
],
"groupIds": [1]
}
响应示例
{
"code": 200,
"msg": "success",
"ts": 1717559681604,
"data": [
{
"taskId": 88,
"padCode": "AC22030010001",
"vmStatus": 1
},
{
"taskId": 89,
"padCode": "AC22030010002",
"vmStatus": 0
}
]
}
错误码
错误码 | 错误说明 | 操作建议 |
---|---|---|
10002 | 重置失败 | 联系管理员 |
110005 | 执行重置命令失败 | 稍后再次重置 |
查询实例属性
查询指定实例的属性信息,包括系统属性信息和设置信息。
接口地址
/vcpcloud/api/padApi/padProperties
请求方式
POST
请求数据类型
application/json
请求Body参数
参数名 | 示例值 | 参数类型 | 是否必填 | 参数描述 |
---|---|---|---|---|
padCode | AC21020010001 | String | 是 | 实例编号 |
响应参数
参数名 | 示例值 | 参数类型 | 参数描述 |
---|---|---|---|
code | 200 | Integer | 状态码 |
msg | success | String | 响应消息 |
ts | 1756021167163 | Long | 时间戳 |
data | Object | ||
├─padCode | AC21020010001 | String | 实例编号 |
├─modemPropertiesList | Object[] | Modem-属性列表 | |
├─├─propertiesName | IMEI | String | 属性名称 |
├─├─propertiesValue | 412327621057784 | String | 属性值 |
├─systemPropertiesList | Object[] | 系统-属性列表 | |
├─├─propertiesName | ro.build.id | String | 属性名称 |
├─├─propertiesValue | QQ3A.200805.001 | String | 属性值 |
├─settingPropertiesList | Object[] | setting-属性列表 | |
├─├─propertiesName | ro.build.tags | String | 属性名称 |
├─├─propertiesValue | release-keys | String | 属性值 |
├─oaidPropertiesList | Object[] | oaid-属性列表 | |
├─├─propertiesName | oaid | String | 属性名称 |
├─├─propertiesValue | 001 | String | 属性值 |
请求示例
{
"padCode": "AC21020010001"
}
响应示例
{
"code": 200,
"msg": "success",
"ts":1713773577581,
"data": {
"padCode": "AC21020010001",
"modemPropertiesList": [
{
"propertiesName": "IMEI",
"propertiesValue": "412327621057784"
}
],
"systemPropertiesList": [
{
"propertiesName": "ro.build.id",
"propertiesValue": "QQ3A.200805.001"
}
],
"settingPropertiesList": [
{
"propertiesName": "ro.build.tags",
"propertiesValue": "release-keys"
}
],
"oaidPropertiesList": [
{
"propertiesName": "oaid",
"propertiesValue": "001"
}
]
}
}
错误码
错误码 | 错误说明 | 操作建议 |
---|---|---|
110028 | 实例不存在 | 请检查实例是否正确 |
批量查询实例属性
批量查询指定实例的属性信息,包括系统属性信息和设置信息。
接口地址
/vcpcloud/api/padApi/batchPadProperties
请求方式
POST
请求数据类型
application/json
请求Body参数
参数名 | 示例值 | 参数类型 | 是否必填 | 参数描述 |
---|---|---|---|---|
padCodes | String[] | 是 | ||
├─ | AC21020010001 | String | 是 | 实例编号 |
响应参数
参数名 | 示例值 | 参数类型 | 参数描述 |
---|---|---|---|
code | 200 | Integer | 状态码 |
msg | success | String | 响应消息 |
ts | 1756021167163 | Long | 时间戳 |
data | Object[] | ||
├─padCode | AC21020010001 | String | 实例编号 |
├─modemPropertiesList | Object[] | Modem-属性列表 | |
├─├─propertiesName | IMEI | String | 属性名称 |
├─├─propertiesValue | 412327621057784 | String | 属性值 |
├─systemPropertiesList | Object[] | 系统-属性列表 | |
├─├─propertiesName | ro.build.id | String | 属性名称 |
├─├─propertiesValue | QQ3A.200805.001 | String | 属性值 |
├─settingPropertiesList | Object[] | setting-属性列表 | |
├─├─propertiesName | ro.build.tags | String | 属性名称 |
├─├─propertiesValue | release-keys | String | 属性值 |
├─oaidPropertiesList | Object[] | oaid-属性列表 | |
├─├─propertiesName | oaid | String | 属性名称 |
├─├─propertiesValue | 001 | String | 属性值 |
请求示例
{
"padCodes": [
"AC21020010001",
"AC21020010002"
]
}
响应示例
{
"code": 200,
"msg": "success",
"ts":1713773577581,
"data": [
{
"padCode": "AC21020010001",
"modemPropertiesList": [
{
"propertiesName": "IMEI",
"propertiesValue": "412327621057784"
}
],
"systemPropertiesList": [
{
"propertiesName": "ro.build.id",
"propertiesValue": "QQ3A.200805.001"
}
],
"settingPropertiesList": [
{
"propertiesName": "ro.build.tags",
"propertiesValue": "release-keys"
}
],
"oaidPropertiesList": [
{
"propertiesName": "oaid",
"propertiesValue": "001"
}
]
},
{
"padCode": "AC21020010002",
"modemPropertiesList": [
{
"propertiesName": "IMEI",
"propertiesValue": "412327621057784"
}
],
"systemPropertiesList": [
{
"propertiesName": "ro.build.id",
"propertiesValue": "QQ3A.200805.001"
}
],
"settingPropertiesList": [
{
"propertiesName": "ro.build.tags",
"propertiesValue": "release-keys"
}
],
"oaidPropertiesList": [
{
"propertiesName": "oaid",
"propertiesValue": "001"
}
]
}
]
}
错误码
错误码 | 错误说明 | 操作建议 |
---|---|---|
110028 | 实例不存在 | 请检查实例是否正确 |
修改实例属性
动态修改实例的属性信息,包括系统属性和设置
实例需要处于开机状态,该接口为即时生效
接口地址
/vcpcloud/api/padApi/updatePadProperties
请求方式
POST
请求数据类型
application/json
请求Body参数
参数名 | 示例值 | 参数类型 | 是否必填 | 参数描述 |
---|---|---|---|---|
padCodes | String[] | 是 | ||
├─ | AC21020010001 | String | 是 | 实例编号 |
modemPropertiesList | Object[] | Modem-属性列表 | ||
├─propertiesName | IMEI | String | 属性名称 | |
├─propertiesValue | 412327621057784 | String | 属性值 | |
systemPropertiesList | Object[] | 系统-属性列表 | ||
├─propertiesName | ro.build.id | String | 属性名称 | |
├─propertiesValue | QQ3A.200805.001 | String | 属性值 | |
settingPropertiesList | Object[] | setting-属性列表 | ||
├─propertiesName | ro.build.tags | String | 属性名称 | |
├─propertiesValue | release-keys | String | 属性值 | |
oaidPropertiesList | Object[] | oaid-属性列表 | ||
├─propertiesName | oaid | String | 属性名称 | |
├─propertiesValue | 001 | String | 属性值 |
响应参数
参数名 | 示例值 | 参数类型 | 参数描述 |
---|---|---|---|
code | 200 | Integer | 状态码 |
msg | success | String | 响应消息 |
ts | 1756021167163 | Long | 时间戳 |
data | Object[] | ||
├─taskId | 1 | Integer | 任务ID |
├─padCode | AC21020010001 | String | 实例编号 |
├─vmStatus | Integer | 实例在线状态(0:离线;1:在线) |
请求示例
{
"padCodes": [
"AC21020010001"
],
"modemPersistPropertiesList": [
{
"propertiesName": "IMEI",
"propertiesValue": "412327621057784"
}
],
"modemPropertiesList": [
{
"propertiesName": "IMEI",
"propertiesValue": "412327621057784"
}
],
"systemPersistPropertiesList": [
{
"propertiesName": "ro.build.id",
"propertiesValue": "QQ3A.200805.001"
}
],
"systemPropertiesList": [
{
"propertiesName": "ro.build.id",
"propertiesValue": "QQ3A.200805.001"
}
],
"settingPropertiesList": [
{
"propertiesName": "ro.build.tags",
"propertiesValue": "release-keys"
}
],
"oaidPropertiesList": [
{
"propertiesName": "oaid",
"propertiesValue": "001"
}
]
}
响应示例
{
"code": 200,
"msg": "success",
"ts": 1717570916196,
"data": [
{
"taskId": 36,
"padCode": "AC22030010001",
"vmStatus": 1
}
]
}
错误码
错误码 | 错误说明 | 操作建议 |
---|---|---|
110028 | 实例不存在 | 请检查实例是否正确 |
停止推流
停止指定实例推流,断开实例连接。
接口地址
/vcpcloud/api/padApi/dissolveRoom
请求方式
POST
请求数据类型
application/json
请求Body参数
参数名 | 示例值 | 参数类型 | 是否必填 | 参数描述 |
---|---|---|---|---|
padCodes | String[] | 是 | ||
├─ | AC11010000031 | String | 是 | 实例编号 |
├─ | AC22020020700 | String | 是 | 实例编号 |
响应参数
参数名 | 示例值 | 参数类型 | 参数描述 |
---|---|---|---|
code | 200 | Integer | 状态码 |
msg | success | String | 响应消息 |
ts | 1756021167163 | Long | 时间戳 |
data | Object[] | ||
├─successList | Object[] | 成功集合 | |
├─├─padCode | AC11010000031 | String | 实例编号 |
├─failList | Object[] | 失败集合 | |
├─├─padCode | AC22020020700 | String | 实例编号 |
├─├─errorCode | 120005 | Integer | 错误码 |
├─├─errorMsg | 实例不存在 | String | 失败的原因 |
请求示例
{
"padCodes": ["AC11010000031","AC22020020700"]
}
响应示例
{
"code": 200,
"msg": "success",
"ts":1713773577581,
"data": {
"successList": [
{
"padCode": "AC11010000031"
}
],
"failList": [
{
"padCode": "AC22020020700",
"errorCode": 120005,
"errorMsg": "实例不存在"
}
]
}
}
错误码
错误码 | 错误说明 | 操作建议 |
---|---|---|
120005 | 实例不存在 | 请检查实例编号是否正确 |
120004 | 中止推流错误,指令服务异常 | 请稍后重试 |
修改实例安卓改机属性
props字段说明:此字段为key-value定义。
接口地址
/vcpcloud/api/padApi/updatePadAndroidProp
请求方式
POST
请求数据类型
application/json
请求Body参数
参数名 | 示例值 | 参数类型 | 是否必填 | 参数描述 |
---|---|---|---|---|
padCode | AC32010210001 | String | 是 | 实例编号 |
restart | false | Boolean | 否 | 设置完成后自动重启(默认false) |
props | {} | Object | 是 | 系统属性 |
├─ro.product.vendor.name | OP52D1L1 | String | 是 | 系统属性 |
响应参数
参数名 | 示例值 | 参数类型 | 参数描述 |
---|---|---|---|
code | 200 | Integer | 状态码 |
msg | success | String | 响应消息 |
ts | 1756021167163 | Long | 时间戳 |
data | Object[] | ||
├─taskId | 24 | Long | 任务id |
├─padCode | AC32010210001 | String | 实例id |
请求示例
{
"padCode": "AC32010210001",
"props": {
"ro.product.vendor.name": "OP52D1L1"
},
"restart": false
}
响应示例
{
"code": 200,
"msg": "success",
"ts": 1730192434383,
"data": {
"taskId": 11,
"padCode": "AC32010210001"
}
}
实例操控
异步执行ADB命令
在一个或多个云手机实例中异步执行命令
接口地址
/vcpcloud/api/padApi/asyncCmd
请求方式
POST
请求数据类型
application/json
请求Body参数
参数名 | 示例值 | 参数类型 | 是否必填 | 参数描述 |
---|---|---|---|---|
padCodes | String[] | 是 | ||
├─ | AC22020020793 | String | 是 | 实例编号 |
scriptContent | cd /root;ls | String | 是 | ADB命令,多条命令使用分号隔开 |
响应参数
参数名 | 示例值 | 参数类型 | 参数描述 |
---|---|---|---|
code | 200 | Integer | 状态码 |
msg | success | String | 响应消息 |
ts | 1756021167163 | Long | 时间戳 |
data | Object[] | ||
├─taskId | 1 | Integer | 任务ID |
├─padCode | AC22020020793 | String | 实例编号 |
├─vmStatus | 1 | Integer | 实例在线状态(0:离线;1:在线) |
请求示例
{
"padCodes": [
"AC22020020793"
],
"scriptContent": "cd /root;ls"
}
响应示例
{
"code": 200,
"msg": "success",
"ts": 1717570297639,
"data": [
{
"taskId": 14,
"padCode": "AC22030010001",
"vmStatus": 1
},
{
"taskId": 15,
"padCode": "AC22030010002",
"vmStatus": 0
}
]
}
错误码
错误码 | 错误说明 | 操作建议 |
---|---|---|
110003 | 执行ADB命令失败 | 联系管理员 |
110012 | 命令执行超时 | 请稍后重试 |
同步执行ADB命令
在一个或多个云手机实例中同步执行命令
超过5秒未响应则返回超时异常
接口地址
/vcpcloud/api/padApi/syncCmd
请求方式
POST
请求数据类型
application/json
请求Body参数
参数名 | 示例值 | 参数类型 | 是否必填 | 参数描述 |
---|---|---|---|---|
padCode | AC22020020793 | String | 是 | 实例ID |
scriptContent | cd /root;ls | String | 是 | ADB命令,多条命令使用分号隔开 |
响应参数
参数名 | 示例值 | 参数类型 | 参数描述 |
---|---|---|---|
code | 200 | Integer | 状态码 |
msg | success | String | 响应消息 |
ts | 1756021167163 | Long | 时间戳 |
data | Object[] | ||
├─taskId | 1 | Integer | 任务ID |
├─padCode | AC22020020793 | String | 实例编号 |
├─taskStatus | 3 | Integer | 任务状态(-1:全失败;-2:部分失败;-3:取消;-4:超时;1:待执行;2:执行中;3:完成) |
├─taskResult | Success | String | 任务结果 |
请求示例
{
"padCode": "VP21020010231",
"scriptContent": "cd /root/nbin;ls"
}
响应示例
{
"code": 200,
"msg": "success",
"ts":1713773577581,
"data":[
{
"taskId": 1,
"padCode": "AC22020020793",
"taskStatus":3,
"taskResult":"Success"
}
]
}
错误码
错误码 | 错误说明 | 操作建议 |
---|---|---|
110003 | 执行ADB命令失败 | 请稍后重试 |
110012 | 命令执行超时 | 请稍后重试 |
生成预览图
指定的实例获取预览图。
接口地址
/vcpcloud/api/padApi/generatePreview
请求方式
POST
请求数据类型
application/json
请求Body参数
参数名 | 示例值 | 参数类型 | 是否必填 | 参数描述 |
---|---|---|---|---|
padCodes | String[] | 是 | ||
├─ | AC11010000031 | String | 是 | 实例编号 |
rotation | 0 | Integer | 是 | 截图画面横竖屏旋:0:截图方向不做处理,默认;1:截图画面旋转为竖屏时:a:手机竖屏的截图,不做处理。b:手机横屏的截图,截图顺时针旋转90度。 |
broadcast | false | Boolean | 否 | 事件是否广播(默认false) |
响应参数
参数名 | 示例值 | 参数类型 | 参数描述 |
---|---|---|---|
code | 200 | Integer | 状态码 |
msg | success | String | 响应消息 |
ts | 1756021167163 | Long | 时间戳 |
data | Object[] | ||
├─padCode | AC11010000031 | String | 实例编号 |
├─accessUrl | http://xxx.armcloud.png | String | 访问地址 |
请求示例
{
"padCodes": [
"AC11010000031"
],
"rotation": 0,
"broadcast": false
}
响应示例
{
"code": 200,
"msg": "success",
"ts":1713773577581,
"data": [
{
"padCode": "AC11010000031",
"accessUrl": "http://xxx.armcloud.png"
}
]
}
打开/关闭adb
根据实例编号打开或关闭实例adb
接口地址
/vcpcloud/api/padApi/adb
请求方式
POST
请求数据类型
application/json
请求Body参数
参数名 | 示例值 | 参数类型 | 是否必填 | 参数描述 |
---|---|---|---|---|
padCodes | AC22030010124 | String | 是 | 实例编号 |
enable | true | boolean | 是 | true-打开 false-关闭 |
响应参数
参数名 | 示例值 | 参数类型 | 参数描述 |
---|---|---|---|
code | 200 | Integer | 状态码 |
msg | success | String | 响应消息 |
ts | 1721739857317 | Long | 时间戳 |
data | Object[] | ||
├─padCode | AC32010140011 | String | 实例编号 |
├─command | adb connect ip:port | Integer | adb 连接信息 |
├─expireTime | 2024-10-24 10:42:00 | String | 连接有效期 |
├─enable | true | boolean | adb状态 |
请求示例
{
"padCode": "AC22030010001",
"enable": true
}
响应示例
{
"code": 200,
"msg": "success",
"ts": 1729651701083,
"data": {
"padCode": "AC32010161274",
"command": "adb connect ip:port",
"expireTime": "2024-10-24 10:42:00",
"enable": true
}
}
修改通讯录
fileUniqueId和info必填一个
接口地址
/vcpcloud/api/padApi/updateContacts
请求方式
POST
请求数据类型
application/json
请求Body参数
参数名 | 示例值 | 参数类型 | 是否必填 | 参数描述 |
---|---|---|---|---|
padCodes | [] | Arr | 是 | 实例编号列表 |
fileUniqueId | cfca25a2c62b00e065b417491b0cf07ffc | String | 否 | 通讯录文件ID |
info | {} | Object | 否 | 通讯录信息 |
├─firstName | tom | String | 否 | 姓名 |
├─phone | 13111111111 | String | 否 | 手机号 |
tom@gmail.com | String | 否 | 邮箱 |
响应参数
参数名 | 示例值 | 参数类型 | 参数描述 |
---|---|---|---|
code | 200 | Integer | 状态码 |
msg | success | String | 响应消息 |
ts | 1721739857317 | Long | 时间戳 |
data | Object[] | ||
├─taskId | 11 | Integer | 任务ID |
├─padCode | AC32010210001 | String | 实例编号 |
├─vmStatus | 0 | Integer | 实例在线状态(0:离线;1:在线) |
请求示例
{
"fileUniqueId": "cfca25a2c62b00e065b417491b0cf07ffc",
"info": {
"firstName": "tom",
"phone": "13111111111",
"email": "tom@gmail.com"
},
"padCodes": [
"AC32010180326"
]
}
响应示例
{
"code": 200,
"msg": "success",
"ts": 1730192434383,
"data": {
"taskId": 11,
"padCode": "AC32010210001",
"vmStatus": 0
}
}
实例设置代理
接口地址
/vcpcloud/api/padApi/setProxy
请求方式
POST
请求数据类型
application/json
请求Body参数
参数名 | 示例值 | 参数类型 | 是否必填 | 参数描述 |
---|---|---|---|---|
account | 2222 | String | 否 | 账号 |
password | 2222 | String | 否 | 密码 |
ip | 47.76.241.5 | String | 否 | IP |
port | 2222 | Integer | 否 | IP |
enable | true | Boolean | 是 | 启用 |
padCodes | [] | Array | 是 | 实例列表 |
proxyType | vpn | String | 否 | 支持参数:proxy、vpn |
proxyName | socks5 | String | 否 | 支持参数:socks5、http-relay (http、https) |
bypassPackageList | Array | 否 | 包名 设置该包名不走代理 | |
bypassIpList | Array | 否 | ip 设置该ip不走代理 | |
bypassDomainList | Array | 否 | 域名 设置该域名不走代理 |
响应参数
参数名 | 示例值 | 参数类型 | 参数描述 |
---|---|---|---|
code | 200 | Integer | 状态码 |
msg | success | String | 响应消息 |
ts | 1721739857317 | Long | 时间戳 |
data | Object[] | ||
├─taskId | 24 | Long | 任务ID |
├─padCode | AC22030010001 | String | 实例编号 |
├─vmStatus | 0 | Integer | 实例在线状态(0:离线;1:在线) |
请求示例
{
"padCodes": [
"AC32010140023"
],
"account": "2222",
"password": "2222",
"ip": "47.76.241.5",
"port": 2222,
"enable": true
}
响应示例
{
"code": 200,
"msg": "success",
"ts": 1717570663080,
"data": [
{
"taskId": 24,
"padCode": "AC32010140023",
"vmStatus": 1
}
]
}
一键新机⭐️
接口地址
/vcpcloud/api/padApi/replacePad
请求方式
POST
请求数据类型
application/json
请求Body参数
参数名 | 示例值 | 参数类型 | 是否必填 | 参数描述 |
---|---|---|---|---|
padCodes | [] | Array | 是 | 实例列表 |
响应参数
参数名 | 示例值 | 参数类型 | 参数描述 |
---|---|---|---|
code | 200 | Integer | 状态码 |
msg | success | String | 响应消息 |
ts | 1721739857317 | Long | 时间戳 |
data | Object[] | ||
├─taskId | 12818 | Long | 任务ID |
├─padCode | AC22030010001 | String | 实例编号 |
├─vmStatus | 0 | Integer | 实例在线状态(0:离线;1:在线) |
请求示例
{ "padCodes": [
"AC32010030001"
]
}
响应示例
{
"code": 200,
"msg": "success",
"ts": 1732270378320,
"data": {
"taskId": 8405,
"padCode": "AC32010030001",
"vmStatus": 2
}
}
修改实例时区
接口地址
/vcpcloud/api/padApi/updateTimeZone
请求方式
POST
请求数据类型
application/json
请求Body参数
参数名 | 示例值 | 参数类型 | 是否必填 | 参数描述 |
---|---|---|---|---|
timeZone | Asia/Shanghai | String | 是 | UTC标准时间 |
padCodes | ["AC22030010001"] | Array | 是 | 实例列表 |
响应参数
参数名 | 示例值 | 参数类型 | 参数描述 |
---|---|---|---|
code | 200 | Integer | 状态码 |
msg | success | String | 响应消息 |
ts | 1721739857317 | Long | 时间戳 |
data | Object[] | ||
├─taskId | 12818 | Long | 任务ID |
├─padCode | AC22030010001 | String | 实例编号 |
├─vmStatus | 1 | Integer | 实例在线状态(0:离线;1:在线) |
请求示例
{
"padCodes": [
"AC32010140003"
],
"timeZone": "Asia/Shanghai"
}
响应示例
{
"code": 200,
"msg": "success",
"ts": 1717570663080,
"data": [
{
"taskId": 12818,
"padCode": "AC32010140003",
"vmStatus": 1
}
]
}
修改实例语言
接口地址
/vcpcloud/api/padApi/updateLanguage
请求方式
POST
请求数据类型
application/json
请求Body参数
参数名 | 示例值 | 参数类型 | 是否必填 | 参数描述 |
---|---|---|---|---|
language | zh | String | 是 | 语言 |
country | CN | String | 否 | 国家 |
padCodes | ["AC22030010001"] | Array | 是 | 实例列表 |
响应参数
参数名 | 示例值 | 参数类型 | 参数描述 |
---|---|---|---|
code | 200 | Integer | 状态码 |
msg | success | String | 响应消息 |
ts | 1721739857317 | Long | 时间戳 |
data | Object[] | ||
├─taskId | 12818 | Long | 任务ID |
├─padCode | AC22030010001 | String | 实例编号 |
├─vmStatus | 1 | Integer | 实例在线状态(0:离线;1:在线) |
请求示例
{
"padCodes": [
"AC32010140026"
],
"language": "zh",
"country": ""
}
响应示例
{
"code": 200,
"msg": "success",
"ts": 1717570663080,
"data": [
{
"taskId": 12818,
"padCode": "AC32010140026",
"vmStatus": 1
}
]
}
修改实例SIM卡信息
接口地址
/vcpcloud/api/padApi/updateSIM
请求方式
POST
请求数据类型
application/json
请求Body参数
参数名 | 示例值 | 参数类型 | 是否必填 | 参数描述 |
---|---|---|---|---|
imei | 868034031518269 | String | 否 | IMEI号 |
imeisv | 00 | String | 否 | IMEI版本号 |
meid | A0000082C65F6C | String | 否 | 移动设备识别码 |
operatorLongname | CHINA MOBILE | String | 否 | 运营商全称 |
operatorShortnam | CMSS | String | 否 | 运营商简称 |
operatorNumeric | 455555 | String | 否 | 网络运营商id (即MCCMNC) |
spn | China | String | 否 | SIM卡运营商名称 |
iccid | 89860002191807255576 | String | 否 | SIM卡卡号 |
imsi | 460074008004488 | String | 否 | 前缀为sim卡运营商号:MCC(3位)+MNC(2位或3位) |
phonenum | 18574771704 | String | 否 | 电话号码 |
mcc | 502 | String | 否 | 网络所属国家 |
mnc | 146 | String | 否 | 移动设备网络代码 |
padCodes | ["AC22030010001"] | Array | 是 | 实例列表 |
响应参数
参数名 | 示例值 | 参数类型 | 参数描述 |
---|---|---|---|
code | 200 | Integer | 状态码 |
msg | success | String | 响应消息 |
ts | 1721739857317 | Long | 时间戳 |
data | Object[] | ||
├─taskId | 12818 | Long | 任务ID |
├─padCode | AC22030010001 | String | 实例编号 |
├─vmStatus | 1 | Integer | 实例在线状态(0:离线;1:在线) |
请求示例
{
"padCodes": ["AC22030010001"],
"imei": "868034031518269",
"imeisv": "00",
"meid": "A0000082C65F6C",
"operatorLongname": "CHINA MOBILE",
"operatorShortnam": "CMSS",
"operatorNumeric": "455555",
"spn": "China",
"iccid": "89860002191807255576",
"imsi": "460074008004488",
"phonenum": "861234566",
"netCountry": "US",
"simCountry": "US",
"type": "9",
"mcc": "502",
"mnc": "146",
"tac": "871420",
"cellid": "870091003",
"narfcn": "99240",
"physicalcellid": "6C"
}
响应示例
{
"code": 200,
"msg": "success",
"ts": 1717570663080,
"data": [
{
"taskId": 12818,
"padCode": "AC22030010001",
"vmStatus": 1
}
]
}
设置实例经纬度
接口地址
/vcpcloud/api/padApi/gpsInjectInfo
请求方式
POST
请求数据类型
application/json
请求Body参数
参数名 | 示例值 | 参数类型 | 是否必填 | 参数描述 |
---|---|---|---|---|
longitude | 116.397455 | Float | 是 | 纬度 |
latitude | 39.909187 | Float | 是 | 经度 |
padCodes | ["AC22030010001"] | Array | 是 | 实例列表 |
响应参数
参数名 | 示例值 | 参数类型 | 参数描述 |
---|---|---|---|
code | 200 | Integer | 状态码 |
msg | success | String | 响应消息 |
ts | 1721739857317 | Long | 时间戳 |
data | Object[] | ||
├─taskId | 12818 | Long | 任务ID |
├─padCode | AC22030010001 | String | 实例编号 |
├─vmStatus | 1 | Integer | 实例在线状态(0:离线;1:在线) |
请求示例
{
"padCodes": [
"AC22030010001"
],
"longitude": 116.397455,
"latitude": 39.909187
}
响应示例
{
"code": 200,
"msg": "success",
"ts": 1717570663080,
"data": [
{
"taskId": 12818,
"padCode": "AC22030010001",
"vmStatus": 1
}
]
}
本地截图
接口地址
/vcpcloud/api/padApi/screenshot
请求方式
POST
请求数据类型
application/json
请求Body参数
参数名 | 示例值 | 参数类型 | 是否必填 | 参数描述 |
---|---|---|---|---|
padCodes | String[] | 是 | ||
├─ | AC11010000031 | String | 是 | 实例编号 |
rotation | 0 | Integer | 是 | 截图画面横竖屏旋: 0:截图方向不做处理,默认; 1:截图画面旋转为竖屏时: a:手机竖屏的截图,不做处理。 b:手机横屏的截图,截图顺时针旋转90度。 |
broadcast | false | Boolean | 是 | 事件是否广播(默认false) |
definition | 50 | Integer | 否 | 清晰度 取值范围0-100 |
resolutionHeight | 1920 | Integer | 否 | 分辨率 - 高 大于1 |
resolutionWidth | 1080 | Integer | 否 | 分辨率 - 宽 大于1 |
响应参数
参数名 | 示例值 | 参数类型 | 参数描述 |
---|---|---|---|
code | 200 | Integer | 状态码 |
msg | success | String | 响应消息 |
ts | 1721739857317 | Long | 时间戳 |
data | Object[] | ||
├─taskId | 12818 | Long | 任务ID |
├─padCode | AC11010000031 | String | 实例编号 |
├─vmStatus | 1 | Integer | 实例在线状态(0:离线;1:在线) |
请求示例
{
"padCodes": [
"1721739857317"
],
"rotation": 0,
"broadcast": false,
"definition": 50,
"resolutionHeight": 1920,
"resolutionWidth": 1080
}
响应示例
{
"code": 200,
"msg": "success",
"ts": 1717570337023,
"data": [
{
"taskId": 12818,
"padCode": "AC11010000031",
"vmStatus": 1
}
]
}
升级镜像
接口地址
/vcpcloud/api/padApi/upgradeImage
请求方式
POST
请求数据类型
application/json
请求Body参数
参数名 | 示例值 | 参数类型 | 是否必填 | 参数描述 |
---|---|---|---|---|
padCodes | String[] | 是 | ||
├─ | AC22030010182 | String | 是 | 实例编号 |
imageId | mg-24061124017 | String | 是 | 镜像ID |
wipeData | false | Boolean | 是 | 是否清除实例数据(data分区), true清除,false不清除 |
响应参数
参数名 | 示例值 | 参数类型 | 参数描述 |
---|---|---|---|
code | 200 | Integer | 状态码 |
msg | success | String | 响应消息 |
ts | 1721739857317 | Long | 时间戳 |
data | Object[] | ||
├─taskId | 12818 | Long | 任务ID |
├─padCode | AC22030010182 | String | 实例编号 |
├─errorMsg | “” | String | 错误信息 |
请求示例
{
"padCodes": [
"AC22030010182"
],
"wipeData": false,
"imageId": "mg-24061124017"
}
响应示例
{
"code": 200,
"msg": "success",
"ts": 1718594881432,
"data": [
{
"taskId": 63,
"padCode": "AC22030010182",
"errorMsg": null
}
]
}
升级真机镜像
批量实例真机镜像升级
接口地址
/vcpcloud/api/padApi/virtualRealSwitch
请求方式
POST
请求数据类型
application/json
请求Body参数
参数名 | 示例值 | 参数类型 | 是否必填 | 参数描述 |
---|---|---|---|---|
padCodes | String[] | 是 | ||
├─ | AC22030010182 | String | 是 | 实例编号 |
imageId | mg-24061124017 | String | 是 | 镜像ID |
wipeData | false | Boolean | 是 | 是否清除实例数据(data分区), true清除,false不清除 |
realPhoneTemplateId | 178 | Integer | 否 | 真机模板ID upgradeImageConvertType=real时必填 |
upgradeImageConvertType | virtual | String | 是 | 转换镜像类型 virtual:虚拟机 real:云真机 |
screenLayoutId | 14 | Integer | 否 | 屏幕布局ID upgradeImageConvertType=virtual时必填 |
响应参数
参数名 | 示例值 | 参数类型 | 参数描述 |
---|---|---|---|
code | 200 | Integer | 状态码 |
msg | success | String | 响应消息 |
ts | 1721739857317 | Long | 时间戳 |
data | Object[] | ||
├─taskId | 12818 | Long | 任务ID |
├─padCode | AC22030010182 | String | 实例编号 |
├─errorMsg | “” | String | 错误信息 |
请求示例
{
"padCodes": [
"AC32010210023"
],
"imageId": "img-24112653977",
"wipeData": true,
"realPhoneTemplateId": 178,
"upgradeImageConvertType": "virtual",
"screenLayoutId": 14
}
响应示例
{
"code": 200,
"msg": "success",
"ts": 1718594881432,
"data": [
{
"taskId": 63,
"padCode": "AC22030010182",
"errorMsg": null
}
]
}
智能IP代理检测
检测代理IP是否可用,归属地信息是否正确
接口地址
/vcpcloud/api/padApi/checkIP
请求方式
POST
请求数据类型
application/json
请求Body参数
参数名 | 示例值 | 参数类型 | 是否必填 | 参数描述 |
---|---|---|---|---|
host | 127.0.0.1 | String | 是 | 代理信息 (ip或host) |
port | 8080 | Integer | 是 | 代理端口 (数字类型) |
account | xxxx | String | 是 | 代理用户名 |
password | xxxx | String | 是 | 代理密码 |
type | Socks5 | String | 是 | 代理协议类型 Socks5、 http、https |
country | US | String | 否 | 国家-强行指定时必填 - 参数请参考:curl -x http://用户名:密码@ip:端口 https://ipinfo.io?token=注册就有的token 当使用了强行指定后,系统会直接使用指定的信息,不会检测代理 |
ip | 156.228.84.62 | String | 否 | ip-强行指定时必填 |
loc | 39.0438,-77.4874 | String | 否 | 经,纬度-强行指定时必填 |
city | Ashburn | String | 否 | 城市-强行指定时必填 |
region | Virginia | String | 否 | 地区-强行指定时必填 |
timezone | America/New_York | String | 否 | 时区-强行指定时必填 |
响应参数
参数名 | 示例值 | 参数类型 | 参数描述 |
---|---|---|---|
code | 200 | Integer | 状态码 |
msg | success | String | 响应消息 |
ts | 1721739857317 | Long | 时间戳 |
data | Object[] | ||
├─proxyLocation | US-Los Angeles | String | 归属地 |
├─publicIp | 62.112.132.92 | String | 出口IP |
├─proxyWorking | true | Boolean | 检测成功-true 检测失败-false |
请求示例
{
"host": "62.112.132.92",
"port": 45001,
"account": "xxxxxxxxxx",
"password": "xxxxxxxx",
"type": "Socks5"
// "country": "US",
// "ip": "156.228.84.62",
// "loc": "39.0438,-77.4874",
// "city": "Ashburn",
// "region": "Virginia",
// "timezone": "America/New_York"
}
响应示例
{
"msg": "success",
"code": 200,
"data": {
"proxyLocation": "US-Los Angeles",
"publicIp": "62.112.132.92",
"proxyWorking": true
},
"ts": 1737601218580
}
设置智能IP
给云机设备设置智能IP,云机内的出口ip,SIM卡信息,gps坐标,时区等信息自动变更到代理的归属国家(设置完设备会重启,重启完毕后1分钟内生效, 同时设备状态变更为119-初始化中, 任务成功、失败、超时后会变更到100-正常状态 任务超时时间为5分钟 )
(设置的智能IP信息必须先经过检测接口的检测)直接设置会出现国家对应不上
接口地址
/vcpcloud/api/padApi/smartIp
请求方式
POST
请求数据类型
application/json
请求Body参数
参数名 | 示例值 | 参数类型 | 是否必填 | 参数描述 |
---|---|---|---|---|
padCodes | String[] | 是 | ||
├─ | AC22030010182 | String | 是 | 实例编号 |
host | 127.0.0.1 | String | 是 | 代理信息 (ip或host) |
port | 8080 | Integer | 是 | 代理端口 (数字类型) |
account | xxxx | String | 是 | 代理用户名 |
password | xxxx | String | 是 | 代理密码 |
type | Socks5 | String | 是 | 代理协议类型 Socks5、 http、https |
mode | vpn | String | 是 | 设置代理的模式 vpn / proxy |
响应参数
参数名 | 示例值 | 参数类型 | 参数描述 |
---|---|---|---|
code | 200 | Integer | 状态码 |
data | TASK-278784482960609280 | String | 任务编号 |
msg | success | String | 响应消息 |
ts | 1721739857317 | Long | 时间戳 |
请求示例
{
"padCodes": [
"AC32010160334"
],
"host": "62.112.132.92",
"port": 45001,
"account": "xxxxxx",
"password": "xxxxxxx",
"type": "Socks5",
"mode": "vpn"
}
响应示例
{
"msg": "success",
"code": 200,
"data": "TASK-278784482960609280",
"ts": 1737604726812
}
取消智能IP
取消智能IP,还原云机内的出口ip,SIM卡信息,gps坐标,时区等信息(设置完设备会重启,重启完毕后1分钟内生效, 同时设备状态变更为119-初始化中, 任务成功、失败、超时后会变更到100-正常状态 任务超时时间为5分钟 )
接口地址
/vcpcloud/api/padApi/notSmartIp
请求方式
POST
请求数据类型
application/json
请求Body参数
参数名 | 示例值 | 参数类型 | 是否必填 | 参数描述 |
---|---|---|---|---|
padCodes | String[] | 是 | ||
├─ | AC22030010182 | String | 是 | 实例编号 |
响应参数
参数名 | 示例值 | 参数类型 | 参数描述 |
---|---|---|---|
code | 200 | Integer | 状态码 |
data | TASK-278784482960609280 | String | 任务编号 |
msg | success | String | 响应消息 |
ts | 1721739857317 | Long | 时间戳 |
请求示例
{
"padCodes": [
"AC32010160334"
]
}
响应示例
{
"msg": "success",
"code": 200,
"data": "TASK-278784482960609280",
"ts": 1737604726812
}
设备任务执行结果查询
使用任务编号查询任务的执行结果
接口地址
/vcpcloud/api/padApi/getTaskStatus
请求方式
POST
请求数据类型
application/json
请求Body参数
参数名 | 示例值 | 参数类型 | 是否必填 | 参数描述 |
---|---|---|---|---|
taskId | TASK-278784482960609280 | String | 是 | 任务ID |
响应参数
参数名 | 示例值 | 参数类型 | 参数描述 |
---|---|---|---|
code | 200 | Integer | 状态码 |
data | Object[] | 任务结果 | |
├─padCode | AC32010150162 | String | 实例编号 |
├─taskStatus | Successfully | String | 任务状态:Executing-执行中 Successfully-已成功 Failed-已失败 Timedout-已超时 |
├─taskType | 10010 | Integer | 任务类型:10010-设置智能IP 10011-取消智能IP |
msg | success | String | 响应消息 |
ts | 1721739857317 | Long | 时间戳 |
请求示例
{
"taskId": "TASK-278784482960609280"
}
响应示例
{
"msg": "success",
"code": 200,
"data": [
{
"padCode": "AC32010150162",
"taskStatus": "Successfully",
"taskType": 10010
}
],
"ts": 1738999472135
}
开关root权限
在一个或多个云手机实例中开关root权限。 开关单个应用root,需要指定包名,否则会抛出异常.
接口地址
/vcpcloud/api/padApi/switchRoot
请求方式
POST
请求数据类型
application/json
请求Body参数
参数名 | 示例值 | 参数类型 | 是否必填 | 参数描述 |
---|---|---|---|---|
padCodes | String[] | 是 | ||
├─ | AC22020020793 | String | 是 | 实例编号 |
globalRoot | false | Boolean | 否 | 是否开启全局root权限,默认不开启 |
packageName | com.zixun.cmp | String | 否 | 应用包名(非全局root必传) |
rootStatus | root开启状态 | Integer | 是 | root状态,0:关闭 1:开启 |
响应参数
参数名 | 示例值 | 参数类型 | 参数描述 |
---|---|---|---|
code | 200 | Integer | 状态码 |
msg | success | String | 响应消息 |
ts | 1721739857317 | Long | 时间戳 |
data | Object[] | ||
├─taskId | 1 | Long | 任务ID |
├─padCode | AC22020020793 | String | 实例编号 |
├─vmStatus | 1 | Integer | 实例在线状态(0:离线;1:在线) |
请求示例
{
"padCodes": [
"AC32010250002"
],
"globalRoot": false,
"packageName": "com.android.ftpeasys",
"rootStatus": 0
}
响应示例
{
"code": 200,
"msg": "success",
"ts": 1717570297639,
"data": [
{
"taskId": 1,
"padCode": "AC32010250002",
"vmStatus": 1
}
]
}
错误码
错误码 | 错误说明 | 操作建议 |
---|---|---|
110003 | 执行ADB命令失败 | 联系管理员 |
110089 | 开启单个root包名不能为空 | 开启单个应用root时,包名不能为空 |
资源管理相关接口
实例列表信息
根据查询条件分页获取实例列表信息。
接口地址
/vcpcloud/api/padApi/infos
请求方式
POST
请求数据类型
application/json
请求Body参数
参数名 | 示例值 | 参数类型 | 是否必填 | 参数描述 |
---|---|---|---|---|
page | 1 | Integer | 是 | 页码 |
rows | 10 | Integer | 是 | 条数 |
padType | real | String | 否 | 实例类型(virtual:虚拟机;real:真机) |
padCodes | String[] | 否 | ||
├─ | AC22010020062 | String | 是 | 实例编号 |
groupIds | Integer[] | 否 | ||
├─ | 1 | Integer | 否 | 实例分组ID |
响应参数
参数名 | 示例值 | 参数类型 | 参数描述 |
---|---|---|---|
code | 200 | Integer | |
msg | success | String | |
ts | 1713773577581 | Long | |
data | Object | ||
├─page | 1 | Integer | 当前页 |
├─rows | 10 | Integer | 每页的数量 |
├─size | 1 | Integer | 当前页的数量 |
├─total | 1 | Integer | 总记录数 |
├─totalPage | 1 | Integer | 总页数 |
├─pageData | object[] | 列表 | |
├─├─padCode | VP21020010391 | String | 实例编号 |
├─├─padGrade | q1-2 | String | 实例开数(q1-6六开,q1-2二开) |
├─├─padStatus | 10 | String | 实例状态 (10-运行中 11-重启中 12-重置中 13-升级中 14-异常 15-未就绪) |
├─├─groupId | 0 | Integer | 分组ID |
├─├─idcCode | d3c1f580c41525e514330a85dfdecda8 | String | 机房编码 |
├─├─deviceIp | 192.168.0.0 | String | 云机ip |
├─├─padIp | 192.168.0.0 | String | 实例ip |
├─├─apps | String[] | 安装的应用列表 | |
├─├─├─ | armcloud001 | String | 安装的应用 |
请求示例
{
"page": 1,
"rows": 10,
"padCodes": [
"AC21020010391"
],
"groupIds":[1]
}
响应示例
{
"code": 200,
"msg": "success",
"ts":1713773577581,
"data": {
"page": 1,
"rows": 1,
"size": 1,
"total": 1,
"totalPage": 1,
"pageData": [
{
{
"padCode": "AC21020010391",
"padGrade": "q2-4",
"padStatus": 10,
"groupId": 0,
"idcCode": "8e61ad284bc105b877611e6fef7bdd17",
"deviceIp": "172.31.2.34",
"padIp": "10.255.1.19",
"apps": [
"armcloud001"
]
}
]
}
}
应用管理
应用上传
上传应用安装文件到指定业务的应用管理中心(异步任务)。
接口地址
/vcpcloud/api/padApi/updateApp
请求方式
POST
请求数据类型
application/json
请求Body参数
参数名 | 示例值 | 参数类型 | 是否必填 | 参数描述 |
---|---|---|---|---|
parse | true | Boolean | 是 | 是否缓存并解析(解析并缓存) 如解析则无需填包信息 |
apps | Object[] | 是 | 应用列表 | |
├─ url | https://xxx.armcloud.apk | String | 是 | 源文件下载地址 |
├─ appName | kuaishou | String | 否 | 应用名称 |
├─ pkgName | com.smile.gifmaker | String | 否 | 包名 |
├─ signMd5 | 0F938C4F0995A83C9BF31F0C64322589 | String | 否 | 应用签名MD5 |
├─ versionNo | 36000 | Integer | 否 | 版本号 |
├─ versionName | 12.3.20.36000 | String | 否 | 版本名 |
├─ description | kuai | String | 否 | 描述 |
├─ md5sum | e673a204b8f18a0f6482da9998 | String | 否 | 应用唯一标识 |
响应参数
参数名 | 示例值 | 参数类型 | 参数描述 |
---|---|---|---|
code | 200 | Integer | 状态码 |
msg | success | String | 响应消息 |
ts | 1756021167163 | Long | 时间戳 |
data | Object[] | ||
├─ taskId | 12 | Integer | 任务ID |
├─ appId | 1243 | Integer | 应用ID |
请求示例
{
"parse": true,
"apps": [
{
"appName": "kuaishou",
"url": "https://xxx.armcloud.apk",
"pkgName": "com.smile.gifmaker",
"signMd5": "0F938C4F0995A83C9BF31F0C64322589",
"versionNo": 36000,
"versionName": "12.3.20.36000",
"description": "kuai",
"md5sum": "e673a204b8f18a0f6482da9998"
}
]
}
响应示例
{
"code": 200,
"msg": "success",
"ts":1713773577581,
"data": [
{
"taskId": 12,
"appId": 1243
}
]
}
应用详情
查询应用详情。
接口地址
/vcpcloud/api/padApi/appDetail
请求方式
POST
请求数据类型
application/json
请求Body参数
参数名 | 示例值 | 参数类型 | 是否必填 | 参数描述 |
---|---|---|---|---|
appId | 1 | Integer | 是 | 应用id |
响应参数
参数名 | 示例值 | 参数类型 | 参数描述 |
---|---|---|---|
code | 200 | Integer | 是 |
msg | success | String | 是 |
ts | 1713773577581 | Long | 是 |
appId | 1 | Integer | 是 |
originUrl | http://www.xx.com/test.apk | String | 是 |
customizeFileId | customizeId_v5o26 | String | 是 |
description | test | String | 是 |
packageName | xxx.xxx.com | String | 是 |
appName | test | String | 是 |
versionName | 1.0.1 | String | 是 |
versionNo | 124511 | Integer | 是 |
signMd5 | 0F938C4F0995A83C9BF31F0C64322589 | String | 是 |
createTime | 1711595044000 | Long | 是 |
请求示例
{
"appId":1
}
响应示例
{
"code": 200,
"msg": "success",
"ts":1713773577581,
"data": {
"appId": 1,
"originUrl": "http://www.xx.com/test.apk",
"customizeFileId": "customizeId_v5o26",
"description": "test",
"packageName": "xxx.xxx.com",
"appName": "test",
"versionName": "1.0.1",
"versionNo": 124511,
"signMd5": "0F938C4F0995A83C9BF31F0C64322589",
"createTime": 1711595044000
}
}
应用安装
为单台或多台实例同时安装单个或多个APP。此接口为异步操作。
接口地址
/vcpcloud/api/padApi/installApp
请求方式
POST
请求数据类型
application/json
请求Body参数
参数名 | 示例值 | 参数类型 | 是否必填 | 参数描述 |
---|---|---|---|---|
apps | Object[] | 是 | 应用列表 | |
├─appId | 124 | Integer | 是 | 应用ID |
├─appName | 葫芦侠 | String | 是 | 应用名称 |
├─pkgName | com.huluxia.gametools | String | 是 | 应用包名 |
├─padCodes | String[] | 是 | ||
├─├─ | AC22010020062 | String | 是 | 实例编号 |
响应参数
参数名 | 示例值 | 参数类型 | 参数描述 |
---|---|---|---|
code | 200 | Integer | 状态码 |
msg | success | String | 响应消息 |
ts | 1756021167163 | Long | 时间戳 |
data | Object[] | ||
├─taskId | 1 | Integer | 任务ID |
├─padCode | AC22010020062 | String | 实例编号 |
├─vmStatus | 1 | Integer | 实例在线状态(0:离线;1:在线) |
请求示例
{
"apps":[
{
"appId":124,
"appName":"葫芦侠",
"pkgName":"com.huluxia.gametools",
"padCodes":["AC22010020062"]
}
]
}
响应示例
{
"code": 200,
"msg": "success",
"ts": 1717570991004,
"data": [
{
"taskId": 37,
"padCode": "AC22030010001",
"vmStatus": 1
},
{
"taskId": 38,
"padCode": "AC22030010002",
"vmStatus": 1
}
]
}
错误码
错误码 | 错误说明 | 操作建议 |
---|---|---|
140005 | 文件不可用 | 查看文件是否存在 |
应用卸载
为单台或多台实例同时卸载单个或多个APP。此接口为异步操作。
接口地址
/vcpcloud/api/padApi/uninstallApp
请求方式
POST
请求数据类型
application/json
请求Body参数
参数名 | 示例值 | 参数类型 | 是否必填 | 参数描述 |
---|---|---|---|---|
apps | Object[] | 是 | 应用列表 | |
├─appId | 124 | Integer | 是 | 应用ID |
├─appName | 葫芦侠 | String | 是 | 应用名称 |
├─pkgName | com.huluxia.gametools | String | 是 | 应用包名 |
├─padCodes | String[] | 是 | ||
├─├─ | AC22010020062 | String | 是 | 实例编号 |
响应参数
参数名 | 示例值 | 参数类型 | 参数描述 |
---|---|---|---|
code | 200 | Integer | 状态码 |
msg | success | String | 响应消息 |
ts | 1756021167163 | Long | 时间戳 |
data | Object[] | ||
├─taskId | 1 | Integer | 任务ID |
├─padCode | AC22010020062 | String | 实例编号 |
├─vmStatus | 1 | Integer | 实例在线状态(0:离线;1:在线) |
请求示例
{
"apps":[
{
"appId":124,
"appName":"葫芦侠",
"pkgName":"com.huluxia.gametools",
"padCodes":["AC22010020062"]
}
]
}
响应示例
{
"code": 200,
"msg": "success",
"ts": 1717570991004,
"data": [
{
"taskId": 37,
"padCode": "AC22030010001",
"vmStatus": 1
},
{
"taskId": 38,
"padCode": "AC22030010002",
"vmStatus": 1
}
]
}
错误码
错误码 | 错误说明 | 操作建议 |
---|---|---|
110007 | 卸载应用失败 | 稍后请重试 |
应用启动
根据实例编号和应用包名对实例进行应用启动的操作。
接口地址
/vcpcloud/api/padApi/startApp
请求方式
POST
请求数据类型
application/json
请求Body参数
参数名 | 示例值 | 参数类型 | 是否必填 | 参数描述 |
---|---|---|---|---|
├─pkgName | xxx.test.com | String | 是 | 包名 |
├─padCodes | String[] | 是 | ||
├─├─ | AC22010020062 | String | 是 | 实例编号 |
响应参数
参数名 | 示例值 | 参数类型 | 参数描述 |
---|---|---|---|
code | 200 | Integer | 状态码 |
msg | success | String | 响应消息 |
ts | 1756021167163 | Long | 时间戳 |
data | Object[] | ||
├─taskId | 1 | Integer | 任务ID |
├─padCode | AC22010020062 | String | 实例编号 |
├─vmStatus | 1 | Integer | 实例在线状态(0:离线;1:在线) |
请求示例
{
"padCodes": [
"AC22010020062"
],
"pkgName": "xxx.test.com"
}
响应示例
{
"code": 200,
"msg": "success",
"ts": 1717570663080,
"data": [
{
"taskId": 24,
"padCode": "AC22010020062",
"vmStatus": 1
}
]
}
错误码
错误码 | 错误说明 | 操作建议 |
---|---|---|
110008 | 启动应用失败 | 重启云机后再启动应用 |
应用停止
根据实例编号和应用包名对实例进行应用停止的操作。
接口地址
/vcpcloud/api/padApi/stopApp
请求方式
POST
请求数据类型
application/json
请求Body参数
参数名 | 示例值 | 参数类型 | 是否必填 | 参数描述 |
---|---|---|---|---|
├─pkgName | xxx.test.com | String | 是 | 包名 |
├─padCodes | String[] | 是 | ||
├─├─ | AC22010020062 | String | 是 | 实例编号 |
响应参数
参数名 | 示例值 | 参数类型 | 参数描述 |
---|---|---|---|
code | 200 | Integer | 状态码 |
msg | success | String | 响应消息 |
ts | 1756021167163 | Long | 时间戳 |
data | Object[] | ||
├─taskId | 1 | Integer | 任务ID |
├─padCode | AC22010020062 | String | 实例编号 |
├─vmStatus | 1 | Integer | 实例在线状态(0:离线;1:在线) |
请求示例
{
"padCodes": [
"AC22010020062"
],
"pkgName": "xxx.test.com"
}
响应示例
{
"code": 200,
"msg": "success",
"ts": 1717570663080,
"data": [
{
"taskId": 24,
"padCode": "AC22010020062",
"vmStatus": 1
}
]
}
错误码
错误码 | 错误说明 | 操作建议 |
---|---|---|
110010 | 停止应用失败 | 重启云机关闭应用 |
应用重启
根据实例编号和应用包名对实例进行应用重启的操作。
接口地址
/vcpcloud/api/padApi/restartApp
请求方式
POST
请求数据类型
application/json
请求Body参数
参数名 | 示例值 | 参数类型 | 是否必填 | 参数描述 |
---|---|---|---|---|
├─pkgName | xxx.test.com | String | 是 | 包名 |
├─padCodes | String[] | 是 | ||
├─├─ | AC22010020062 | String | 是 | 实例编号 |
响应参数
参数名 | 示例值 | 参数类型 | 参数描述 |
---|---|---|---|
code | 200 | Integer | 状态码 |
msg | success | String | 响应消息 |
ts | 1756021167163 | Long | 时间戳 |
data | Object[] | ||
├─taskId | 1 | Integer | 任务ID |
├─padCode | AC22010020062 | String | 实例编号 |
├─vmStatus | 1 | Integer | 实例在线状态(0:离线;1:在线) |
请求示例
{
"padCodes": [
"AC22010020062"
],
"pkgName": xxx.test.com
}
响应示例
{
"code": 200,
"msg": "success",
"ts": 1717570663080,
"data": [
{
"taskId": 24,
"padCode": "AC22010020062",
"vmStatus": 1
}
]
}
错误码
错误码 | 错误说明 | 操作建议 |
---|---|---|
110009 | 重启应用失败 | 重启云机后再启动应用 |
文件上传
进行文件上传操作(异步任务)。
接口地址
/vcpcloud/api/padApi/updateFile
请求方式
POST
请求数据类型
application/json
请求Body参数
参数名 | 示例值 | 参数类型 | 是否必填 | 参数描述 |
---|---|---|---|---|
fileUrl | http://xxx.armcloud.apk | String | 是 | 文件下载地址 |
fileName | 桃源深处有人家游戏官方版.apk | String | 是 | 文件名称 |
fileSha256 | 32e1f345f209a7dc1cc704913ea436d3 | String | 是 | ⽂件预期md5,⽤作下载⽂件校验最⼤⻓度32 |
响应参数
参数名 | 示例值 | 参数类型 | 参数描述 |
---|---|---|---|
code | 200 | Integer | 状态码 |
msg | success | String | 响应消息 |
ts | 1713773577581 | Long | 时间戳 |
data | Object[] | ||
├─ taskId | 1 | Integer | 任务ID |
├─ fileUniqueId | 6865b417b7257d782afd5ac8bee4d311 | Integer | 文件唯一标识 |
请求示例
{
"fileUrl": "http://down.s.qq.com/download/11120898722/apk/10043132_com.tencent.fiftyone.yc.apk",
"fileName": "桃源深处有人家游戏官方版.apk",
"fileMd5": "c52585e13a67e13128d9963b2f20f69678a86ee8b5551ca593327d329719a5"
}
响应示例
{
"code": 200,
"msg": "success",
"ts": 1713773577581,
"data": {
"taskId":1,
"fileUniqueId": "6865b417b7257d782afd5ac8bee4d311"
}
}
实例文件上传
从文件管理中心推送文件到一个或多个云手机实例(异步任务)。
接口地址
/vcpcloud/api/padApi/padUpdateFile
请求方式
POST
请求数据类型
application/json
请求Body参数
参数名 | 示例值 | 参数类型 | 是否必填 | 参数描述 |
---|---|---|---|---|
padCodes | String[] | 是 | ||
├─ | AC22010020062 | String | 是 | 实例编号 |
autoInstall | 1 | Integer | 否 | 是否需要⾃动安装 1需要、0不需要。不填默认不需要。仅对apk类型的⽂件⽣效 |
fileUniqueId | 1e5d3bf00576ee8f3d094908c0456722 | String | 是 | 文件id唯一标识。 |
customizeFilePath | /Documents/ | String | 否 | ⾃定义路径。非必传,需以/开头。(示例:"/DCIM/", "/Documents/", "/Download/", "/Movies/", "/Music/", "/Pictures/") |
响应参数
参数名 | 示例值 | 参数类型 | 参数描述 |
---|---|---|---|
code | 200 | Integer | 状态码 |
msg | success | String | 响应消息 |
ts | 1713773577581 | Long | 时间戳 |
data | Object[] | ||
├─ padCode | AC22010020062 | String | 实例编号 |
├─ taskId | 1 | Integer | 任务ID |
├─ vmStatus | 1 | Integer | 实例在线状态(0:离线;1:在线) |
请求示例
{
"padCodes": [
"AC22010020062"
],
"autoInstall": 1,
"fileUniqueId": "1e5d3bf00576ee8f3d094908c0456722",
"customizeFilePath": "/Documents/"
}
响应示例
{
"code": 200,
"msg": "success",
"ts": 1717571059834,
"data": [
{
"taskId": 1,
"padCode": "AC22010020062",
"vmStatus": 1
}
]
}
实例安装应用列表查询
查询实例安装应用列表信息。
接口地址
/vcpcloud/api/padApi/listInstalledApp
请求方式
POST
请求数据类型
application/json
请求Body参数
参数名 | 示例值 | 参数类型 | 是否必填 | 参数描述 |
---|---|---|---|---|
padCodes | String[] | 是 | ||
├─ | AC22010020062 | String | 是 | 实例编号 |
响应参数
参数名 | 示例值 | 参数类型 | 参数描述 |
---|---|---|---|
code | 200 | Integer | 状态码 |
msg | success | String | 响应消息 |
ts | 1713773577581 | Long | 时间戳 |
data | Object[] | ||
├─ padCode | AC22010020062 | String | 实例编号 |
├─ apps | Object[] | 应用列表 | |
│ ├─ appName | TapTap | String | 应用名称 |
│ ├─ packageName | com.taptap.global | String | 应用包名 |
│ ├─ versionName | 3.49.0-full.100000 | String | 应用版本号 |
│ ├─ versionCode | 349001000 | String | 应用版本代码 |
请求示例
{
"padCodes": ["AC32010780841"]
}
响应示例
{
"msg": "success",
"code": 200,
"data": [
{
"padCode": "AC32010780841",
"apps": [
{
"appName": "TapTap",
"packageName": "com.taptap.global",
"versionName": "3.49.0-full.100000",
"versionCode": "349001000"
}
]
}
],
"ts": 1740020993436
}
任务管理
实例操作任务详情
查询指定实例操作任务的执行结果详细信息。
接口地址
/vcpcloud/api/padApi/padTaskDetail
请求方式
POST
请求数据类型
application/json
请求Query参数
参数名 | 示例值 | 参数类型 | 是否必填 | 参数描述 |
---|---|---|---|---|
taskIds | Integer[] | 是 | ||
├─taskId | 1 | Integer | 是 | 任务ID |
响应参数
参数名 | 示例值 | 参数类型 | 参数描述 |
---|---|---|---|
code | 200 | Integer | 状态码 |
msg | success | String | 响应消息 |
ts | 1756021167163 | Long | 时间戳 |
data | Object [] | 子任务列表详情 | |
├─ taskId | 1 | Integer | 子任务ID |
├─ padCode | VP22020020793 | String | 实例标识 |
├─ taskStatus | 2 | String TODO类型使用错误 | 任务状态(-1:全失败;-2:部分失败;-3:取消;-4:超时;1:待执行;2:执行中;3:完成) |
├─ endTime | 1713429401000 | Long | 子任务结束时间戳 |
├─ taskContent | “” | String | 任务内容 |
├─ taskResult | “” | String | 任务结果 |
├─ errorMsg | “” | String | 错误信息 |
请求示例
{
"taskIds":[1,2]
}
响应示例
{
"code": 200,
"msg": "success",
"ts": 1716283460673,
"data": [
{
"taskId": 1,
"padCode": "AC22030022441",
"taskStatus": 2,
"endTime": 1713429401000,
"taskContent": null,
"taskResult": null
},
{
"taskId": 2,
"padCode": "AC22030022442",
"taskStatus": 2,
"endTime": 1713429401001,
"taskContent": null,
"taskResult": null
}
]
}
文件任务详情
查询指定文件任务的执行结果详细信息。
接口地址
/vcpcloud/api/padApi/fileTaskDetail
请求方式
POST
请求数据类型
application/json
请求Query参数
参数名 | 示例值 | 参数类型 | 是否必填 | 参数描述 |
---|---|---|---|---|
taskIds | Integer[] | 是 | ||
├─taskId | 1 | Integer | 是 | 任务ID |
响应参数
参数名 | 示例值 | 参数类型 | 参数描述 |
---|---|---|---|
code | 200 | Integer | 状态码 |
msg | success | String | 响应消息 |
ts | 1756021167163 | Long | 时间戳 |
data | Object[] | 任务列表详情 | |
├─ taskId | 1 | Integer | 子任务ID |
├─ appId | 134 | Long | 应用id |
├─ fileUniqueId | e2c07491309858c5cade4bfc44c03724 | String | ⽂件唯⼀标识 |
├─ fileName | xx.apk | String | 文件名称 |
├─ taskStatus | 2 | Integer | 任务状态(-1:全失败;-2:部分失败;-3:取消;-4:超时;1:待执行;2:执行中;3:完成) |
├─ endTime | 1713429401000 | Long | 子任务结束时间戳 |
请求示例
{
"taskIds":[
1,2
]
}
响应示例
{
"code": 200,
"msg": "success",
"ts": 1716283460673,
"data": [
{
"taskId": 1,
"appId": 134,
"fileUniqueId": "e2c07491309858c5cade4bfc44c03724",
"fileName": "xx.apk",
"taskStatus": 2,
"endTime": 1713429401000
},
{
"taskId": 2,
"appId": 135,
"fileUniqueId": "e2c07491309858c5cade4bfc43c03725",
"fileName": "xx.apk",
"taskStatus": 2,
"endTime": 1713429401001
}
]
}
自动化管理
做自动化任务时请不要操作云机,去做重启、重置、升级镜像、换机等操作云机的业务,否则会影响自动化任务。
自动化任务列表查询
自动化任务列表查询。
接口地址
/vcpcloud/api/padApi/autoTaskList
请求方式
POST
请求数据类型
application/json
请求Query参数
参数名 | 示例值 | 参数类型 | 是否必填 | 参数描述 |
---|---|---|---|---|
taskIds | Long[] | 否 | 任务id数组 | |
taskType | 1 | Integer | 否 | 任务类型:1-登陆 2-编辑资料 3-搜索短视频 4-随机浏览视频 5-发布视频 6-发布图集 |
page | 1 | Integer | 是 | 页码 |
rows | 10 | Integer | 是 | 每页记录数 |
响应参数
参数名 | 示例值 | 参数类型 | 参数描述 |
---|---|---|---|
msg | success | String | 响应消息 |
code | 200 | Integer | 状态码 |
ts | 1736327056700 | Long | 时间戳 |
data | Object | 数据详情 | |
├─ records | Object[] | 记录列表 | |
│ ├─ taskId | 115 | Integer | 任务ID |
│ ├─ userId | 14114 | Integer | 用户ID |
│ ├─ equipmentId | 106588 | Integer | 设备编号 |
│ ├─ padCode | AC32010180421 | String | 实例编号 |
│ ├─ padName | zzzzz | String | 实例名称 |
│ ├─ taskType | 1 | Integer | 任务类型:1-登陆 2-编辑资料 3-搜索短视频 4-随机浏览视频 5-发布视频 6-发布图集 |
│ ├─ taskName | testAdd | String | 任务名称 |
│ ├─ executionStatus | 0 | Integer | 执行状态:-2取消任务 -1 执行失败 0-待执行 1-执行中 2-执行成功 |
│ ├─ plannedExecutionTime | 2025-01-09 00:00:00 | String | 计划执行时间 |
│ ├─ executionEndTime | null | String | 执行结束时间 |
│ ├─ createdTime | 2025-01-08 14:25:01 | String | 创建时间 |
│ ├─ failureReason | null | String | 失败原因 |
├─ total | 46 | Integer | 总记录数 |
├─ size | 10 | Integer | 每页记录数 |
├─ current | 1 | Integer | 当前页码 |
├─ pages | 5 | Integer | 总页数 |
请求示例
{
"page": 1,
"rows": 10
}
响应示例
{
"msg": "success",
"code": 200,
"data": {
"records": [
{
"id": 121,
"taskId": 121,
"userId": 14114,
"equipmentId": 106653,
"padCode": "AC32010180522",
"padName": "V04",
"taskType": 1,
"taskName": "testAdd",
"executionStatus": 2,
"plannedExecutionTime": "2025-01-08 18:02:00",
"executionEndTime": "2025-01-08 18:08:11",
"createdTime": "2025-01-08 18:01:03",
"failureReason": null
}
],
"total": 46,
"size": 10,
"current": 1,
"pages": 5
},
"ts": 1736331989341
}
创建自动化任务
创建自动化任务。设备编号一定要传对(云手机列表接口有返回设备编号)。任务主要绑定在设备编号上,如果执行前操作了换机也不会影响设备丢失任务。(异步,会检测云机是否有下载TK应用,未下载会自动下载TK应用后再去执行任务。下载TK和执行任务期间勿手动操作云机),不同任务传参的请求不一致会有示例。
接口地址
/vcpcloud/api/padApi/addAutoTask
请求方式
POST
请求数据类型
application/json
登陆任务请求Query参数示例
参数名 | 示例值 | 参数类型 | 是否必填 | 参数描述 |
---|---|---|---|---|
taskName | testAdd | String | 是 | 任务名称 |
remarks | 测试 | String | 否 | 备注 |
taskType | 1 | Integer | 是 | 任务类型:1-登陆 2-编辑资料 3-搜索短视频 4-随机浏览视频 5-发布视频 6-发布图集 7-视频点赞评论 |
list | Object[] | 是 | 任务列表 | |
├─ equipmentId | 106653 | Integer | 是 | 设备编号 |
├─ padCode | AC32010180522 | String | 是 | 实例编号 |
├─ plannedExecutionTime | 2025-01-08 17:20:00 | String | 是 | 计划执行时间 |
├─ addInfo | 参考请求示例 | JSONObject | 是 | 任务参数(注:许按不同任务类型对应的格式填,否则任务失败) |
请求示例
{
"taskName": "testAdd",
"remarks": "测试",
"taskType": 1,
"list": [
{
"equipmentId": 106653,
"padCode": "AC32010180522",
"plannedExecutionTime": "2025-01-08 17:20:00",
"addInfo": {
"password": "zhouxi12....",
"username": "zzx833454@gmail.com"
}
}
]
}
登陆任务参数(任务类型-taskType:1)
参数名 | 示例值 | 参数类型 | 是否必填 | 参数描述 |
---|---|---|---|---|
password | zzxxxx@gmail.com | String | 是 | 账号 |
username | zzxxxx@gmail.com | String | 是 | 密码 |
编辑资料任务参数(任务类型-taskType:2)
参数名 | 示例值 | 参数类型 | 是否必填 | 参数描述 |
---|---|---|---|---|
link | https://xxxx.png | String | 是 | 头像地址 大于 250x250 |
username | test | String | 是 | 名称 |
搜索短视频任务参数(任务类型-taskType:3)
参数名 | 示例值 | 参数类型 | 是否必填 | 参数描述 |
---|---|---|---|---|
tag | 标题 | String | 是 | 标签 |
timeout | 10 | Integer | 是 | 观看时长(秒) 注:最多2小时,否则任务超时失败 |
随机浏览视频任务参数(任务类型-taskType:4)
参数名 | 示例值 | 参数类型 | 是否必填 | 参数描述 |
---|---|---|---|---|
timeout | 10 | Integer | 是 | 观看时长(秒) 注:最多2小时,否则任务超时失败 |
tag | “” | String | 否 | 标签 |
发布视频任务参数(任务类型-taskType:5)
参数名 | 示例值 | 参数类型 | 是否必填 | 参数描述 |
---|---|---|---|---|
link | https://xxxx | String | 否 | 视频oss地址 |
copywriting | test | String | 是 | 文案 |
发布图集任务参数(任务类型-taskType:6)
参数名 | 示例值 | 参数类型 | 是否必填 | 参数描述 |
---|---|---|---|---|
links | [https://xxxx] | array[String] | 是 | 图片oss地址 最多十张 |
copywriting | test | String | 是 | 文案 |
bgm | bgm | String | 是 | 背景音乐名称 |
视频点赞评论任务参数(任务类型-taskType:7)
参数名 | 示例值 | 参数类型 | 是否必填 | 参数描述 |
---|---|---|---|---|
timeout | 10 | Integer | 是 | 观看时长(秒) 注:最多2小时,否则任务超时失败 |
tag | “” | String | 否 | 标签 |
contents | ["wow"] | array[String] | 否 | 评论内容 注:目前仅支持1个,后续扩展 |
响应参数
参数名 | 示例值 | 参数类型 | 参数描述 |
---|---|---|---|
code | 0 | Integer | 状态码:0-成功 |
msg | success | String | 响应消息 |
ts | 1736327056700 | Long | 时间戳 |
data | Object {} | 子任务列表详情 | |
├─ taskIds | Long[] | 任务ID数组 |
响应示例
{
"msg": "success",
"code": 200,
"taskIds": [
116
],
"ts": 1736327380399
}
自动化任务重试
自动化任务重试。
接口地址
/vcpcloud/api/padApi/reExecutionAutoTask
请求方式
POST
请求数据类型
application/json
请求Query参数
参数名 | 示例值 | 参数类型 | 是否必填 | 参数描述 |
---|---|---|---|---|
taskIds | Long[] | 是 | 任务ID数组 | |
plannedExecutionTime | 2025-01-08 17:30:00 | Date | 是 | 计划执行时间 |
响应参数
参数名 | 示例值 | 参数类型 | 参数描述 |
---|---|---|---|
code | 200 | Integer | 状态码 |
msg | success | String | 响应消息 |
data | Object {} | 子任务列表详情 | |
ts | 1736327056700 | Long | 时间戳 |
├─ taskIds | Long[] | 新任务ID数组 |
请求示例
{
"taskIds": [
109
],
"plannedExecutionTime": "2025-01-08 17:30:00"
}
响应示例
{
"msg": "success",
"code": 200,
"taskIds": [
118
],
"ts": 1736327771611
}
自动化任务取消
自动化任务取消。
接口地址
/vcpcloud/api/padApi/cancelAutoTask
请求方式
POST
请求数据类型
application/json
请求Query参数
参数名 | 示例值 | 参数类型 | 是否必填 | 参数描述 |
---|---|---|---|---|
taskIds | Long[] | 是 | 任务ID数组 |
响应参数
参数名 | 示例值 | 参数类型 | 参数描述 |
---|---|---|---|
code | 200 | Integer | 状态码 |
msg | success | String | 响应消息 |
ts | 1736327056700 | Long | 时间戳 |
请求示例
{
"taskIds": [
118
]
}
响应示例
{
"msg": "success",
"code": 200,
"ts": 1736327841671
}
云手机管理
新建云手机
新建云手机。(注意购买的商品套餐需在网页端是存在的,否则购买失败)
接口地址
/vcpcloud/api/padApi/createMoneyOrder
请求方式
POST
请求数据类型
application/json
请求Query参数
参数名 | 示例值 | 参数类型 | 是否必填 | 参数描述 |
---|---|---|---|---|
androidVersionName | Android13 | String | 是 | Android 版本:Android13、Android14 |
configName | V08 | String | 是 | 商品型号 |
goodTime | 7 | Integer | 是 | 商品时长(天) |
goodNum | 1 | Integer | 是 | 商品数量 |
autoRenew | true | Boolean | 是 | 是否自动续费(默认开启)true-开启、false-关闭 |
equipmentId | 106626,106627 | String | 是 | 续费设备编号 (多台设备以逗号分割) |
configName商品型号描述
商品型号 | 描述 |
---|---|
V08 | 8核4G |
V06 | 8核6G |
V03 | 8核12G |
Google Pixel 7 Pro | 8核12G |
Samsung s23 ultra | 8核12G |
vivo Y31 | 8核12G |
Oppo Reno6 | 8核12G |
Realme 8i | 8核12G |
Xiaomi Redmi 10 | 8核12G |
Xiaomi Poco X4 Pro | 8核12G |
Samsung Galaxy A32 | 8核12G |
OPPO Reno6 Z | 8核12G |
Google Pixel Pro | 8核12G |
HONOR X50 | 8核12G |
SAMSUNG GalaxyS21FE5G | 8核12G |
OPPOK10Pro | 8核12G |
VIVO vivoX100 | 8核12G |
HONOR Magic Vs2 | 8核12G |
VIVO vivo X Flip | 8核12G |
VIVO vivo X Fold2 | 8核12G |
Xiaomi Redmi K50 Pro | 8核12G |
Redmi Redmi K70 | 8核12G |
Xiaomi MIX Fold2 | 8核12G |
VIVO vivo Y100 | 8核12G |
HONOR Magic3 Pro | 8核12G |
VIVO vivo X Note | 8核12G |
VIVO vivo X80 | 8核12G |
VIVO vivo X80 Pro | 8核12G |
SAMSUNG Galaxy A52 | 8核12G |
SAMSUNG Galaxy S22 5G | 8核12G |
VIVO vivo X90s | 8核12G |
HONOR 90 Pro | 8核12G |
Samsung Galaxy A52 | 8核12G |
Xiaomi 14 | 8核12G |
OPPO Reno10 Pro+ | 8核12G |
Redmi K50 Pro | 8核12G |
响应参数
参数名 | 示例值 | 参数类型 | 参数描述 |
---|---|---|---|
msg | success | String | 响应消息 |
code | 200 | Integer | 状态码 |
data | Object[] | 数据列表 | |
├─ id | 7644 | Integer | 数据唯一标识 |
├─ orderId | VMOS-CLOUD173630666722957907 | String | 订单编号 |
├─ equipmentId | 106662 | Integer | 设备ID |
├─ createTime | 2025-01-08 11:24:31 | String | 创建时间 |
├─ creater | 14114 | String | 创建人 |
ts | 1736306672346 | Long | 时间戳 |
请求示例
{
"androidVersionName": "Android13",
"configName": "V08",
"goodTime": 7,
"goodNum": 1,
"autoRenew": true
}
响应示例
{
"msg": "success",
"code": 200,
"data": [
{
"id": 7644,
"orderId": "VMOS-CLOUD173630666722957907",
"equipmentId": 106662,
"createTime": "2025-01-08 11:24:31",
"creater": "14114"
}
],
"ts": 1736306672346
}
云手机列表
云手机列表。
接口地址
/vcpcloud/api/padApi/userPadList
请求方式
POST
请求数据类型
application/json
请求Query参数
参数名 | 示例值 | 参数类型 | 是否必填 | 参数描述 |
---|---|---|---|---|
padCode | null | String | 否 | 实例编号 |
equipmentIds | Integer[] | 否 | 设备编号数组 |
响应参数
参数名 | 示例值 | 参数类型 | 参数描述 |
---|---|---|---|
code | 200 | Integer | 状态码 |
msg | success | String | 响应消息 |
ts | 1736235894274 | Long | 时间戳 |
data | Object[] | 数据列表 | |
├─ padCode | AC32010180421 | String | 云机编号 |
├─ deviceIp | 172.30.5.43 | String | 云机物理机IP |
├─ padIp | 10.254.21.225 | String | 云机I虚拟P |
├─ cvmStatus | 100 | Integer | 云机状态 100-正常 101-截图中 102-重启中 103-重置中 104-异常 |
├─ screenshotLink | https://XXXXXX.png | String | 云机截图链接 |
├─ equipmentId | 106626 | Integer | 设备编号 |
├─ userId | 14114 | Integer | 用户ID |
├─ status | 1 | Integer | 设备状态 |
├─ padName | V08 | String | 云机显示名称 |
├─ bootTime | 1735643626263 | Long | 云机使用时长 |
├─ cumulativeUseTime | null | Object | 设备累计使用时间 |
├─ lastBackupTime | null | Object | 上次备份时间 |
├─ maintainContent | null | Object | 维护内容 |
├─ goodId | 1 | Integer | 商品ID |
├─ goodName | i18n_Android13-V08 | String | 商品名称 |
├─ signExpirationTime | 2025-01-31 19:13:46 | String | 签约云机到期时间 |
├─ signExpirationTimeTamp | 1738322026000 | Long | 签约云机到期时间戳 |
├─ supplierType | 5 | String | 供应商类型 |
├─ androidVersionAvatar | https://XXXX.png | String | Android版本头像 |
├─ configName | V08 | String | 商品型号名称 |
├─ androidVersionAvatar2 | https://XXX.png | String | Android版本头像2 |
├─ androidVersionAvatar3 | https://XXX.png | String | Android版本头像3 |
├─ androidVersion | 13 | String | Android版本 |
├─ authorizedUserId | null | Object | 授权用户ID |
├─ authorizedExpirationTime | null | Object | 授权过期时间 |
├─ authorizedExpirationTimeTamp | null | Object | 授权过期时间戳 |
├─ changeConfig | 1 | Integer | 支持更配 0-否 1-是 |
├─ createTime | 2024-12-31 19:13:46 | String | 创建时间 |
├─ proxyIp | null | Object | 代理IP地址 |
├─ remark | String | 备注 | |
├─ proxyId | null | Object | 代理IP信息 |
├─ ipAddress | null | Object | IP归属地 |
├─ publicIp | null | Object | 出口IP |
├─ groupId | null | Object | 分组ID |
├─ groupName | null | Object | 分组名称 |
├─ groupSort | null | Object | 分组排序 |
云机状态
状态值 | 参数描述 |
---|---|
99 | 加载中 (Loading) |
100 | 正常 (Normal) |
101 | 获取截图中 (Getting Screenshot) |
102 | 重启中 (Rebooting) |
103 | 重置中 (Resetting) |
104 | 重启失败 (Reboot Failed) |
105 | 重置失败 (Reset Failed) |
106 | 维护 (Maintenance) |
107 | 镜像升级中 (Upgrading Image) |
108 | 实例迁移中 (Migrating Instance) |
109 | 实例迁移失败 (Migration Failed) |
111 | 设备更配中 (Device Configuration) |
112 | 反诈封禁 (Anti-Fraud Lockdown) |
113 | 升降配 (Config Change) |
114 | 超卖中 (Over Selling) |
115 | 换区中 (Changing Zone) |
116 | 清理内存中 (Cleaning Memory) |
119 | 云机初始化中 (Initializing Cloud Machine) |
120 | 一键新机初始化中 (One-click New Machine Initialization) |
121 | 任务执行中 (Task Execution in Progress) |
201 | 备份中 (Backing Up) |
202 | 还原中 (Restoring) |
请求示例
{
"padCode": null,
"equipmentIds": [
106626
]
}
响应示例
{
"msg": "success",
"code": 200,
"ts": 1736235894274,
"data": [
{
"padCode": "AC32010180421",
"deviceIp": "172.30.5.43",
"padIp": "10.254.21.225",
"cvmStatus": 100,
"screenshotLink": "https://XXXXXX.png",
"equipmentId": 106626,
"userId": 14114,
"status": 1,
"padName": "V08",
"bootTime": 1735643626263,
"cumulativeUseTime": null,
"lastBackupTime": null,
"maintainContent": null,
"goodId": 1,
"goodName": "i18n_Android13-V08",
"signExpirationTime": "2025-01-31 19:13:46",
"signExpirationTimeTamp": 1738322026000,
"supplierType": "5",
"androidVersionAvatar": "https://XXXX.png",
"configName": "V08",
"androidVersionAvatar2": "https://XXX.png",
"androidVersionAvatar3": "https://XXX.png",
"androidVersion": "13",
"authorizedUserId": null,
"authorizedExpirationTime": null,
"authorizedExpirationTimeTamp": null,
"changeConfig": 1,
"createTime": "2024-12-31 19:13:46",
"proxyIp": null,
"remark": "",
"proxyId": null,
"ipAddress": null,
"publicIp": null,
"groupId": null,
"groupName": null,
"groupSort": null
}
]
}
云手机信息查询
云手机信息查询。
接口地址
/vcpcloud/api/padApi/padInfo
请求方式
POST
请求数据类型
application/json
请求Query参数
参数名 | 示例值 | 参数类型 | 是否必填 | 参数描述 |
---|---|---|---|---|
padCode | AC32010180421 | String | 是 | 实例编号 |
响应参数
参数名 | 示例值 | 参数类型 | 参数描述 |
---|---|---|---|
msg | success | String | 响应消息 |
code | 200 | Integer | 状态码 |
data | Object | 响应数据 | |
├─ explain | English | String | 语言-说明 |
├─ simCountry | SG | String | SIM卡国家 |
├─ country | SG | String | 国家 |
├─ padCode | AC32010180421 | String | 实例编号 |
├─ padType | V08 | String | 设备机型 |
├─ bluetoothAddress | 3A:1F:4B:9C:2D:8E | String | 蓝牙地址 |
├─ initializationData | {"explain":"English","country":"SG","simJson":{"simCountry":"SG","operatorShortname":"M1","imei":"979706209497838","imsi":"525036719631842","phonenum":"6510633153","operatorNumeric":"52503"},"latitude":"1.3398","timeZone":"Asia/Singapore","language":"en","longitude":"103.6967"} | String | 设备信息集合 |
├─ groupId | 0 | String | 分组ID |
├─ latitude | 1.3398 | String | 纬度 |
├─ ipAddress | Hong Kong | String | IP地址 |
├─ timeZone | Asia/Singapore | String | 时区 |
├─ publicIp | 192.169.96.14 | String | 出口IP |
├─ phoneNumber | +6510633153 | String | 虚拟号码 |
├─ androidVersion | Android13 | String | Android版本 |
├─ wlanMac | 4c:7f:11:2f:a6:cc | String | WLAN MAC地址 |
├─ padName | V08 | String | Pad名称 |
├─ simIso | M1 | String | SIM卡ISO |
├─ longitude | 103.6967 | String | 经度 |
├─ operatorNumeric | 52503 | Integer | 运营商编号 |
├─ padImei | 525036719631842 | String | IMEI |
ts | 1736239152927 | Long | 时间戳 |
请求示例
{
"padCode": null
}
响应示例
{
"msg": "success",
"code": 200,
"data": {
"explain": "English",
"simCountry": "SG",
"country": "SG",
"padCode": "AC32010180421",
"padType": "V08",
"bluetoothAddress": "3A:1F:4B:9C:2D:8E",
"initializationData": "{\"explain\":\"English\",\"country\":\"SG\",\"simJson\":{\"simCountry\":\"SG\",\"operatorShortname\":\"M1\",\"imei\":\"979706209497838\",\"imsi\":\"525036719631842\",\"phonenum\":\"6510633153\",\"operatorNumeric\":\"52503\"},\"latitude\":\"1.3398\",\"timeZone\":\"Asia/Singapore\",\"language\":\"en\",\"longitude\":\"103.6967\"}",
"groupId": "0",
"latitude": "1.3398",
"ipAddress": "Hong Kong",
"timeZone": "Asia/Singapore",
"publicIp": "192.169.96.14",
"phoneNumber": "+6510633153",
"androidVersion": "Android13",
"wlanMac": "4c:7f:11:2f:a6:cc",
"padName": "V08",
"simIso": "M1",
"longitude": "103.6967",
"operatorNumeric": 52503,
"padImei": "525036719631842"
},
"ts": 1736239152927
}
sku套餐列表
sku套餐列表。
接口地址
/vcpcloud/api/padApi/getCloudGoodList
请求方式
GET
请求数据类型
application/json
响应参数
参数名 | 示例值 | 参数类型 | 参数描述 |
---|---|---|---|
msg | success | String | 响应消息 |
code | 200 | Integer | 状态码 |
data | Object | 响应数据 | |
├─ androidVersionName | Android13 | String | Android 版本名称 |
├─ cloudGoodsInfo | Object | sku套餐信息 | |
│ ├─ configs | List | 商品型号信息 | |
│ │ ├─ configName | Samsung s23 ultra | String | 商品型号名称 |
│ │ ├─ sellOutFlag | false | Boolean | 是否售罄 |
│ │ ├─ configBlurb | 顶尖科技,媲美真机至尊体验! | String | 商品型号描述 |
│ │ ├─ defaultSelection | false | Boolean | 是否默认选中 |
│ │ ├─ reorder | 0 | Integer | 排序 |
│ │ ├─ goodTimes | List | 商品价格卡 | |
│ │ │ ├─ oldGoodPrice | 100 | Integer | 原价 |
│ │ │ ├─ showContent | 1天 | String | 商品时长名称 |
│ │ │ ├─ whetherFirstPurchase | true | Boolean | 是否为首次购买 |
│ │ │ ├─ reorder | 1 | Integer | 排序 |
│ │ │ ├─ goodPrice | 100 | Integer | 商品价格 |
│ │ │ ├─ equipmentNumber | 1 | Integer | 商品发货设备数量 |
│ │ │ ├─ goodTime | 1440 | Integer | 商品时长(分钟) |
│ │ │ ├─ autoRenew | true | Boolean | 是否支持自动续订 |
│ │ │ ├─ recommendContent | 首购特惠 | String | 推荐内容 |
│ │ │ ├─ id | 27 | Integer | 商品 ID |
ts | 1737440589859 | Long | 时间戳 |
响应示例
{
"msg": "success",
"code": 200,
"data": [
{
"androidVersionName": "Android13",
"cloudGoodsInfo": {
"configs": [
{
"configName": "Samsung s23 ultra",
"sellOutFlag": false,
"configBlurb": "顶尖科技,媲美真机至尊体验!",
"defaultSelection": false,
"reorder": 0,
"goodTimes": [
{
"oldGoodPrice": 100,
"showContent": "1天",
"whetherFirstPurchase": true,
"reorder": 1,
"goodPrice": 100,
"equipmentNumber": 1,
"goodTime": 1440,
"autoRenew": true,
"recommendContent": "首购特惠",
"id": 27
}
]
}
],
"goodId": 1
}
}
],
"ts": 1737440589859
}
修改真机ADI模板
修改实例云真机ADI模版, 传入云真机模版ID
必要条件:
实例创建时,需要创建为云真机类型 实例创建时的规格,需要和目标的ADI模版规格一致 实例创建时的安卓版本,需要和目标的ADI安卓版本一致
接口地址
/vcpcloud/api/padApi/replaceRealAdiTemplate
请求方式
POST
请求数据类型
application/json
请求BODY参数
参数名 | 示例值 | 参数类型 | 是否必填 | 参数描述 |
---|---|---|---|---|
padCodes | String[] | 是 | ||
├─ | AC22010020062 | String | 是 | 实例编号 |
wipeData | false | Boolean | 是 | 是否清除数据 |
realPhoneTemplateId | 186 | Long | 是 | 云真机模板id |
响应参数
参数名 | 示例值 | 参数类型 | 参数描述 |
---|---|---|---|
msg | success | String | 响应消息 |
code | 200 | Integer | 状态码 |
data | Object | 响应数据 | |
├─taskId | 1 | Integer | 任务ID |
├─padCode | AC21020010001 | String | 实例编号 |
├─vmStatus | 1 | Integer | 实例在线状态(0:离线;1:在线) |
请求示例
{
"padCodes": ["AC32010250011"],
"wipeData": true,
"realPhoneTemplateId": 186
}
响应示例
{
"code": 200,
"msg": "success",
"ts": 1736326542985,
"data": [{
"taskId": 10074,
"padCode": "AC32010250011",
"errorMsg": null
}]
}
SDK Token签发
签发临时 STS Token,用于对接入云手机服务的用户进行鉴权。
获取SDK临时token
接口地址
/vcpcloud/api/padApi/stsToken
请求方式
GET
请求数据类型
application/json
响应参数
参数名 | 示例值 | 参数类型 | 参数描述 |
---|---|---|---|
msg | success | String | 响应消息 |
code | 200 | Integer | 状态码 |
data | Object | 数据列表 | |
├─ token | 18df5803-48ce-4b53-9457-6a15feb1daca | String | sdk通信token |
响应示例
{
"code": 200,
"msg": "success",
"ts":1713773577581,
"data": {
"token": "18df5803-48ce-4b53-9457-6a15feb1daca"
}
}
SDK-Token签发(根据padCode)
签发临时 STS Token,用于对接入云手机服务的用户进行鉴权(该token只能用于请求的padCode)。
根据padCode获取SDK临时token
接口地址
/vcpcloud/api/padApi/stsTokenByPadCode
请求方式
POST
请求数据类型
application/json
请求Query参数
参数名 | 示例值 | 参数类型 | 是否必填 | 参数描述 |
---|---|---|---|---|
padCode | AC32010230001 | String | 是 | 实例编号 |
响应参数
参数名 | 示例值 | 参数类型 | 参数描述 |
---|---|---|---|
msg | success | String | 响应消息 |
code | 200 | Integer | 状态码 |
data | Object | 数据列表 | |
├─ token | 18df5803-48ce-4b53-9457-6a15feb1daca | String | sdk通信token |
请求示例
{"padCode":"AC32010230001"}
响应示例
{
"code": 200,
"msg": "success",
"ts":1713773577581,
"data": {
"token": "18df5803-48ce-4b53-9457-6a15feb1daca"
}
}
清除SDK授权Token
接口地址
/vcpcloud/api/padApi/clearStsToken
请求方式
POST
请求数据类型
application/json
请求Query参数
参数名 | 示例值 | 参数类型 | 是否必填 | 参数描述 |
---|---|---|---|---|
token | 123 | String | 是 |
响应参数
参数名 | 示例值 | 参数类型 | 参数描述 |
---|---|---|---|
msg | success | String | 响应消息 |
code | 200 | Integer | 状态码 |
data | Object | 数据列表 | |
请求示例 |
{"token":1234}
响应示例
{
"code": 200,
"msg": "success",
"ts":1713773577581,
"data": null
}
回调相关
配置说明
需要客户在WEB端配置回调地址,配置地址成功则默认开启接收回调信息
异步执行ADB命令回调
使用场景
客户调用异步执行ADB命令,会通过该回调接口通知给客户。
字段 | 类型 | 示例 | 说明 |
---|---|---|---|
taskBusinessType | Integer | 1002 | 任务业务类型 |
taskId | Integer | 1 | 任务id |
padCode | String | AC22030022001 | 实例标识 |
taskStatus | Integer | 3 | 任务状态(-1:全失败;-2:部分失败;-3:取消;-4:超时;1:待执行;2:执行中;3:完成) |
endTime | Long | 1756021166163 | 任务执行结束时间 |
taskResult | String | Success | 任务结果 |
taskContent | String | 任务内容 | |
cmd | String | cd /root;ls | 执行的命令 |
cmdResult | String | /ws | 执行的命令返回 |
示例
{
"cmd": "cd /root;ls",
"cmdResult": "/system/bin/sh: <stdin>[1]: cd: /root: No such file or directory",
"endTime": 1734942133000,
"padCode": "AC22030022001",
"taskContent": null,
"taskId": 10614,
"taskResult": "/system/bin/sh: <stdin>[1]: cd: /root: No such file or directory",
"taskStatus": 3
}
实例文件上传回调
使用场景
客户调用实例文件上传api,会通过该回调接口通知客户。
字段 | 类型 | 示例 | 说明 |
---|---|---|---|
taskBusinessType | Integer | 1009 | 任务业务类型 |
taskId | Integer | 1 | 任务ID |
result | boolean | true | 执行结果:true-成功,false-失败 |
errorCode | String | 错误码 | |
padCode | String | AC22030022001 | 实例编号 |
fileId | String | cf08f7b685ab3a7b6a793b30de1b33ae34 | 文件id |
示例
{
"errorCode": null,
"fileId": "cfec132ab3c4e1aff5515c4467d9bbe460",
"padCode": "AC22030022001",
"result": true,
"taskBusinessType": 1009,
"taskId": 10659,
"taskResult": "Success",
"taskStatus": 3
}
应用安装回调
使用场景
客户调用应用安装,应用的安装情况会通过该回调接口通知给客户。
字段 | 类型 | 示例 | 说明 |
---|---|---|---|
taskBusinessType | Integer | 1003 | 任务业务类型 |
taskId | Integer | 1 | 任务ID |
apps | Object[] | 应用信息 | |
├─ appId | Integer | 10001 | 应用ID |
├─ appName | String | demo | 应用名称 |
├─ pkgName | String | com.xxx.demo | 包名 |
├─ padCode | String | AC22030022001 | 实例编号 |
├─ result | boolean | true | 安装结果的标识。true:成功,false:失败 |
├─ failMsg | String | 此应用已加入黑名单,禁止安装 | 失败信息 |
示例
{
"endTime": 1734939747000,
"padCode": "AC22030022001",
"taskBusinessType": 1003,
"taskContent": "",
"taskId": 10613,
"taskResult": "Success",
"taskStatus": 3
}
应用卸载回调
使用场景
客户调用应用卸载,应用卸载的情况会通过该回调接口通知给客户。
字段 | 类型 | 示例 | 说明 |
---|---|---|---|
taskBusinessType | Integer | 1004 | 任务业务类型 |
taskId | Integer | 1 | 任务ID |
apps | Object | 应用信息 | |
├─ appId | Integer | 10001 | 应用ID |
├─ appName | String | demo | 应用名称 |
├─ pkgName | String | com.xxx.demo | 包名 |
├─ padCode | String | AC22030022001 | 实例编号 |
├─ result | boolean | true | 安装结果的标识。true:成功,false:失败 |
示例
{
"endTime": 1734940052000,
"padCode": "AC22030022001",
"taskBusinessType": 1004,
"taskContent": "",
"taskId": null,
"taskResult": "Success",
"taskStatus": 3
}
应用启动回调
使用场景
客户调用应用启动,应用启动的情况会通过该回调接口通知给客户。
字段 | 类型 | 示例 | 说明 |
---|---|---|---|
taskBusinessType | Integer | 1007 | 任务业务类型 |
taskId | Integer | 1 | 任务ID |
taskStatus | Integer | 3 | 任务状态(-1:全失败;-3:取消;-4:超时;1:待执行;2:执行中;3:完成) |
padCode | String | AC22030022001 | 实例标识 |
pkgName | String | xxx.test.com | 包名 |
示例
{
"taskBusinessType": 1007,
"packageName": "com.quark.browser",
"padCode": "AC22030022001",
"taskId": 10618,
"taskStatus": 3
}
应用停止回调
使用场景
客户调用应用停止,应用停止的情况会通过该回调接口通知给客户。
字段 | 类型 | 示例 | 说明 |
---|---|---|---|
taskBusinessType | Integer | 1005 | 任务业务类型 |
taskId | Integer | 1 | 任务ID |
taskStatus | Integer | 3 | 任务状态(-1:全失败;-3:取消;-4:超时;1:待执行;2:执行中;3:完成) |
padCode | String | AC22030022001 | 实例标识 |
pkgName | String | xxx.test.com | 包名 |
示例
{
"taskBusinessType": 1005,
"packageName": "com.quark.browser",
"padCode": "AC22030022001",
"taskId": 10618,
"taskStatus": 3
}
应用重启回调
使用场景
客户调用应用重启,应用重启的情况会通过该回调接口通知给客户。
字段 | 类型 | 示例 | 说明 |
---|---|---|---|
taskBusinessType | Integer | 1006 | 任务业务类型 |
taskId | Integer | 1 | 任务ID |
taskStatus | Integer | 3 | 任务状态(-1:全失败;-3:取消;-4:超时;1:待执行;2:执行中;3:完成) |
padCode | String | AC22030022001 | 实例标识 |
pkgName | String | xxx.test.com | 包名 |
示例
{
"taskBusinessType": 1006,
"packageName": "com.quark.browser",
"padCode": "AC22030022001",
"taskId": 10618,
"taskStatus": 3
}