接口说明

最近更新时间:2025-09-03 10:07:22

我的收藏

接口概览

初始化与配置接口

方法
描述
给 TcrSdk 设置 AccessInfo 和 Token,AccessInfo 和 Token 可以请求 云 API 获取。
设置日志记录器和最小日志级别。
创建一个新的 TcrSession 实例。
销毁一个 TcrSession 对象。
获取 Android 实例操作对象。
更新所有实例的访问令牌。

云手机操作接口

方法
描述
设置截图事件。
停止截图事件。
通过安卓 Messenger 发送消息。
获取实例截图信息。
向云端实例上传文件。
向云端实例上传媒体文件。
获取实例下载地址。
获取 logcat 日志下载地址。
批量设置设备 GPS 位置信息。
批量设置设备分辨率。
批量粘贴文本到设备。
批量发送文本到设备剪贴板。
批量执行摇一摇操作。
批量执行吹一吹操作。
批量设置设备传感器信息。
批量发送 Messenger 消息。
批量查询实例属性。
查询已安装第三方应用。
批量卸载应用。
批量启动应用。
批量停止应用。
批量清除应用数据。
批量启用应用。
批量禁用应用。
批量在摄像头播放媒体文件。
批量停止摄像头媒体播放。
批量查询摄像头播放状态。
批量在摄像头显示图片。
修改前台应用保活状态。
查询前台应用保活状态。
批量添加后台保活应用。
批量移除后台保活应用。
批量设置后台保活列表。
批量查询后台保活列表。
批量清空后台保活列表。
批量设置设备静音。
批量搜索媒体库文件。
批量重启设备。
批量查询所有应用列表。
批量关闭应用到后台。
批量新增应用安装黑名单。
批量移除应用安装黑名单。
批量覆盖应用安装黑名单。
批量查询应用安装黑名单。
批量清空应用安装黑名单。
批量获取导航栏可见状态。
获取系统媒体音量。

会话连接接口

会话事件回调接口

方法
描述
会话事件回调接口。

会话初始化与配置接口

方法
描述
初始化会话,设置参数和代理。
设置会话观察者。

云实例连接接口

方法
描述
启动会话,在本地会话对象初始化成功后,调用此方法以建立和指定 ID 的云手机的连接。在成功建立连接后,此会话对象才能与指定的云手机进行交互。
释放会话,客户端释放本地会话资源。云端会在自动检测到心跳消失后释放云端资源。

会话操作接口

方法
描述
获取当前连接的请求 ID。
设置渲染视图。
设置视频接收器。
设置音频接收器。
启用音频播放。
启用本地音频。
启用本地视频。

上下行流控制接口

方法
描述
暂停媒体流。
恢复媒体流。
设置本地视频配置。
设置远程音频配置。
向云应用粘贴文本。
向云设备输入文本。
禁用云输入。
发送自定义音频数据。

云端外设交互接口

方法
描述
获取云键盘接口。
获取云鼠标接口。
获取云游戏手柄接口。
获取云触摸屏接口。
获取云运动传感器接口。
发送按键消息。
触摸屏接口
方法
描述
触发云触屏触摸事件。
运动传感器接口
方法
描述
传感器数据变化事件。
位置变化事件。
模拟传感器事件。
鼠标接口
方法
描述
云鼠标点击事件。
云鼠标滚轮滚动事件。
云鼠标相对移动事件。
云鼠标移动事件。
键盘接口
方法
描述
云键盘按键事件。
区分左右键的云键盘按键事件。
查询云虚拟键盘的大小写锁定状态。
重置云虚拟键盘的大小写锁定状态。
重置云键盘按键状态。
游戏手柄接口
方法
描述
连接虚拟游戏手柄。
断开虚拟游戏手柄。
云游戏手柄按键事件。
云游戏手柄摇杆事件。
云游戏手柄触发器事件。

音视频帧回调接口

方法
描述
解码后的视频帧数据回调。
音频数据回调。

音频会话代理接口

方法
描述
设置音频会话类别。
设置音频会话模式。
设置音频会话活动状态。

接口详细说明

配置 Token 和 AccessInfo

接口原型

- (void)setTcrConfig:(TcrConfig*) tcrConfig error:(NSError**)error;

输入参数

参数名称
必选
类型
描述
tcrConfig
TcrConfig*
会话配置信息,通过业务后端调用云 API CreateAndroidInstancesAccessToken 获得。
error
NSError**
输出错误信息。

返回值

调用示例

TcrConfig *config = [[TcrConfig alloc] initWithToken:@"your_token" accessInfo:@"your_access_info"];
NSError *error = nil;
[[TcrSdkInstance sharedInstance] initWithTcrConfig:config error:&error];
if (error) {
NSLog(@"初始化失败: %@", error);
}

设置日志

接口原型

+ (void)setLogger:(id<TCRLogDelegate> _Nonnull)logger withMinLevel:(TCRLogLevel)minLevel;

输入参数

参数名称
必选
类型
描述
logger
id<TCRLogDelegate>
日志代理。
minLevel
TCRLogLevel
最小日志级别。

返回值

调用示例

id<TCRLogDelegate> logger = ^(TCRLogLevel logLevel, NSString *log) {
NSLog(@"[SDK Log] Level: %@, Message: %@", NSStringFromTCRLogLevel(logLevel), log);
};
[TCrSdkInstance setLogger:logger withMinLevel:TCRLogLevelInfo];

创建会话

接口原型

- (TcrSession*)createSessionWithParams:(NSDictionary*)params;

输入参数

参数名称
必选
类型
描述
params
NSDictionary*
包含 TcrSession 配置参数的字典。
参数选择如下:
"preferredCodec":可选值为 "H264", "H265", "VP8", 和 "VP9"。用于设置首选的编解码器。如果设置了此字段,会尝试使用首选编解码器进行通信。如果首选编解码器不可用,将使用其他可用的编解码器。如果未设置此字段或设置无效,将使用默认编解码器。
"preferredCodecList":值为 NSArray,包含可选值 "H264", "H265", "VP8", 和 "VP9"。表示优先选择的编解码器列表,列表中元素的顺序表示优先级。例如,索引0为最高优先级的编解码器。如果无法选择设置的编解码器,则会选择其他可用的编解码器。
"idleThreshold":空闲检测阈值,即用户无活动的时间。单位为毫秒。当达到此阈值时,将触发事件 TcrEvent.CLIENT_IDLE
"local_video":可选值为布尔类型。用于启用本地摄像头。
"local_audio":可选值为布尔类型。用于启用本地麦克风。
"enableCustomAudioCapture":@{@"sampleRate": NSInteger, @"useStereoInput": BOOL},启用自定义音频捕获并设置自定义捕获音频的采样率和通道数(两个参数都是必需的)。例如,@"enableCustomAudioCapture":@{@"sampleRate":@(48000), @"useStereoInput":@(false)} 表示采样率为48000的单声道数据。此外,要启用自定义音频捕获,还需要将 "local_audio" 设置为启用本地音频上行。

返回值

类型
描述
TcrSession*
新创建的 TcrSession 实例,如果创建失败则返回 nil。

调用示例

NSDictionary *sessionParams = @{
@"preferredCodec": @"H264",
@"idleThreshold": @(30000),
@"local_video": @YES,
@"local_audio": @YES
};
TcrSession *session = [[TcrSdkInstance sharedInstance] createSessionWithParams:sessionParams];
if (!session) {
NSLog(@"创建会话失败");
}

销毁会话

接口原型

-(void)destroySession:(TcrSession*) session;

输入参数

参数名称
必选
类型
描述
session
TcrSession*
要销毁的会话对象。

返回值

调用示例

[[TcrSdkInstance sharedInstance] destroySession:session];

获取 Android 实例

接口原型

- (AndroidInstance*)getAndroidInstance;

返回值

类型
描述
AndroidInstance*
返回 Android 实例操作对象,如果未初始化则返回 nil。

调用示例

AndroidInstance *androidInstance = [[TcrSdkInstance sharedInstance] getAndroidInstance];
if (!androidInstance) {
NSLog(@"获取Android实例失败");
}

更新令牌

接口原型

- (void)updateTokens:(NSString *)token;

输入参数

参数名称
必选
类型
描述
token
NSString*
新的访问令牌字符串。

返回值

调用示例

[[TcrSdkInstance sharedInstance] updateTokens:@"new_token"];

设置截图事件

接口原型

- (void)setImageEventWithInterval:(NSInteger)interval quality:(nullable NSNumber *)quality screenshotWidth:(int)screenshotWidth screenshotHeight:(int)screenshotHeight;

输入参数

参数名称
必选
类型
描述
interval
NSInteger
截图事件的间隔(毫秒)。
quality
NSNumber*
截图质量(0-100,可选)。
screenshotWidth
int
截图宽度。
screenshotHeight
int
截图高度。

调用示例

[androidInstance setImageEventWithInterval:1000 quality:@(50) screenshotWidth:1080 screenshotHeight:1920];

停止截图事件

接口原型

- (void)stopImageEvent;

输入参数

调用示例

[androidInstance stopImageEvent];

通过安卓 Messenger 发送消息

接口原型

- (void)transMessageWithPackageName:(NSString *_Nonnull)packageName message:(NSString *_Nonnull)message;

输入参数

参数名称
必选
类型
描述
packageName
NSString*
应用包名。
message
NSString*
消息内容。

调用示例

[androidInstance transMessageWithPackageName:@"com.example.app" message:@"Hello World"];

获取实例截图信息

接口原型

- (NSString * _Nullable)getInstanceImageWithInstanceId:(NSString *_Nonnull)instanceId;

输入参数

参数名称
必选
类型
描述
instanceId
NSString*
实例 ID。

调用示例

NSString *screenshotURL = [androidInstance getInstanceImageWithInstanceId:@"cai-device-001"];

向云端实例上传文件

接口原型

- (void)uploadWithInstanceId:(NSString *_Nonnull)instanceId files:(nullable NSArray<CaiUploadFileItem *> *)files completion: (nullable CaiUploadFilesCompletion)completion;
注意:
只允许将文件上传至/sdcard/目录下。

输入参数

参数名称
必选
类型
描述
instanceId
NSString*
实例 ID。
files
NSArray<CaiUploadFileItem >
上传的文件。
completion
CaiUploadFilesCompletion
任务完成的回调。

调用示例

NSMutableArray<CaiUploadFileItem*>* files = [NSMutableArray new];
CaiUploadFileItem* itemMp4 = [CaiUploadFileItem new];
itemMp4.fileName = @"movie.mp4";
itemMp4.filePath = @"/sdcard/media";
itemMp4.fileData = [self dataForAssetNamed:@"movie" ofType:@"mp4"];
[files addObject:itemMp4];
[androidInstance uploadWithInstanceId:@"cai-device-001" files:files completion:^(CaiUploadResponse *response, NSError *error) {
if (error) {
NSLog(@"系统错误: %@", error);
return;
}

if (response.code != 0) {
NSLog(@"上传文件失败: [%ld] %@", (long)response.code, response.msg);
return;
}

NSLog(@"上传文件成功: %@", response.fileStatus);
}];

向云端实例上传媒体文件

接口原型

- (void)uploadMediaWithInstanceId:(NSString *_Nonnull)instanceId files:(nullable NSArray<CaiUploadMediaFileItem *> *)files completion: (nullable CaiUploadMediaFilesCompletion)completion;
说明:
此接口会将文件固定上传至/data/media/0/DCIM,上传完毕会通知系统添加媒体文件到相册中。

输入参数

参数名称
必选
类型
描述
instanceId
NSString*
实例 ID。
files
NSArray<CaiUploadMediaFileItem >
上传的媒体文件。
completion
CaiUploadFilesCompletion
任务完成的回调。

调用示例

NSMutableArray<CaiUploadMediaFileItem*>* files = [NSMutableArray new];
CaiUploadMediaFileItem* itemMp4 = [CaiUploadMediaFileItem new];
itemMp4.fileName = @"movie.mp4";
itemMp4.fileData = [self dataForAssetNamed:@"movie" ofType:@"mp4"]; // 加载文件至NSData*
[files addObject:itemMp4];
[androidInstance uploadWithInstanceId:@"cai-device-001" files:files completion:^(CaiUploadResponse *response, NSError *error) {
if (error) {
NSLog(@"系统错误: %@", error);
return;
}

if (response.code != 0) {
NSLog(@"上传文件失败: [%ld] %@", (long)response.code, response.msg);
return;
}

NSLog(@"上传文件成功");
}];

获取实例下载地址

接口原型

- (NSString *_Nonnull)getInstanceDownloadAddressWithInstanceId:(NSString *_Nonnull)instanceId path:(NSString *_Nonnull)path;
说明:
只允许下载/sdcard/目录下文件。
下载文件夹时会自动压缩为 zip 进行下载。
单实例下载限速10MB/s,同实例多个下载请求共享该限速。

输入参数

参数名称
必选
类型
描述
instanceId
NSString*
实例 ID。
path
NSString*
下载路径。

调用示例

NSString *downloadURL = [androidInstance getInstanceDownloadAddressWithInstanceId:@"cai-device-001" path:@"/sdcard/downloads/example.txt"];

获取logcat日志下载地址

接口原型

- (NSString *_Nonnull)getInstanceDownloadLogcatAddressWithInstanceId:(NSString *_Nonnull)instanceId recentDay:(int)recentDay;

输入参数

参数名称
必选
类型
描述
instanceId
NSString*
实例 ID。
recentDay
int
最近几天的日志。

调用示例

NSString *logcatURL = [androidInstance getInstanceDownloadLogcatAddressWithInstanceId:@"cai-device-001" recentDay:7];

批量设置设备 GPS 位置信息

接口原型

- (void)setLocationWithParams:(NSDictionary<NSString *, NSDictionary *> *_Nonnull)params completion:(CaiBatchTaskCompletion _Nullable)completion;

输入参数

参数名称
必选
类型
描述
params
NSDictionary<NSString , NSDictionary *>
位置信息参数字典,结构为:
{
@"Longitude": @(经度值), // 经度 (double) @"Latitude": @(纬度值) // 纬度 (double)
}
completion
CaiBatchTaskCompletion
任务完成的回调。

调用示例

NSDictionary *locations = @{
@"cai-device-001": @{@"Longitude": @113.32412, @"Latitude": @23.124124},
@"cai-device-002": @{@"Longitude": @114.32412, @"Latitude": @24.124124}
};
[androidInstance setLocationWithParams:locations completion:^(CaiBatchTaskResponse * _Nonnull response, NSError * _Nullable error) {
if (error) {
NSLog(@"系统错误: %@", error);
return;
}

if (response.code != 0) {
NSLog(@"整体操作失败: [%ld] %@", (long)response.code, response.message);
return;
}

NSLog(@"位置设置成功: %@", response.deviceResponses);
}];

批量设置设备分辨率

接口原型

- (void)setResolutionWithParams:(NSDictionary<NSString *, NSDictionary *> *_Nonnull)params completion:(CaiBatchTaskCompletion _Nullable)completion;

输入参数

参数名称
必选
类型
描述
params
NSDictionary<NSString , NSDictionary *>
分辨率参数字典,结构为:
{
"Width": "宽度像素 (NSInteger)",
"Height": "高度像素 (NSInteger)",
"DPI": "像素密度 (NSInteger,可选)"
}
completion
CaiBatchTaskCompletion
任务完成的回调。

调用示例

NSDictionary *resolutions = @{
@"cai-device-001": @{@"Width": @720, @"Height": @1280, @"DPI": @240},
@"cai-device-002": @{@"Width": @1080, @"Height": @1920}
};
[androidInstance setResolutionWithParams:resolutions completion:^(CaiBatchTaskResponse * _Nonnull response, NSError * _Nullable error) {
if (error) {
NSLog(@"系统错误: %@", error);
return;
}

if (response.code != 0) {
NSLog(@"整体操作失败: [%ld] %@", (long)response.code, response.message);
return;
}

NSLog(@"设置成功: %@", response.deviceResponses);
}];

批量粘贴文本到设备

接口原型

- (void)pasteWithParams:(NSDictionary<NSString *, NSDictionary *> * _Nonnull)params completion:(CaiBatchTaskCompletion _Nullable)completion;

输入参数

参数名称
必选
类型
描述
params
NSDictionary<NSString , NSDictionary *>
粘贴文本参数字典,结构为:
{
@"Text": @"粘贴文本" // 要粘贴的文本内容 (NSString)
}
completion
CaiBatchTaskCompletion
任务完成的回调。

调用示例

NSDictionary *texts = @{
@"cai-device-001": @{@"Text": @"Hello World"},
@"cai-device-002": @{@"Text": @"粘贴测试文本"}
};
[androidInstance pasteWithParams:texts completion:^(CaiBatchTaskResponse * _Nonnull response, NSError * _Nullable error) {
if (error) {
NSLog(@"系统错误: %@", error);
return;
}

if (response.code != 0) {
NSLog(@"整体操作失败: [%ld] %@", (long)response.code, response.message);
return;
}

NSLog(@"操作成功: %@", response.deviceResponses);
}];

批量发送文本到设备剪切板

接口原型

- (void)sendClipboardWithParams:(NSDictionary<NSString *, NSDictionary *> * _Nonnull)params completion:(CaiBatchTaskCompletion _Nullable)completion;

输入参数

参数名称
必选
类型
描述
params
NSDictionary<NSString , NSDictionary *>
剪切板文本参数字典,结构为:
{
@"Text": @"剪切板内容" // 要复制到剪切板的文本 (NSString)
}
completion
CaiBatchTaskCompletion
任务完成的回调。

调用示例

NSDictionary *clipboardTexts = @{
@"cai-device-001": @{@"Text": @"剪切板测试内容"},
@"cai-device-002": @{@"Text": @"这是第二台设备的文本"}
};
[androidInstance sendClipboardWithParams:clipboardTexts completion:^(CaiBatchTaskResponse *response, NSError *error) {
if (error) {
NSLog(@"系统错误: %@", error);
return;
}

if (response.code != 0) {
NSLog(@"整体操作失败: [%ld] %@", (long)response.code, response.message);
return;
}

NSLog(@"操作成功: %@", response.deviceResponses);
}];

批量执行摇一摇操作

接口原型

- (void)shakeWithParams:(NSDictionary<NSString *, NSDictionary *> * _Nonnull)params completion:(CaiBatchTaskCompletion _Nullable)completion;

输入参数

参数名称
必选
类型
描述
params
NSDictionary<NSString , NSDictionary *>
设备参数字典,结构为:
@{}
completion
CaiBatchTaskCompletion
任务完成的回调。

调用示例

NSDictionary *devices = @{
@"cai-device-001": @{},
@"cai-device-002": @{}
};
[androidInstance shakeWithParams:devices completion:^(CaiBatchTaskResponse *response, NSError *error) {
if (error) {
NSLog(@"系统错误: %@", error);
return;
}

if (response.code != 0) {
NSLog(@"整体操作失败: [%ld] %@", (long)response.code, response.message);
return;
}

NSLog(@"操作成功: %@", response.deviceResponses);
}];

批量执行吹一吹操作

接口原型

- (void)blowWithParams:(NSDictionary<NSString *, NSDictionary *> * _Nonnull)params completion:(CaiBatchTaskCompletion _Nullable)completion;

输入参数

参数名称
必选
类型
描述
params
NSDictionary<NSString , NSDictionary *>
设备参数字典,结构为:
@{}
completion
CaiBatchTaskCompletion
任务完成的回调。

调用示例

NSDictionary *devices = @{
@"cai-device-001": @{},
@"cai-device-002": @{}
};
[androidInstance blowWithParams:devices completion:^(CaiBatchTaskResponse *response, NSError *error) {
if (error) {
NSLog(@"系统错误: %@", error);
return;
}

if (response.code != 0) {
NSLog(@"整体操作失败: [%ld] %@", (long)response.code, response.message);
return;
}

NSLog(@"操作成功: %@", response.deviceResponses);
}];

批量设置设备传感器信息

接口原型

- (void)setSensorWithParams:(NSDictionary<NSString *, NSDictionary *> * _Nonnull)params completion:(CaiBatchTaskCompletion _Nullable)completion;

输入参数

参数名称
必选
类型
描述
params
NSDictionary<NSString , NSDictionary *>
操作参数字典,结构为:
{
@"Type": sensorType, // 传感器类型字符串 (
@"accelerometer"/@"gyroscope")
@"Values": valuesArray // 传感器数值数组 (
@[ @(xValue), @(yValue), @(zValue) ])
}
completion
CaiBatchTaskCompletion
任务完成的回调。

调用示例

NSDictionary *sensorData = @{
@"cai-device-001": @{@"Type": @"accelerometer", @"Values": @[ @1.5, @0.2, @9.8 ]},
@"cai-device-002": @{@"Type": @"gyroscope", @"Values": @[ @0.5, @0.0, @1.2 ]}
};
[androidInstance setSensorWithParams:sensorData completion:^(CaiBatchTaskResponse *response, NSError *error) {
if (error) {
NSLog(@"系统错误: %@", error);
return;
}

if (response.code != 0) {
NSLog(@"整体操作失败: [%ld] %@", (long)response.code, response.message);
return;
}

NSLog(@"操作成功: %@", response.deviceResponses);
}];

批量发送 Messenger 消息

接口原型

- (void)sendTransMessageWithParams:(NSDictionary<NSString *, NSDictionary *> * _Nonnull)params completion:(CaiBatchTaskCompletion _Nullable)completion;

输入参数

参数名称
必选
类型
描述
params
NSDictionary<NSString , NSDictionary *>
消息参数字典,结构为:
{
@"PackageName": @"应用包名", // 接收消息的应用包名 (NSString)
@"Msg": @"消息内容" // 要发送的自定义消息 (NSString)
}
completion
CaiBatchTaskCompletion
任务完成的回调。

调用示例

NSDictionary *messages = @{
@"cai-device-001": @{@"PackageName": @"com.example.app", @"Msg": @"命令更新"},
@"cai-device-002": @{@"PackageName": @"com.demo.app", @"Msg": @"数据同步"}
};
[androidInstance sendTransMessageWithParams:messages completion:^(CaiBatchTaskResponse *response, NSError *error) {
if (error) {
NSLog(@"系统错误: %@", error);
return;
}

if (response.code != 0) {
NSLog(@"整体操作失败: [%ld] %@", (long)response.code, response.message);
return;
}

NSLog(@"操作成功: %@", response.deviceResponses);
}];

批量查询实例属性

接口原型

- (void)describeInstancePropertiesWithParams:(NSDictionary<NSString *, NSDictionary *> * _Nonnull)params
completion:(nullable CaiDescribeInstancePropertiesCompletion)completion;

输入参数

参数名称
必选
类型
描述
params
NSDictionary<NSString , NSDictionary *>
设备参数字典,结构为:
@{}
completion
CaiDescribeInstancePropertiesCompletion
完成回调。

调用示例

NSDictionary *devices = @{@"cai-device-001": @{}, @"cai-device-002": @{}};
[androidInstance describeInstancePropertiesWithParams:devices completion:^(CaiDescribeInstancePropertiesResponse *response, NSError *error) {
if (error) {
NSLog(@"系统错误: %@", error);
return;
}

if (response.code != 0) {
NSLog(@"整体操作失败: [%ld] %@", (long)response.code, response.message);
return;
}

NSLog(@"操作成功: %@", response.deviceResponses);
}];

查询已安装第三方应用

接口原型

- (void)listUserAppsWithParams:(NSDictionary<NSString *, NSDictionary *> * _Nonnull)params
completion:(CaiListUserAppsCompletion _Nullable)completion;

输入参数

参数名称
必选
类型
描述
params
NSDictionary<NSString , NSDictionary *>
设备参数字典,结构为
@{}
completion
CaiListUserAppsCompletion
完成回调。

调用示例

NSDictionary *devices = @{@"cai-device-001": @{}, @"cai-device-002": @{}};
[androidInstance listUserAppsWithParams:devices completion:^(CaiListUserAppsResponse *response, NSError *error) {
if (error) {
NSLog(@"查询失败: %@", error);
return;
}
if (response.code != 0) {
NSLog(@"整体操作失败: [%ld] %@", (long)response.code, response.message);
return;
}
,NSLog(@"操作成功: %@", response.deviceResponses);
}];

批量卸载应用

接口原型

- (void)unInstallByPackageNameWithParams:(NSDictionary<NSString *, NSDictionary *> * _Nonnull)params
completion:(CaiBatchTaskCompletion _Nullable)completion;

输入参数

参数名称
必选
类型
描述
params
NSDictionary<NSString , NSDictionary *>
卸载参数字典,结构为:
{
@"PackageName": @"应用包名" // 要卸载的应用包名 (NSString)
}
completion
CaiBatchTaskCompletion
任务完成的回调。

调用示例

NSDictionary *uninstallParams = @{@"cai-device-001": @{@"PackageName": @"com.unwanted.app"}};
[androidInstance unInstallByPackageNameWithParams:uninstallParams completion:^(CaiBatchTaskResponse *response, NSError *error) {
if (error) {
NSLog(@"卸载失败: %@", error);
return;
}
if (response.code != 0) {
NSLog(@"整体操作失败: [%ld] %@", (long)response.code, response.message);
return;
}
NSLog(@"操作成功: %@", response.deviceResponses);
}];

批量启动应用

接口原型

- (void)startAppWithParams:(NSDictionary<NSString *, NSDictionary *> * _Nonnull)params
completion:(CaiBatchTaskCompletion _Nullable)completion;

输入参数

参数名称
必选
类型
描述
params
NSDictionary<NSString , NSDictionary *>
启动参数字典,结构为:
{
@"PackageName": @"应用包名", // 应用包名 (NSString)
@"ActivityName": @"Activity" // Activity名称 (NSString)
}
completion
CaiBatchTaskCompletion
任务完成的回调。

调用示例

NSDictionary *startParams = @{@"cai-device-001": @{@"PackageName": @"com.launch.app", @"ActivityName": @"MainActivity"}};
[androidInstance startAppWithParams:startParams completion:^(CaiBatchTaskResponse *response, NSError *error) {
if (error) {
NSLog(@"启动失败: %@", error);
return;
}
if (response.code != 0) {
NSLog(@"整体操作失败: [%ld] %@", (long)response.code, response.message);
return;
}
NSLog(@"操作成功: %@", response.deviceResponses);
}];

批量停止应用

接口原型

- (void)stopAppWithParams:(NSDictionary<NSString *, NSDictionary *> * _Nonnull)params
completion:(CaiBatchTaskCompletion _Nullable)completion;

输入参数

参数名称
必选
类型
描述
params
NSDictionary<NSString , NSDictionary *>
停止参数字典,结构为:
{
@"PackageName": @"应用包名" // 要停止的应用包名 (NSString)
}
completion
CaiBatchTaskCompletion
任务完成的回调。

调用示例

NSDictionary *stopParams = @{@"cai-device-001": @{@"PackageName": @"com.running.app"}};
[androidInstance stopAppWithParams:stopParams completion:^(CaiBatchTaskResponse *response, NSError *error) {
if (error) {
NSLog(@"停止失败: %@", error);
return;
}
if (response.code != 0) {
NSLog(@"整体操作失败: [%ld] %@", (long)response.code, response.message);
return;
}
NSLog(@"操作成功: %@", response.deviceResponses);
}];

批量清除应用数据

接口原型

- (void)clearAppDataWithParams:(NSDictionary<NSString *, NSDictionary *> * _Nonnull)params
completion:(CaiBatchTaskCompletion _Nullable)completion;

输入参数

参数名称
必选
类型
描述
params
NSDictionary<NSString , NSDictionary *>
清除参数字典,结构为:
{
@"PackageName": @"应用包名" // 要清除数据的应用包名 (NSString)
}
completion
CaiBatchTaskCompletion
任务完成的回调。

调用示例

NSDictionary *clearParams = @{@"cai-device-001": @{@"PackageName": @"com.cache.heavy"}};
[androidInstance clearAppDataWithParams:clearParams completion:^(CaiBatchTaskResponse *response, NSError *error) {
if (error) {
NSLog(@"清除失败: %@", error);
return;
}
if (response.code != 0) {
NSLog(@"整体操作失败: [%ld] %@", (long)response.code, response.message);
return;
}
NSLog(@"操作成功: %@", response.deviceResponses);
}];

批量启用应用

接口原型

- (void)enableAppWithParams:(NSDictionary<NSString *, NSDictionary *> * _Nonnull)params
completion:(CaiBatchTaskCompletion _Nullable)completion;

输入参数

参数名称
必选
类型
描述
params
NSDictionary<NSString , NSDictionary *>
启用参数字典,结构为:
{
@"PackageName": @"应用包名" // 要启用的应用包名 (NSString)
}
completion
CaiBatchTaskCompletion
任务完成的回调。

调用示例

NSDictionary *enableParams = @{@"cai-device-001": @{@"PackageName": @"com.disabled.app"}};
[androidInstance enableAppWithParams:enableParams completion:^(CaiBatchTaskResponse *response, NSError *error) {
if (error) {
NSLog(@"启用失败: %@", error);
return;
}
if (response.code != 0) {
NSLog(@"整体操作失败: [%ld] %@", (long)response.code, response.message);
return;
}
NSLog(@"操作成功: %@", response.deviceResponses);
}];

批量禁用应用

接口原型

- (void)disableAppWithParams:(NSDictionary<NSString *, NSDictionary *> * _Nonnull)params
completion:(CaiBatchTaskCompletion _Nullable)completion;

输入参数

参数名称
必选
类型
描述
params
NSDictionary<NSString , NSDictionary *>
禁用参数字典,结构为:
{
@"PackageName": @"应用包名" // 要禁用的应用包名 (NSString)
}
completion
CaiBatchTaskCompletion
任务完成的回调。

调用示例

NSDictionary *disableParams = @{@"cai-device-001": @{@"PackageName": @"com.disabled.app"}};
[androidInstance disableAppWithParams:disableParams completion:^(CaiBatchTaskResponse *response, NSError *error) {
if (error) {
NSLog(@"禁用失败: %@", error);
return;
}
if (response.code != 0) {
NSLog(@"整体操作失败: [%ld] %@", (long)response.code, response.message);
return;
}
NSLog(@"操作成功: %@", response.deviceResponses);
}];

批量在摄像头播放媒体文件

接口原型

- (void)startCameraMediaPlayWithParams:(NSDictionary<NSString *, NSDictionary *> * _Nonnull)params
completion:(CaiBatchTaskCompletion _Nullable)completion;

输入参数

参数名称
必选
类型
描述
params
NSDictionary<NSString , NSDictionary *>
播放参数字典,结构为:
{
@"FilePath": @"视频文件路径", // 视频文件路径 (NSString)
@"Loops": @(循环次数) // 循环次数 (NSInteger,负数表示无限循环)
}
completion
CaiBatchTaskCompletion
任务完成的回调。

调用示例

NSDictionary *playParams = @{@"cai-device-001": @{@"FilePath": @"/sdcard/video.mp4", @"Loops": @3}};
[androidInstance startCameraMediaPlayWithParams:playParams completion:^(CaiBatchTaskResponse *response, NSError *error) {
if (error) {
NSLog(@"播放媒体文件失败: %@", error);
return;
}
if (response.code != 0) {
NSLog(@"整体操作失败: [%ld] %@", (long)response.code, response.message);
return;
}
NSLog(@"操作成功: %@", response.deviceResponses);
}];

批量停止摄像头媒体播放

接口原型

- (void)stopCameraMediaPlayWithParams:(NSDictionary<NSString *, NSDictionary *> * _Nonnull)params
completion:(CaiBatchTaskCompletion _Nullable)completion;

输入参数

参数名称
必选
类型
描述
params
NSDictionary<NSString , NSDictionary *>
设备参数字典,结构是:
@{}
completion
CaiBatchTaskCompletion
任务完成的回调。

调用示例

NSDictionary *stopParams = @{@"cai-device-001": @{}};
[androidInstance stopCameraMediaPlayWithParams:stopParams completion:^(CaiBatchTaskResponse *response, NSError *error) {
if (error) {
NSLog(@"停止播放媒体文件失败: %@", error);
return;
}
if (response.code != 0) {
NSLog(@"整体操作失败: [%ld] %@", (long)response.code, response.message);
return;
}
NSLog(@"操作成功: %@", response.deviceResponses);
}];

批量查询摄像头播放状态

接口原型

- (void)describeCameraMediaPlayStatusWithParams:(NSDictionary<NSString *, NSDictionary *> * _Nonnull)params
completion:(CaiDescribeCameraMediaPlayStatusCompletion _Nullable)completion;

输入参数

参数名称
必选
类型
描述
params
NSDictionary<NSString , NSDictionary *>
设备参数字典,结构是:
@{}
completion
CaiDescribeCameraMediaPlayStatusCompletion
任务完成的回调。

调用示例

NSDictionary *params = @{@"cai-device-001": @{}};
[androidInstance describeCameraMediaPlayStatusWithParams:params completion:^(CaiDescribeCameraMediaPlayStatusResponse *response, NSError *error) {
if (error) {
NSLog(@"查询摄像头播放状态失败: %@", error);
return;
}
if (response.code != 0) {
NSLog(@"整体操作失败: [%ld] %@", (long)response.code, response.message);
return;
}
NSLog(@"操作成功: %@", response.deviceResponses);
}];

批量在摄像头显示图片

接口原型

- (void)displayCameraImageWithParams:(NSDictionary<NSString *, NSDictionary *> * _Nonnull)params
completion:(CaiBatchTaskCompletion _Nullable)completion;

输入参数

参数名称
必选
类型
描述
params
NSDictionary<NSString , NSDictionary *>
图片参数字典,结构是:
{
@"FilePath": @"图片文件路径"
}
completion
CaiBatchTaskCompletion
任务完成的回调。

调用示例

NSDictionary *imageParams = @{@"cai-device-001": @{@"FilePath": @"/sdcard/image.jpg"}};
[androidInstance displayCameraImageWithParams:imageParams completion:^(CaiBatchTaskResponse *response, NSError *error) {
if (error) {
NSLog(@"显示图片失败: %@", error);
return;
}
if (response.code != 0) {
NSLog(@"整体操作失败: [%ld] %@", (long)response.code, response.message);
return;
}
NSLog(@"操作成功: %@", response.deviceResponses);
}];

修改前台应用保活状态

接口原型

- (void)modifyKeepFrontAppStatusWithParams:(NSDictionary<NSString *, NSDictionary *> * _Nonnull)params
completion:(CaiBatchTaskCompletion _Nullable)completion;

输入参数

参数名称
必选
类型
描述
params
NSDictionary<NSString , NSDictionary *>
保活参数字典,结构为:
{
@"PackageName": @"应用包名", // 应用包名 (NSString)
@"Enable": @(YES/NO), // 是否启用保活 (BOOL)
@"RestartInterValSeconds": @(秒数) // 重新拉起最长间隔 (NSInteger)
}
completion
CaiBatchTaskCompletion
任务完成的回调。

调用示例

NSDictionary *keepFrontAppParams = @{@"cai-device-001": @{@"PackageName": @"com.example.app", @"Enable": @YES, @"RestartInterValSeconds": @5}};
[androidInstance modifyKeepFrontAppStatusWithParams:keepFrontAppParams completion:^(CaiBatchTaskResponse *response, NSError *error) {
if (error) {
NSLog(@"修改保活状态失败: %@", error);
return;
}
if (response.code != 0) {
NSLog(@"整体操作失败: [%ld] %@", (long)response.code, response.message);
return;
}
NSLog(@"操作成功: %@", response.deviceResponses);
}];

查询前台应用保活状态

接口原型

- (void)describeKeepFrontAppStatusWithParams:(NSDictionary<NSString *, NSDictionary *> * _Nonnull)params
completion:(CaiDescribeKeepFrontAppStatusCompletion _Nullable)completion;

输入参数

参数名称
必选
类型
描述
params
NSDictionary<NSString , NSDictionary *>
设备参数字典,结构为:
@{}
completion
CaiDescribeKeepFrontAppStatusCompletion
任务完成的回调。

调用示例

NSDictionary *params = @{@"cai-device-001": @{}};
[androidInstance describeKeepFrontAppStatusWithParams:params completion:^(CaiDescribeKeepFrontAppStatusResponse *response, NSError *error) {
if (error) {
NSLog(@"查询保活状态失败: %@", error);
return;
}
if (response.code != 0) {
NSLog(@"整体操作失败: [%ld] %@", (long)response.code, response.message);
return;
}
NSLog(@"操作成功: %@", response.deviceResponses);
}];

批量添加后台保活应用

接口原型

- (void)addKeepAliveListWithParams:(NSDictionary<NSString *, NSDictionary *> * _Nonnull)params
completion:(CaiBatchTaskCompletion _Nullable)completion;

输入参数

参数名称
必选
类型
描述
params
NSDictionary<NSString , NSDictionary *>
保活参数字典,结构为:
{
@"AppList": @[@"应用包名1", @"应用包名2"] // 应用包名数组 (NSArray<NSString*>)
}
completion
CaiBatchTaskCompletion
任务完成的回调。

调用示例

NSDictionary *keepAliveParams = @{@"cai-device-001": @{@"AppList": @[@"com.wechat", @"com.alipay"]}};
[androidInstance addKeepAliveListWithParams:keepAliveParams completion:^(CaiBatchTaskResponse *response, NSError *error) {
if (error) {
NSLog(@"添加后台保活应用失败: %@", error);
return;
}
if (response.code != 0) {
NSLog(@"整体操作失败: [%ld] %@", (long)response.code, response.message);
return;
}
NSLog(@"操作成功: %@", response.deviceResponses);
}];

批量移除后台保活应用

接口原型

- (void)removeKeepAliveListWithParams:(NSDictionary<NSString *, NSDictionary *> * _Nonnull)params
completion:(CaiBatchTaskCompletion _Nullable)completion;

输入参数

参数名称
必选
类型
描述
params
NSDictionary<NSString , NSDictionary *>
移除参数字典,结构为:
{
@"AppList": @[@"应用包名1", @"应用包名2"] // 应用包名数组 (NSArray<NSString*>)
}
completion
CaiBatchTaskCompletion
任务完成的回调。

调用示例

NSDictionary *removeParams = @{@"cai-device-001": @{@"AppList": @[@"com.wechat", @"com.alipay"]}};
[androidInstance removeKeepAliveListWithParams:removeParams completion:^(CaiBatchTaskResponse *response, NSError *error) {
if (error) {
NSLog(@"移除后台保活应用失败: %@", error);
return;
}
if (response.code != 0) {
NSLog(@"整体操作失败: [%ld] %@", (long)response.code, response.message);
return;
}
NSLog(@"操作成功: %@", response.deviceResponses);
}];

批量设置后台保活列表

接口原型

- (void)setKeepAliveListWithParams:(NSDictionary<NSString *, NSDictionary *> * _Nonnull)params
completion:(CaiBatchTaskCompletion _Nullable)completion;

输入参数

参数名称
必选
类型
描述
params
NSDictionary<NSString , NSDictionary *>
保活参数字典,结构为:
{
@"AppList": @[@"应用包名1", @"应用包名2"] // 应用包名数组 (NSArray<NSString*>)
}
completion
CaiBatchTaskCompletion
任务完成的回调。

调用示例

NSDictionary *keepAliveListParams = @{@"cai-device-001": @{@"AppList": @[@"com.wechat", @"com.alipay"]}};
[androidInstance setKeepAliveListWithParams:keepAliveListParams completion:^(CaiBatchTaskResponse *response, NSError *error) {
if (error) {
NSLog(@"设置后台保活列表失败: %@", error);
return;
}
if (response.code != 0) {
NSLog(@"整体操作失败: [%ld] %@", (long)response.code, response.message);
return;
}
NSLog(@"操作成功: %@", response.deviceResponses);
}];

批量查询后台保活列表

接口原型

- (void)describeKeepAliveListWithParams:(NSDictionary<NSString *, NSDictionary *> * _Nonnull)params
completion:(CaiDescribeKeepAliveListCompletion _Nullable)completion;

输入参数

参数名称
必选
类型
描述
params
NSDictionary<NSString , NSDictionary *>
设备参数字典,结构为@{}
completion
CaiDescribeKeepAliveListCompletion
任务完成的回调。

调用示例

NSDictionary *params = @{@"cai-device-001": @{}};
[androidInstance describeKeepAliveListWithParams:params completion:^(CaiDescribeKeepAliveListResponse *response, NSError *error) {
if (error) {
NSLog(@"查询失败: %@", error);
return;
}
if (response.code != 0) {
NSLog(@"整体操作失败: [%ld] %@", (long)response.code, response.message);
return;
}
NSLog(@"操作成功: %@", response.deviceResponses);
}];

批量清空后台保活列表

接口原型

- (void)clearKeepAliveListWithParams:(NSDictionary<NSString *, NSDictionary *> * _Nonnull)params
completion:(CaiBatchTaskCompletion _Nullable)completion;

输入参数

参数名称
必选
类型
描述
params
NSDictionary<NSString , NSDictionary *>
设备参数字典,结构为@{}
completion
CaiBatchTaskCompletion
任务完成的回调。

调用示例

NSDictionary *params = @{@"cai-device-001": @{}};
[androidInstance clearKeepAliveListWithParams: params completion:^(CaiBatchTaskResponse *response, NSError *error) {
if (error) {
NSLog(@"清空失败: %@", error);
return;
}
if (response.code != 0) {
NSLog(@"整体操作失败: [%ld] %@", (long)response.code, response.message);
return;
}
NSLog(@"操作成功: %@", response.deviceResponses);
}];

批量设置设备静音

接口原型

- (void)muteWithParams:(NSDictionary<NSString *, NSDictionary *> * _Nonnull)params
completion:(CaiBatchTaskCompletion _Nullable)completion;

输入参数

参数名称
必选
类型
描述
params
NSDictionary<NSString , NSDictionary *>
静音参数字典,结构为:
{
@"Mute": @(YES/NO) // 静音状态 (BOOL,YES:静音, NO:取消静音)
},
completion
CaiBatchTaskCompletion
任务完成的回调。

调用示例

NSDictionary *muteParams = @{@"cai-device-001": @{@"Mute": @YES}};
[androidInstance muteWithParams:muteParams completion:^(CaiBatchTaskResponse *response, NSError *error) {
if (error) {
NSLog(@"设置静音失败: %@", error);
return;
}
if (response.code != 0) {
NSLog(@"整体操作失败: [%ld] %@", (long)response.code, response.message);
return;
}
NSLog(@"操作成功: %@", response.deviceResponses);
}];

批量搜索媒体库文件

接口原型

- (void)mediaSearchWithParams:(NSDictionary<NSString *, NSDictionary *> * _Nonnull)params
completion:(CaiMediaSearchCompletion _Nullable)completion;

输入参数

参数名称
必选
类型
描述
params
NSDictionary<NSString , NSDictionary *>
搜索参数字典,结构为:
{
@"Keyword": @"搜索关键词" // 搜索关键词 (NSString)
}
completion
CaiMediaSearchCompletion
任务完成的回调。

调用示例

NSDictionary *searchParams = @{@"cai-device-001": @{@"Keyword": @"搜索关键词"}};
[androidInstance mediaSearchWithParams:searchParams completion:^(CaiMediaSearchResponse *response, NSError *error) {
if (error) {
NSLog(@"搜索失败: %@", error);
return;
}
if (response.code != 0) {
NSLog(@"整体操作失败: [%ld] %@", (long)response.code, response.message);
return;
}
NSLog(@"操作成功: %@", response.deviceResponses);
}];

批量重启设备

接口原型

- (void)rebootWithParams:(NSDictionary<NSString *, NSDictionary *> * _Nonnull)params
completion:(CaiBatchTaskCompletion _Nullable)completion;

输入参数

参数名称
必选
类型
描述
params
NSDictionary<NSString , NSDictionary *>
设备参数字典,结构为@{}
completion
CaiBatchTaskCompletion
任务完成的回调。

调用示例

NSDictionary *rebootParams = @{@"cai-device-001": @{}};
[androidInstance rebootWithParams:rebootParams completion:^(CaiBatchTaskResponse *response, NSError *error) {
if (error) {
NSLog(@"重启失败: %@", error);
return;
}
if (response.code != 0) {
NSLog(@"整体操作失败: [%ld] %@", (long)response.code, response.message);
return;
}
NSLog(@"操作成功: %@", response.deviceResponses);
}];

批量查询所有应用列表

接口原型

- (void)listAllAppsWithParams:(NSDictionary<NSString *, NSDictionary *> * _Nonnull)params
completion:(CaiListAllAppsCompletion _Nullable)completion;

输入参数

参数名称
必选
类型
描述
params
NSDictionary<NSString , NSDictionary *>
设备参数字典,结构为@{}
completion
CaiListAllAppsCompletion
任务完成的回调。

调用示例

NSDictionary *params = @{@"cai-device-001": @{}};
[androidInstance listAllAppsWithParams:params completion:^(CaiListAllAppsResponse *response, NSError *error) {
if (error) {
NSLog(@"查询失败: %@", error);
return;
}
if (response.code != 0) {
NSLog(@"整体操作失败: [%ld] %@", (long)response.code, response.message);
return;
}
NSLog(@"操作成功: %@", response.deviceResponses);
}];

批量关闭应用到后台

接口原型

- (void)moveAppBackgroundWithParams:(NSDictionary<NSString *, NSDictionary *> * _Nonnull)params
completion:(CaiBatchTaskCompletion _Nullable)completion;

输入参数

参数名称
必选
类型
描述
params
NSDictionary<NSString , NSDictionary *>
设备参数字典,结构为@{}
completion
CaiBatchTaskCompletion
任务完成的回调。

调用示例

NSDictionary *params = @{@"cai-device-001": @{}};
[androidInstance moveAppBackgroundWithParams: params completion:^(CaiBatchTaskResponse *response, NSError *error) {
if (error) {
NSLog(@"移动应用到后台失败: %@", error);
return;
}
if (response.code != 0) {
NSLog(@"整体操作失败: [%ld] %@", (long)response.code, response.message);
return;
}
NSLog(@"操作成功: %@", response.deviceResponses);
}];

批量新增应用安装黑名单

接口原型

- (void)addAppInstallBlackListWithParams:(NSDictionary<NSString *, NSDictionary *> * _Nonnull)params
completion:(CaiBatchTaskCompletion _Nullable)completion;

输入参数

参数名称
必选
类型
描述
params
NSDictionary<NSString , NSDictionary *>
黑名单参数字典,结构为:
{
@"AppList": @[@"应用包名1", @"应用包名2"] // 应用包名数组
}
completion
CaiBatchTaskCompletion
任务完成的回调。

调用示例

NSDictionary *blacklistParams = @{@"cai-device-001": @{@"AppList": @[@"com.example.app"]}};
[androidInstance addAppInstallBlackListWithParams: blacklistParams completion:^(CaiBatchTaskResponse *response, NSError *error) {
if (error) {
NSLog(@"新增应用安装黑名单失败: %@", error);
return;
}
if (response.code != 0) {
NSLog(@"整体操作失败: [%ld] %@", (long)response.code, response.message);
return;
}
NSLog(@"操作成功: %@", response.deviceResponses);
}];

批量移除应用安装黑名单

接口原型

- (void)removeAppInstallBlackListWithParams:(NSDictionary<NSString *, NSDictionary *> * _Nonnull)params
completion:(CaiBatchTaskCompletion _Nullable)completion;

输入参数

参数名称
必选
类型
描述
params
NSDictionary<NSString , NSDictionary *>
黑名单参数字典,结构为:
{
@"AppList": @[@"应用包名1", @"应用包名2"] // 应用包名数组
}
completion
CaiBatchTaskCompletion
任务完成的回调。

调用示例

NSDictionary *blacklistParams = @{@"cai-device-001": @{@"AppList": @[@"com.example.app"]}};
[androidInstance removeAppInstallBlackListWithParams: blacklistParams completion:^(CaiBatchTaskResponse *response, NSError *error) {
if (error) {
NSLog(@"移除应用安装黑名单失败: %@", error);
return;
}
if (response.code != 0) {
NSLog(@"整体操作失败: [%ld] %@", (long)response.code, response.message);
return;
}
NSLog(@"操作成功: %@", response.deviceResponses);
}];

批量覆盖应用安装黑名单

接口原型

- (void)setAppInstallBlackListWithParams:(NSDictionary<NSString *, NSDictionary *> * _Nonnull)params
completion:(CaiBatchTaskCompletion _Nullable)completion;

输入参数

参数名称
必选
类型
描述
params
NSDictionary<NSString , NSDictionary *>
黑名单参数字典,结构为:
{
@"AppList": @[@"应用包名1", @"应用包名2"] // 应用包名数组
}
completion
CaiBatchTaskCompletion
任务完成的回调。

调用示例

NSDictionary *blacklistParams = @{@"cai-device-001": @{@"AppList": @[@"com.example.app"]}};
[androidInstance setAppInstallBlackListWithParams: blacklistParams completion:^(CaiBatchTaskResponse *response, NSError *error) {
if (error) {
NSLog(@"覆盖应用安装黑名单失败: %@", error);
return;
}
if (response.code != 0) {
NSLog(@"整体操作失败: [%ld] %@", (long)response.code, response.message);
return;
}
NSLog(@"操作成功: %@", response.deviceResponses);
}];

批量查询应用安装黑名单

接口原型

- (void)describeAppInstallBlackListWithParams:(NSDictionary<NSString *, NSDictionary *> * _Nonnull)params
completion:(CaiDescribeAppInstallBlackListCompletion _Nullable)completion;

输入参数

参数名称
必选
类型
描述
params
NSDictionary<NSString , NSDictionary *>
设备参数字典,结构为@{}
completion
CaiDescribeAppInstallBlackListCompletion
任务完成的回调

调用示例

NSDictionary *params = @{@"cai-device-001": @{}};
[androidInstance describeAppInstallBlackListWithParams: params completion:^(CaiDescribeAppInstallBlackListResponse *response, NSError *error) {
if (error) {
NSLog(@"查询应用安装黑名单失败: %@", error);
return;
}
if (response.code != 0) {
NSLog(@"整体操作失败: [%ld] %@", (long)response.code, response.message);
return;
}
NSLog(@"操作成功: %@", response.deviceResponses);
}];

批量清空应用安装黑名单

接口原型

- (void)clearAppInstallBlackListWithParams:(NSDictionary<NSString *, NSDictionary *> * _Nonnull)params
completion:(CaiBatchTaskCompletion _Nullable)completion;

输入参数

参数名称
必选
类型
描述
params
NSDictionary<NSString , NSDictionary *>
设备参数字典,结构为@{}
completion
CaiBatchTaskCompletion
任务完成的回调。

调用示例

NSDictionary *params = @{@"cai-device-001": @{}};
[androidInstance clearAppInstallBlackListWithParams: params completion:^(CaiBatchTaskResponse *response, NSError *error) {
if (error) {
NSLog(@"清空应用安装黑名单失败: %@", error);
return;
}
if (response.code != 0) {
NSLog(@"整体操作失败: [%ld] %@", (long)response.code, response.message);
return;
}
NSLog(@"操作成功: %@", response.deviceResponses);
}];

批量获取导航栏可见状态

接口原型

- (void)getNavVisibleStatusWithParams:(NSDictionary<NSString *, NSDictionary *> * _Nonnull)params
completion:(CaiGetNavVisibleStatusCompletion _Nullable)completion;

输入参数

参数名称
必选
类型
描述
params
NSDictionary<NSString , NSDictionary *>
设备参数字典,结构为@{}
completion
CaiGetNavVisibleStatusCompletion
任务完成的回调。

调用示例

NSDictionary *params = @{@"cai-device-001": @{}};
[androidInstance getNavVisibleStatusWithParams: params completion:^(CaiGetNavVisibleStatusResponse *response, NSError *error) {
if (error) {
NSLog(@"获取导航栏可见状态失败: %@", error);
return;
}
if (response.code != 0) {
NSLog(@"整体操作失败: [%ld] %@", (long)response.code, response.message);
return;
}
NSLog(@"操作成功: %@", response.deviceResponses);
}];

获取系统媒体音量

接口原型

- (void)getSystemMusicVolumeWithParams:(NSDictionary<NSString *, NSDictionary *> * _Nonnull)params
completion:(CaiGetSystemMusicVolumeCompletion _Nullable)completion;

输入参数

参数名称
必选
类型
描述
params
NSDictionary<NSString , NSDictionary *>
设备参数字典,结构为@{}
completion
CaiGetSystemMusicVolumeCompletion
任务完成的回调。

调用示例

NSDictionary *params = @{@"cai-device-001": @{}};
[androidInstance getSystemMusicVolumeWithParams: params completion:^(CaiGetSystemMusicVolumeResponse *response, NSError *error) {
if (error) {
NSLog(@"获取系统媒体音量失败: %@", error);
return;
}
if (response.code != 0) {
NSLog(@"整体操作失败: [%ld] %@", (long)response.code, response.message);
return;
}
NSLog(@"操作成功: %@", response.deviceResponses);
}];

会话事件回调

用于监听 TcrSession 内部事件。

接口原型

- (void)onEvent:(TcrEvent)event eventData:(id _Nullable)eventData;

输入参数

参数名称
必选
类型
描述
event
TcrEvent
事件类型。
eventData
id
事件数据。

调用示例

id<TcrSessionObserver> observer = ^(TcrEvent event, id eventData) {
switch (event) {
case STATE_CONNECTED:
NSLog(@"会话已连接");
break;
case STATE_RECONNECTING:
NSLog(@"会话重连中");
break;
case STATE_CLOSED:
NSLog(@"会话关闭");
break;
case CLIENT_STATS:
info = (NSDictionary *)eventData;
NSLog(@"SDK性能数据:%@", info);
break;

// 其他事件处理...
default:
break;
}
};
TcrSession *session = [[TcrSession alloc] initWithParams:nil andDelegate:observer];

会话初始化

接口原型

- (instancetype _Nonnull)initWithParams:(NSDictionary *_Nullable)params andDelegate:(id<TcrSessionObserver> _Nonnull)Observer;

输入参数

参数名称
必选
类型
描述
params
NSDictionary*
会话参数。
Observer
id<TcrSessionObserver>
会话观察者。
参数字典选择如下:
"preferredCodec":可选值为 "H264", "H265", "VP8", 和 "VP9"。用于设置首选的编解码器。如果设置了此字段,会尝试使用首选编解码器进行通信。如果首选编解码器不可用,将使用其他可用的编解码器。如果未设置此字段或设置无效,将使用默认编解码器。
"preferredCodecList":值为 NSArray,包含可选值 "H264", "H265", "VP8", 和 "VP9"。表示优先选择的编解码器列表,列表中元素的顺序表示优先级,例如索引0为最高优先级的编解码器。如果无法选择设置的编解码器,则会选择其他可用的编解码器。
"idleThreshold":空闲检测阈值,即用户无活动的时间。单位为毫秒。当达到此阈值时,将触发事件 TcrEvent.CLIENT_IDLE
"local_video":可选值为布尔类型。用于启用本地摄像头。
"local_audio":可选值为布尔类型。用于启用本地麦克风。
"enableCustomAudioCapture":@{@"sampleRate": NSInteger, @"useStereoInput": BOOL},启用自定义音频捕获并设置自定义捕获音频的采样率和通道数(两个参数都是必需的)。例如,@"enableCustomAudioCapture":@{@"sampleRate":@(48000), @"useStereoInput":@(false)} 表示采样率为48000的单声道数据。此外,要启用自定义音频捕获,还需要将 "local_audio" 设置为启用本地音频上行。

返回值

类型
描述
TcrSession*
返回初始化后的会话实例。

调用示例

NSDictionary *params = @{@"idleThreshold": @(6000)};
id<TcrSessionObserver> observer = ^(TcrEvent event, id eventData) {
// 处理会话事件
};
TcrSession *session = [[TcrSession alloc] initWithParams: params andDelegate: observer];

设置会话观察者

用于监听 TcrSession 内部事件。

接口原型

- (void)setTcrSessionObserver:(id<TcrSessionObserver> _Nonnull)Observer;

输入参数

参数名称
必选
类型
描述
Observer
id<TcrSessionObserver>
会话观察者。

返回值

调用示例

id<TcrSessionObserver> observer = ^(TcrEvent event, id eventData) {
// 处理会话事件
};
[session setTcrSessionObserver:observer];

连接实例

接口原型

- (void)accessWithInstanceId:(NSString *_Nonnull)instanceId;

输入参数

参数名称
必选
类型
描述
instanceId
NSString*
云实例 ID。

返回值

调用示例

[session accessWithInstanceId:@"cai-device-001"];

释放会话

接口原型

- (void)releaseSession;

输入参数

返回值

调用示例

[session releaseSession];

获取请求 ID

接口原型

- (NSString*_Nonnull)getRequestId;

返回值

类型
描述
NSString*
当前会话的请求 ID。

调用示例

NSString *requestId = [session getRequestId];
NSLog(@"当前会话的请求ID: %@", requestId);

设置渲染视图

设置本次会话的渲染视图,SDK 会将流内容渲染到该视图上。

接口原型

- (void)setRenderView:(TcrRenderView *_Nullable)renderView;

输入参数

参数名称
必选
类型
描述
renderView
TcrRenderView*
渲染视图。

返回值

调用示例

TcrRenderView *renderView = [[TcrRenderView alloc] initWithFrame:self.view.frame] // 实例化TcrRenderView对象
[session setRenderView:renderView];

设置视频接收器

为本次会话设置一个视频接收器。设置完成后,SDK 会将解码后的视频帧数据回调到该视频接收器。

接口原型

- (void)setVideoSink:(id<VideoSink> _Nullable)videoSink;

输入参数

参数名称
必选
类型
描述
videoSink
id<VideoSink>
视频接收器。

返回值

调用示例

id<VideoSink> videoSink = ...; // 实现VideoSink协议的对象
[session setVideoSink:videoSink];

设置音频接收器

为本次会话设置一个音频接收器。设置完成后,SDK 会将音频数据回调到该音频接收器。

接口原型

- (void)setAudioSink:(id<AudioSink> _Nullable)audioSink;

输入参数

参数名称
必选
类型
描述
audioSink
id<AudioSink>
音频接收器。

返回值

调用示例

id<AudioSink> audioSink = ...; // 实现AudioSink协议的对象
[session setAudioSink:audioSink];

启用音频播放

接口原型

- (void)setEnableAudioPlaying:(BOOL)enable;

输入参数

参数名称
必选
类型
描述
enable
BOOL
是否启用音频播放。

返回值

调用示例

[session setEnableAudioPlaying:YES]; // 启用音频播放

启用本地音频

启用或禁用从麦克风捕获的本地音轨。启用后,本地捕获的音频会上行至云端。

接口原型

- (void)setEnableLocalAudio:(BOOL)enable;

输入参数

参数名称
必选
类型
描述
enable
BOOL
是否启用本地音频。

返回值

调用示例

[session setEnableLocalAudio:YES]; // 启用本地音频

启用本地视频

启用或禁用从摄像头捕获的本地视频。启用后,本地捕获的视频画面会上行至云端。

接口原型

- (void)setEnableLocalVideo:(BOOL)enable;

输入参数

参数名称
必选
类型
描述
enable
BOOL
是否启用本地视频。

返回值

调用示例

[session setEnableLocalVideo:YES]; // 启用本地视频

暂停音视频流

接口原型

- (void)pauseStreaming;

调用示例

[session pauseStreaming];

恢复音视频流

接口原型

- (void)resumeStreaming;

调用示例

[session resumeStreaming];

设置上行视频配置

接口原型

- (void)setLocalVideoProfile:(int)width height:(int)height fps:(int)fps minBitrate:(int)minBitrate maxBitrate:(int)maxBitrate isFrontCamera:(BOOL)isFrontCamera;

输入参数

参数名称
必选
类型
描述
width
int
视频宽度。
height
int
视频高度。
fps
int
帧率。
minBitrate
int
最小比特率。
maxBitrate
int
最大比特率。
isFrontCamera
BOOL
是否为前置摄像头。

返回值

调用示例

[session setLocalVideoProfile:1280 height:720 fps:30 minBitrate:1000 maxBitrate:15000 isFrontCamera:NO];

设置云端音频配置

接口原型

- (void)setRemoteAudioProfile:(float)volume;

输入参数

参数名称
必选
类型
描述
volume
float
云端音频音量。

返回值

调用示例

[session setRemoteAudioProfile:5.0]; // 设置远程音频流的音量为5.0

向云应用粘贴文本

接口原型

- (void)pasteText:(NSString *_Nonnull)text;

输入参数

参数名称
必选
类型
描述
text
NSString*
要粘贴的文本内容。

返回值

调用示例

[session pasteText:@"Hello, Cloud!"];

向云设备输入文本

此方法仅在客户端切换到本地输入法模式时可用。它会将文本直接发送到云端设备的输入框,并且不会更改本地剪贴板的内容。

接口原型

- (void)inputText:(NSString *_Nonnull)text mode:(BOOL)append;

输入参数

参数名称
必选
类型
描述
text
NSString*
要输入的文本内容。
append
BOOL
写入模式控制,是否追加写入。

返回值

调用示例

[session inputText:@"Hello" mode:YES]; // 追加模式(默认)
[session inputText:@"New Text" mode:NO]; // 覆盖模式

禁用云端输入

当云输入被禁用时,云应用程序的软键盘将不会出现。

接口原型

- (void)setDisableCloudInput:(BOOL)disableCloudInput;

输入参数

参数名称
必选
类型
描述
disableCloudInput
BOOL
是否禁用云端输入。

返回值

调用示例

[session setDisableCloudInput:YES]; // 禁用云输入

发送自定义音频数据

此方法仅在启用自定义音频捕获时有效。

接口原型

- (BOOL)sendCustomAudioData:(NSData *_Nonnull)audioData captureTimeNs:(uint64_t)captureTimeNs;

输入参数

参数名称
必选
类型
描述
audioData
NSData*
要发送的 PCM 音频数据。
captureTimeNs
uint64_t
音频捕获时间(纳秒)。

返回值

类型
描述
BOOL
是否成功发送自定义音频数据。

调用示例

NSData *audioData = ...; // 获取音频数据
uint64_t captureTimeNs = ...; // 音频捕获时间
BOOL result = [session sendCustomAudioData:audioData captureTimeNs:captureTimeNs];
if (result) {
NSLog(@"成功发送自定义音频数据");
} else {
NSLog(@"发送自定义音频数据失败");
}

获取键盘接口

接口原型

- (id<Keyboard> _Nonnull)getKeyboard;

返回值

类型
描述
id<Keyboard>
云键盘接口。

调用示例

id<Keyboard> keyboard = [session getKeyboard];
[keyboard onKeyboard:65 down:YES]; // 模拟按下键盘的A键
[keyboard onKeyboard:65 down:NO]; // 模拟松开键盘的A键

获取鼠标接口

接口原型

- (id<Mouse> _Nonnull)getMouse;

返回值

类型
描述
id<Mouse>
云鼠标接口。

调用示例

id<Mouse> mouse = [session getMouse];
[mouse onMouseKey:LEFT isDown:YES]; // 模拟按下鼠标左键
[mouse onMouseKey:LEFT isDown:NO]; // 模拟松开鼠标左键

获取游戏手柄接口

接口原型

- (id<Gamepad> _Nonnull)getGamepad;

返回值

类型
描述
id<Gamepad>
云游戏手柄接口。

调用示例

id<Gamepad> gamepad = [session getGamepad];
[gamepad onGamepadKey:4096 down:YES]; // 模拟按下游戏手柄的A键
[gamepad onGamepadKey:4096 down:NO]; // 模拟松开游戏手柄的A键

获取触摸屏接口

接口原型

- (id<TouchScreen> _Nonnull)getTouchScreen;

返回值

类型
描述
id<TouchScreen>
云触摸屏接口。

调用示例

id<TouchScreen> touchscreen = [session getTouchScreen];
[touchscreen touchWithX:@(100) y:@(200) eventType:0 fingerID:1 width:1920 height:1080 timestamp:1669253200];

获取运动传感器接口

接口原型

- (id<MotionSensor> _Nonnull)getMotionSensor;

返回值

类型
描述
id<MotionSensor>
云运动传感器接口。

调用示例

id<MotionSensor> motionSensor = [session getMotionSensor];
[motionSensor onSensorData:ACCELEROMETER x:0.0 y:0.0 z:0.0];

发送按键消息

接口原型

- (void)sendKeycodeMessage:(NSDictionary *_Nonnull)msg;

输入参数

参数名称
必选
类型
描述
msg
NSDictionary*
要发送的按键消息。

返回值

调用示例

NSDictionary *msg = @{@"keycode": @(65), @"down": @YES}; // 模拟按下键盘的A键
[session sendKeycodeMessage:msg];

设置音频会话代理

接口原型

+ (void)setAudioSessionDelegate:(id<TCRAudioSessionDelegate>_Nonnull)delegate;

输入参数

参数名称
必选
类型
描述
delegate
id<TCRAudioSessionDelegate>
音频会话代理。

返回值

调用示例

[session setAudioSessionDelegate:delegate];

触发云触屏触摸事件

接口原型

- (void)touchWithX:(NSNumber *)x
y:(NSNumber *)y
eventType:(int)eventType
fingerID:(int)fingerID
width:(int)width
height:(int)height
timestamp:(long)timestamp;

输入参数

参数名称
必选
类型
描述
x
NSNumber*
触摸点在视频流坐标系中的 X 坐标值。
y
NSNumber*
触摸点在视频流坐标系中的 Y 坐标值。
eventType
int
事件类型,0为按下,1为移动,2为抬起。
fingerID
int
与特定指针数据索引关联的指针标识符。
width
int
视频流的宽度。
height
int
视频流的高度。
timestamp
long
事件发生的时间戳。

调用示例

[myTouchScreen touchWithX:@(100) y:@(200) eventType:0 fingerID:1 width:1920 height:1080 timestamp:1669253200];

传感器数据变化事件

接口原型

- (void)onSensorData:(SensorType)key x:(double)x y:(double)y z:(double)z;

输入参数

参数名称
必选
类型
描述
key
SensorType
传感器类型。
x
double
X 轴坐标值。
y
double
Y 轴坐标值。
z
double
Z 轴坐标值。

调用示例

[myMotionSensor onSensorData:ACCELEROMETER x:0.0 y:0.0 z:0.0];

位置变化事件

接口原型

- (void)onLocationChanged:(double)longitude latitude:(double)latitude;

输入参数

参数名称
必选
类型
描述
longitude
double
经度值。
latitude
double
纬度值。

调用示例

[myMotionSensor onLocationChanged:116.39153 latitude:39.90742];

模拟传感器事件

接口原型

- (void)onSimulateSensorEvent:(SensorType)type;

输入参数

参数名称
必选
类型
描述
type
SensorType
事件类型。

调用示例

[myMotionSensor onSimulateSensorEvent:GYRO];

云鼠标点击事件

接口原型

- (void)onMouseKey:(TCRMouseKeyType)key isDown:(BOOL)down;

输入参数

参数名称
必选
类型
描述
key
TCRMouseKeyType
鼠标按键类型。
down
BOOL
是否按下。

调用示例

[myMouse onMouseKey:LEFT isDown:YES];

云鼠标滚轮滚动事件

接口原型

- (void)onMouseScroll:(float)delta;

输入参数

参数名称
必选
类型
描述
delta
float
滚轮滚动的偏移量。

调用示例

[myMouse onMouseScroll:-1.0];

云鼠标相对移动事件

接口原型

- (void)onMouseDeltaMove:(int)deltaX deltaY:(int)deltaY;

输入参数

参数名称
必选
类型
描述
deltaX
int
水平轴的偏移量。
deltaY
int
垂直轴的偏移量。

调用示例

[myMouse onMouseDeltaMove:10 deltaY:-5];

云鼠标移动事件

接口原型

- (void)onMouseMoveTo:(int)x y:(int)y;

输入参数

参数名称
必选
类型
描述
x
int
远程设备上的 X 坐标。
y
int
远程设备上的 Y 坐标。

调用示例

[myMouse onMouseMoveTo:100 y:200];

云键盘按键事件

接口原型

- (void)onKeyboard:(NSInteger)keycode down:(BOOL)down;

输入参数

参数名称
必选
类型
描述
keycode
NSInteger
键码。
down
BOOL
是否按下。

调用示例

[myKeyboard onKeyboard:65 down:YES]; // A键按下

区分左右键的云键盘按键事件

接口原型

- (void)onKeyboard:(NSInteger)keycode down:(BOOL)down isLeft:(BOOL)isLeft;

输入参数

参数名称
必选
类型
描述
keycode
NSInteger
键码。
down
BOOL
是否按下。
isLeft
BOOL
是否为左键。

调用示例

[myKeyboard onKeyboard:16 down:YES isLeft:YES]; // 左侧shift键按下
[myKeyboard onKeyboard:16 down:NO isLeft:YES]; // 左侧shift键抬起

查询云虚拟键盘的大小写锁定状态

接口原型

- (void)checkKeyboardCapsLock:(void (^)(int retCode))finishBlk;

输入参数

参数名称
必选
类型
描述
finishBlk
void (^)(int retCode)
回调块,用于返回大小写锁定状态。

调用示例

[myKeyboard checkKeyboardCapsLock:^(int retCode) {
NSLog(@"Caps Lock status: %d", retCode);
}];

重置云虚拟键盘的大小写锁定状态

接口原型

- (void)resetKeyboardCapsLock;

调用示例

[myKeyboard resetKeyboardCapsLock];

重置云键盘按键状态

接口原型

- (void)resetKeyboard;

调用示例

[myKeyboard resetKeyboard];

连接虚拟游戏手柄

接口原型

- (void)connectGamepad;

调用示例

[myGamepad connectGamepad];

断开虚拟游戏手柄

接口原型

- (void)disconnectGamepad;

调用示例

[myGamepad disconnectGamepad];

云游戏手柄按键事件

接口原型

- (void)onGamepadKey:(NSInteger)keycode down:(BOOL)down;

输入参数

参数名称
必选
类型
描述
keycode
NSInteger
键码。
down
BOOL
是否按下。

调用示例

[myGamepad onGamepadKey:0x41 down:YES]; // A键按下

云游戏手柄摇杆事件

接口原型

- (void)onGamepadStick:(KeyType)type x:(NSInteger)x y:(NSInteger)y;

输入参数

参数名称
必选
类型
描述
type
KeyType
摇杆类型。
x
NSInteger
摇杆 X 坐标。
y
NSInteger
摇杆 Y 坐标。

调用示例

[myGamepad onGamepadStick:LS x:10 y:-20]; // 左摇杆向左下移动

云游戏手柄触发器事件

接口原型

- (void)onGamepadTrigger:(KeyType)type value:(NSInteger)value down:(BOOL)down;

输入参数

参数名称
必选
类型
描述
type
KeyType
触发器类型。
value
NSInteger
触发器的绝对位置。
down
BOOL
是否按下。

调用示例

[myGamepad onGamepadTrigger:LT value:128 down:YES]; // LT触发器半压

音频会话代理

接口原型

- (BOOL)onSetCategory:(NSString *_Nonnull)category withOptions:(AVAudioSessionCategoryOptions)options error:(NSError *_Nullable *_Nullable)outError;
- (BOOL)onSetMode:(NSString *_Nonnull)mode error:(NSError *_Nullable *_Nullable)outError;
- (BOOL)onSetActive:(BOOL)active error:(NSError *_Nullable *_Nullable)outError;

输入参数

参数名称
必选
类型
描述
category
NSString*
音频会话类别。
mode
NSString*
音频会话模式。
active
BOOL
音频会话活动状态。
outError
NSError**
输出错误信息。

返回值

类型
描述
BOOL
是否成功设置。

调用示例

[TCRSession setAudioSessionDelegate:delegate];

解码后的视频帧数据回调

接口原型

- (void)onRenderVideoFrame:(TCRVideoFrame *)frame;

输入参数

参数名称
必选
类型
描述
frame
TCRVideoFrame*
视频帧对象。

调用示例

- (void)onRenderVideoFrame:(TCRVideoFrame *)frame {
// 在这里处理解码后的视频帧数据
NSLog(@"Rendering video frame with dimensions %dx%d", frame.width, frame.height);
}

音频数据回调

接口原型

- (void)onAudioData:(TCRAudioFrame *)data;

输入参数

参数名称
必选
类型
描述
data
TCRAudioFrame*
音频帧对象。

调用示例

- (void)onAudioData:(TCRAudioFrame *)data {
// 在这里处理音频数据
NSLog(@"Received audio data with %d samples, %d channels, and %d bits per sample", data.frames, data.channels, data.bitsPerSample);
}

数据结构概览

数据结构
描述
表示视频帧的数据结构。
表示音频帧的数据结构。
表示单个设备操作的响应结果。
表示批量操作的响应结果。
包含设备的品牌和型号信息。
表示设备的地理位置。
表示设备的语言设置。
表示设备的地区设置。
表示设备的网络代理配置。
表示设备的 SIM 卡状态和识别信息。
表示设备自定义属性。
单台设备的属性查询结果。
CaiApp
表示设备的应用程序信息。
单台设备的第三方应用查询结果。
单台设备的所有应用程序查询结果。
单台设备的前台保持状态。
单台设备的摄像头媒体播放状态。
单台设备的后台保活应用列表。
单台设备的媒体搜索结果。
单台设备的应用安装黑名单。
单台设备的导航栏显示状态。
单台设备的系统媒体音量大小。
表示上传文件的数据结构。
表示上传媒体文件的数据结构。
多台设备的属性查询结果。
多台设备的第三方应用查询结果。
多台设备的摄像头媒体播放状态。
多台设备的前台保持状态。
多台设备的后台保活应用列表。
多台设备的所有应用程序查询结果。
多台设备的应用安装黑名单。
多台设备的导航栏显示状态。
多台设备的系统媒体音量大小。
批量任务基础回调类型。
上传文件回调类型。
上传媒体文件回调类型。
属性查询回调类型。
用户应用查询回调类型。
摄像头媒体状态回调类型。
应用前台状态回调类型。
保活列表查询回调类型。
媒体搜索回调类型。
所有应用查询回调类型。
应用黑名单查询回调类型。
获取当前系统导航栏显示状态回调类型。
获取当前系统媒体音量大小回调类型。

视频帧数据结构

TCRVideoFrame
@interface TCRVideoFrame : NSObject
@property (nonatomic, assign) int width;
@property (nonatomic, assign) int height;
@property (nonatomic, assign) int rotation;
@property (nonatomic, assign) int64_t timeStampNs;
@property (nonatomic, assign) CVPixelBufferRef pixelBuffer;
@end
变量
变量名称
类型
描述
width
int
视频帧的宽度。
height
int
视频帧的高度。
rotation
int
视频帧的旋转角度。
timeStampNs
int64_t
视频帧的时间戳,单位为纳秒。
pixelBuffer
CVPixelBufferRef
视频帧的像素缓冲区。

音频帧数据结构

TCRAudioFrame
@interface TCRAudioFrame : NSObject
@property (nonatomic, copy) NSData *data;
@property (nonatomic, assign) int bitsPerSample;
@property (nonatomic, assign) int sampleRate;
@property (nonatomic, assign) int channels;
@property (nonatomic, assign) int frames;
@end
变量
变量名称
类型
描述
data
NSData *
音频帧的数据。
bitsPerSample
int
每个音频样本的位数。
sampleRate
int
音频的采样率。
channels
int
音频数据中的通道数量。
frames
int
音频数据中的样本帧数。

单设备操作响应结果

CaiDeviceResponse
@interface CaiDeviceResponse : NSObject
@property (nonatomic, assign) NSInteger code;
@property (nonatomic, copy, nullable) NSString *msg;
@end
变量
变量名称
类型
描述
code
NSInteger
单个设备操作状态码。
msg
NSString *
单个设备状态消息。

批量操作响应结果

CaiBatchTaskResponse
@interface CaiBatchTaskResponse<__covariant DeviceResponseType: CaiDeviceResponse *> : NSObject
@property (nonatomic, assign) NSInteger code;
@property (nonatomic, copy, nullable) NSString *message;
@property (nonatomic, strong, nullable) NSDictionary<NSString *, DeviceResponseType> *deviceResponses;
@end
变量
变量名称
类型
描述
code
NSInteger
整体操作状态码。
message
NSString *
整体状态消息。
deviceResponses
NSDictionary<NSString *, DeviceResponseType> *
各设备响应字典。

设备品牌和型号信息

CaiDeviceInfo
@interface CaiDeviceInfo : NSObject
@property (nonatomic, copy, nullable) NSString *brand;
@property (nonatomic, copy, nullable) NSString *model;
@end
变量
变量名称
类型
描述
brand
NSString *
设备品牌。
model
NSString *
设备型号。

设备地理位置

CaiGPSInfo
@interface CaiGPSInfo : NSObject
@property (nonatomic, assign) double longitude;
@property (nonatomic, assign) double latitude;
@end
变量
变量名称
类型
描述
longitude
double
经度值。
latitude
double
纬度值。

设备语言设置

CaiLanguageInfo
@interface CaiLanguageInfo : NSObject
@property (nonatomic, copy, nullable) NSString *language;
@property (nonatomic, copy, nullable) NSString *country;
@end
变量
变量名称
类型
描述
language
NSString *
语言代码。
country
NSString *
国家/地区代码。

设备地区设置

CaiLocaleInfo
@interface CaiLocaleInfo : NSObject
@property (nonatomic, copy, nullable) NSString *timezone;
@end
变量
变量名称
类型
描述
timezone
NSString *
时区设置。

设备网络代理配置

CaiProxyInfo
@interface CaiProxyInfo : NSObject
@property (nonatomic, assign) BOOL enabled;
@property (nonatomic, copy, nullable) NSString *protocol;
@property (nonatomic, copy, nullable) NSString *host;
@property (nonatomic, assign) NSInteger port;
@property (nonatomic, copy, nullable) NSString *user;
@property (nonatomic, copy, nullable) NSString *password;
@end
变量
变量名称
类型
描述
enabled
BOOL
是否启用代理。
protocol
NSString *
代理协议。
host
NSString *
代理服务器主机地址。
port
NSInteger
代理服务器端口。
user
NSString *
代理认证用户名。
password
NSString *
代理认证密码。

设备 SIM 卡状态和识别信息

CaiSIMInfo
@interface CaiSIMInfo : NSObject
@property (nonatomic, assign) NSInteger state;
@property (nonatomic, copy, nullable) NSString *phoneNumber;
@property (nonatomic, copy, nullable) NSString *IMSI;
@property (nonatomic, copy, nullable) NSString *ICCID;
@end
变量
变量名称
类型
描述
state
NSInteger
SIM 卡状态,0为未激活,1为已激活。
phoneNumber
NSString *
手机号码。
IMSI
NSString *
国际移动用户识别码。
ICCID
NSString *
集成电路卡识别码。

设备自定义属性

CaiExtraProperty
@interface CaiExtraProperty : NSObject
@property (nonatomic, copy, nullable) NSString *key;
@property (nonatomic, copy, nullable) NSString *value;
@end
变量
变量名称
类型
描述
key
NSString *
属性键名。
value
NSString *
属性值。

单台设备的属性查询结果

CaiInstancePropertiesResponseItem
@interface CaiInstancePropertiesResponseItem : CaiDeviceResponse
@property (nonatomic, copy, nullable) NSString *requestId;
@property (nonatomic, strong, nullable) CaiDeviceInfo *deviceInfo;
@property (nonatomic, strong, nullable) CaiGPSInfo *GPSInfo;
@property (nonatomic, strong, nullable) CaiLanguageInfo *languageInfo;
@property (nonatomic, strong, nullable) CaiLocaleInfo *localeInfo;
@property (nonatomic, strong, nullable) CaiProxyInfo *proxyInfo;
@property (nonatomic, strong, nullable) CaiSIMInfo *SIMInfo;
@end
变量
变量名称
类型
描述
requestId
NSString *
请求 ID。
deviceInfo
CaiDeviceInfo *
设备信息。
GPSInfo
CaiGPSInfo *
GPS 信息。
languageInfo
CaiLanguageInfo *
语言信息。
localeInfo
CaiLocaleInfo *
地区信息。
proxyInfo
CaiProxyInfo *
代理信息。
SIMInfo
CaiSIMInfo *
SIM 卡信息。

设备的应用程序信息

CaiApp
@interface CaiApp : NSObject
@property (nonatomic, assign) long long firstInstallTimeMs;
@property (nonatomic, copy, nullable) NSString *label;
@property (nonatomic, assign) long long lastUpdateTimeMs;
@property (nonatomic, copy, nullable) NSString *packageName;
@property (nonatomic, copy, nullable) NSString *versionName;
@end
变量
变量名称
类型
描述
firstInstallTimeMs
long long
首次安装时间,Unix 时间戳 (毫秒)。
label
NSString *
应用显示名称。
lastUpdateTimeMs
long long
最后更新时间,Unix 时间戳 (毫秒)。
packageName
NSString *
应用包名。
versionName
NSString *
应用版本名称。

单台设备的第三方应用查询结果

CaiListUserAppsResponseItem
@interface CaiListUserAppsResponseItem : CaiDeviceResponse
@property (nonatomic, strong, nullable) NSArray<CaiApp *> *appList;
@end
变量
变量名称
类型
描述
appList
NSArray<CaiApp *> *
应用列表,设备上安装的第三方应用程序列表。

单台设备的所有应用程序查询结果

CaiListAllAppsResponseItem
@interface CaiListAllAppsResponseItem : CaiDeviceResponse
@property (nonatomic, strong, nullable) NSArray<CaiApp *> *appList;
@end
变量
变量名称
类型
描述
appList
NSArray<CaiApp *> *
所有应用列表,包括系统应用和第三方应用。

单台设备的前台保持状态

CaiDescribeKeepFrontAppStatusResponseItem
@interface CaiDescribeKeepFrontAppStatusResponseItem : CaiDeviceResponse
@property (nonatomic, strong, nullable) NSString *packageName;
@property (nonatomic, assign) BOOL enable;
@property (nonatomic, assign) int restartIntervalSeconds;
@end
变量
变量名称
类型
描述
packageName
NSString *
应用包名。
enable
BOOL
应用前台保持。
restartIntervalSeconds
int
重启间隔时长。

单台设备的摄像头媒体播放状态

CaiDescribeCameraMediaPlayStatusResponseItem
@interface CaiDescribeCameraMediaPlayStatusResponseItem : CaiDeviceResponse
@property (nonatomic, copy, nullable) NSString *filePath;
@property (nonatomic, assign) NSInteger loops;
@end
变量
变量名称
类型
描述
filePath
NSString *
媒体文件路径。
loops
NSInteger
循环次数,负数表示无限循环。

单台设备的后台保活应用列表

CaiDescribeKeepAliveListResponseItem
@interface CaiDescribeKeepAliveListResponseItem : CaiDeviceResponse
@property (nonatomic, strong, nullable) NSArray<NSString *> *appList;
@end
变量
变量名称
类型
描述
appList
NSArray<NSString *> *
保活应用列表,应用包名的数组。

设备的媒体搜索项

CaiMediaItem
@interface CaiMediaItem : NSObject
@property (nonatomic, copy, nullable) NSString *fileName;
@property (nonatomic, copy, nullable) NSString *filePath;
@property (nonatomic, assign) long long fileBytes;
@property (nonatomic, assign) long long fileModifiedTime;
@end
变量
变量名称
类型
描述
fileName
NSString *
文件名,包含扩展名。
filePath
NSString *
完整文件路径。
fileBytes
long long
文件大小,以字节为单位。
fileModifiedTime
long long
文件修改时间,Unix 时间戳 (毫秒)。

单台设备的媒体搜索结果

CaiMediaSearchResponseItem
@interface CaiMediaSearchResponseItem : CaiDeviceResponse
@property (nonatomic, strong, nullable) NSArray<CaiMediaItem *> *mediaList;
@end
变量
变量名称
类型
描述
mediaList
NSArray<CaiMediaItem *> *
媒体文件列表。

批量媒体搜索响应结果

CaiMediaSearchResponse
@interface CaiMediaSearchResponse : CaiBatchTaskResponse<CaiMediaSearchResponseItem *>
@end
变量
CaiMediaSearchResponse 是一个批量任务响应基类,具体变量在父类 CaiBatchTaskResponse 中定义。

单台设备的应用安装黑名单

CaiDescribeAppInstallBlackListResponseItem
@interface CaiDescribeAppInstallBlackListResponseItem : CaiDeviceResponse
@property (nonatomic, strong, nullable) NSArray<NSString *> *appList;
@end
变量
变量名称
类型
描述
appList
NSArray<NSString *> *
黑名单应用列表,禁止安装的应用包名数组。

单台设备的导航栏显示状态

CaiGetNavVisibleStatusResponseItem
@interface CaiGetNavVisibleStatusResponseItem : CaiDeviceResponse
@property (nonatomic, assign) BOOL visible;
@end
变量
变量名称
类型
描述
visible
BOOL
导航栏是否显示。

单台设备的系统媒体音量大小

CaiGetSystemMusicVolumeResponseItem
@interface CaiGetSystemMusicVolumeResponseItem : CaiDeviceResponse
@property (nonatomic, assign) NSInteger volume;
@end
变量
变量名称
类型
描述
volume
NSInteger
当前系统媒体音量大小(0-100)。

上传文件的数据结构

CaiUploadFileItem
@interface CaiUploadFileItem : NSObject
@property (nonatomic, strong, nullable) NSData *fileData;
@property (nonatomic, copy, nullable) NSString *fileName;
@property (nonatomic, copy, nullable) NSString *filePath; // 可选路径
@end
变量
变量名称
类型
描述
fileData
NSData *
要上传的文件数据。
fileName
NSString *
文件名。
filePath
NSString *
可选的文件路径。

上传媒体文件的数据结构

CaiUploadMediaFileItem
@interface CaiUploadMediaFileItem : NSObject
@property (nonatomic, strong, nullable) NSData *fileData;
@property (nonatomic, copy, nullable) NSString *fileName;
@end
变量
变量名称
类型
描述
fileData
NSData *
要上传的媒体文件数据。
fileName
NSString *
媒体文件名。

批量属性查询响应

CaiDescribeInstancePropertiesResponse
@interface CaiDescribeInstancePropertiesResponse : CaiBatchTaskResponse<CaiInstancePropertiesResponseItem *>@end

批量用户应用查询响应

CaiListUserAppsResponse
@interface CaiListUserAppsResponse : CaiBatchTaskResponse<CaiListUserAppsResponseItem *>@end

批量摄像头媒体状态响应

CaiDescribeCameraMediaPlayStatusResponse
@interface CaiDescribeCameraMediaPlayStatusResponse : CaiBatchTaskResponse<CaiDescribeCameraMediaPlayStatusResponseItem *>@end

批量前台保持响应

CaiDescribeKeepFrontAppStatusResponse
@interface CaiDescribeKeepFrontAppStatusResponse : CaiBatchTaskResponse<CaiDescribeKeepFrontAppStatusResponseItem *>@end

批量保活列表响应

CaiDescribeKeepAliveListResponse
@interface CaiDescribeKeepAliveListResponse : CaiBatchTaskResponse<CaiDescribeKeepAliveListResponseItem *>@end

批量所有应用查询响应

CaiListAllAppsResponse
@interface CaiListAllAppsResponse : CaiBatchTaskResponse<CaiListAllAppsResponseItem *>@end

批量应用黑名单响应

CaiDescribeAppInstallBlackListResponse
@interface CaiDescribeAppInstallBlackListResponse : CaiBatchTaskResponse<CaiDescribeAppInstallBlackListResponseItem *>@end

导航栏显示状态响应

CaiGetNavVisibleStatusResponse
@interface CaiGetNavVisibleStatusResponse : CaiBatchTaskResponse<CaiGetNavVisibleStatusResponseItem *>@end

系统媒体音量响应

CaiGetSystemMusicVolumeResponse
@interface CaiGetSystemMusicVolumeResponse : CaiBatchTaskResponse<CaiGetSystemMusicVolumeResponseItem *>@end

上传文件响应

CaiUploadResponse
@interface CaiUploadResponse : NSObject
@property (nonatomic, assign) NSInteger code;
@property (nonatomic, copy, nullable) NSString *msg;
@property (nonatomic, strong, nullable) NSArray<NSDictionary *> *fileStatus;
@end
变量
变量名称
类型
描述
code
NSInteger
响应码。
msg
NSString *
响应消息。
fileStatus
NSArray<NSDictionary *> *
文件状态。

上传媒体文件响应

CaiUploadMediaFilesResponse
@interface CaiUploadMediaFilesResponse : NSObject
@property (nonatomic, assign) NSInteger code;
@property (nonatomic, copy, nullable) NSString *msg;
@end
变量
变量名称
类型
描述
code
NSInteger
响应码。
msg
NSString *
响应消息。

批量任务基础回调类型

CaiBatchTaskCompletion
typedef void (^CaiBatchTaskCompletion)(CaiBatchTaskResponse *_Nonnull response, NSError * _Nullable error);
变量
变量名称
类型
描述
response
CaiBatchTaskResponse *
批量任务响应结构。
error
NSError *
错误对象(系统级错误)。

上传文件回调类型

CaiUploadFilesCompletion
typedef void (^CaiUploadFilesCompletion)(CaiUploadResponse *_Nonnull response, NSError *_Nullable error);
变量
变量名称
类型
描述
response
CaiUploadResponse *
上传文件响应。
error
NSError *
错误对象(系统级错误)。

上传媒体文件回调类型

CaiUploadMediaFilesCompletion
typedef void (^CaiUploadMediaFilesCompletion)(CaiUploadMediaFilesResponse *_Nonnull response, NSError *_Nullable error);
变量
变量名称
类型
描述
response
CaiUploadMediaFilesResponse *
上传媒体文件响应。
error
NSError *
错误对象(系统级错误)。

属性查询回调类型

CaiDescribeInstancePropertiesCompletion
typedef void (^CaiDescribeInstancePropertiesCompletion)(CaiDescribeInstancePropertiesResponse *_Nonnull response, NSError *_Nullable error);
变量
变量名称
类型
描述
response
CaiDescribeInstancePropertiesResponse *
属性查询响应。
error
NSError *
错误对象(系统级错误)。

用户应用查询回调类型

CaiListUserAppsCompletion
typedef void (^CaiListUserAppsCompletion)(CaiListUserAppsResponse *_Nonnull response, NSError *_Nullable error);
变量
变量名称
类型
描述
response
CaiListUserAppsResponse *
用户应用查询响应。
error
NSError *
错误对象(系统级错误)。

摄像头媒体状态回调类型

CaiDescribeCameraMediaPlayStatusCompletion
typedef void (^CaiDescribeCameraMediaPlayStatusCompletion)(CaiDescribeCameraMediaPlayStatusResponse *_Nonnull response, NSError *_Nullable error);
变量
变量名称
类型
描述
response
CaiDescribeCameraMediaPlayStatusResponse *
摄像头媒体状态响应。
error
NSError *
错误对象(系统级错误)。

应用前台状态回调类型

CaiDescribeKeepFrontAppStatusCompletion
typedef void (^CaiDescribeKeepFrontAppStatusCompletion)(CaiDescribeKeepFrontAppStatusResponse *_Nonnull response, NSError *_Nullable error);
变量
变量名称
类型
描述
response
CaiDescribeKeepFrontAppStatusResponse *
应用前台状态响应。
error
NSError *
错误对象(系统级错误)。

保活列表查询回调类型

CaiDescribeKeepAliveListCompletion
typedef void (^CaiDescribeKeepAliveListCompletion)(CaiDescribeKeepAliveListResponse *_Nonnull response, NSError *_Nullable error);
变量
变量名称
类型
描述
response
CaiDescribeKeepAliveListResponse *
保活列表响应。
error
NSError *
错误对象(系统级错误)。

媒体搜索回调类型

CaiMediaSearchCompletion
typedef void (^CaiMediaSearchCompletion)(CaiMediaSearchResponse *_Nonnull response, NSError *_Nullable error);
变量
变量名称
类型
描述
response
CaiMediaSearchResponse *
媒体搜索响应。
error
NSError *
错误对象(系统级错误)。

所有应用查询回调类型

CaiListAllAppsCompletion
typedef void (^CaiListAllAppsCompletion)(CaiListAllAppsResponse *_Nonnull response, NSError *_Nullable error);
变量
变量名称
类型
描述
response
CaiListAllAppsResponse *
所有应用查询响应。
error
NSError *
错误对象(系统级错误)。

应用黑名单查询回调类型

CaiDescribeAppInstallBlackListCompletion
typedef void (^CaiDescribeAppInstallBlackListCompletion)(CaiDescribeAppInstallBlackListResponse *_Nonnull response, NSError *_Nullable error);
变量
变量名称
类型
描述
response
CaiDescribeAppInstallBlackListResponse *
应用黑名单响应。
error
NSError *
错误对象(系统级错误)。

当前系统导航栏显示状态回调类型

CaiGetNavVisibleStatusCompletion
typedef void (^CaiGetNavVisibleStatusCompletion)(CaiGetNavVisibleStatusResponse *_Nonnull response, NSError *_Nullable error);
变量
变量名称
类型
描述
response
CaiGetNavVisibleStatusResponse *
获取当前系统导航栏显示状态响应。
error
NSError *
错误对象(系统级错误)。

当前系统媒体音量大小回调类型

CaiGetSystemMusicVolumeCompletion
typedef void (^CaiGetSystemMusicVolumeCompletion)(CaiGetSystemMusicVolumeResponse *_Nonnull response, NSError *_Nullable error);
变量
变量名称
类型
描述
response
CaiGetSystemMusicVolumeResponse *
获取当前系统媒体音量大小响应。
error
NSError *
错误对象(系统级错误)