You need to enable JavaScript to run this app.
导航
云手机操控
最近更新时间:2024.10.29 19:42:44首次发布时间:2024.09.26 21:12:55
复制全文
我的收藏
有用
有用
无用
无用

阅读本文,您可以获取 Go SDK 云手机操控的接口调用示例,实现快速开发。

说明

本文的调用示例包含接口的部分参数。由于参数间可能存在互斥关系,在调用时,请您参考注释,进行调整。

调用说明

  • 本文提供的接口调用示例均通过 AK 和 SK 初始化实例。
  • 接口的参数说明和错误码等信息可通过接口文档查看。

前提条件

调用接口前,请先完成 Go SDK 的安装及初始化操作。

调用示例

本节为您介绍云手机操控相关接口的功能和调用示例。

截图 ScreenShot

您可以调用 ScreenShot 接口截图 ScreenShot。详细的参数说明可参见 ScreenShot 接口文档。

接口调用示例如下所示。

package main

import (
	"context"
	"fmt"
	"os"

	"github.com/volcengine/volc-sdk-golang/base"
	ACEP "github.com/volcengine/volc-sdk-golang/service/acep"
)

func BoolPtr(v bool) *bool {
	return &v
}

func Int32Ptr(v int32) *int32 {
	return &v
}

func main() {
	// 强烈建议不要把 VOLC_ACCESSKEY 和 VOLC_SECRETKEY 保存到工程代码里,否则可能导致 AccessKey 泄露,威胁您账号下所有资源的安全。
	// 本示例通过从环境变量中读取 VOLC_ACCESSKEY 和 VOLC_SECRETKEY,来实现 API 访问的身份验证。运行代码示例前,请配置环境变量 VOLC_ACCESSKEY 和 VOLC_SECRETKEY
	service := ACEP.NewInstance()

	service.SetCredential(base.Credentials{
		AccessKeyID:     os.Getenv("VOLC_ACCESSKEY"),
		SecretAccessKey: os.Getenv("VOLC_SECRETKEY"),
	})

	body := &ACEP.ScreenShotBody{
		// 实例 ID,可通过调用 ListPod 接口获取。
		PodID: `7299381659819xxxxxx`,
		// 实例所属业务 ID,可在「云手机控制台-业务管理-业务详情」中获取。
		ProductID: `1608456935646xxxxxx`,
		// 截图请求的唯一标识,防止由于网络等原因造成重复请求,同一 RoundId 在 5 分钟内只可使用一次。
		RoundID: `01`,
		// 是否保存截图文件在云手机实例:
		// <li> true:上传截图文件到火山引擎对象存储,并保存截图文件在云手机实例中。 </li>
		// <li> false:默认值,上传截图文件到火山引擎对象存储,上传完成后,删除保存在云手机实例中的文件。 </li>
		//
		// 截图文件保存和清理逻辑如下:
		// <li> 当保存截图文件在云手机实例时,截图超过 1000 张时会清理之前保存的截图文件; </li>
		// <li> 当上传截图文件到火山引擎对象存储时,截图上传到对象存储成功后再清理云手机实例中的截图文件; </li>
		// <li> 当云手机存储空间小于 600MB 时: </li>
		// <li> 若设置该参数为 true,则不可执行截图操作; </li>
		// <li> 若设置该参数为 false,可执行截图操作。 </li>
		IsSavedOnPod: BoolPtr(true),
		// 截图画面横竖屏旋转:
		// <li> 0:默认值,截图方向不做处理; </li>
		// <li> 1:截图画面旋转为竖屏: </li>
		// <li> 手机竖屏的截图,不做处理; </li>
		// <li> 手机横屏的截图,截图顺时针旋转 90 度。 </li>
		Rotation: Int32Ptr(0),
		// 截图事件是否广播:
		// <li> true:默认值,广播; </li>
		// <li> false:不广播。 </li>
		IsBroadcasted: BoolPtr(true),
		// 设置截图地址回调触发的频次:
		// <li> 0/1/置空:当前行为/默认行为,表示每次调用本接口发起截图,都会刷新 URL,触发新的截图地址回调; </li>
		// <li> -1:URL 固定不刷新,直到 7 天刷新一次 URL(由于 TOS 的 URL 链接有效期为 7 天); </li>
		// <li> 其他数值:截图累计 xx 次后,再刷新 URL,刷新 URL 再触发回调。URL 不变,则不触发新的回调。 </li>
		Interval: Int32Ptr(0),
	}

	resp, err := service.ScreenShot(context.Background(), body)

	if err != nil {
		fmt.Printf("error %v", err)
	} else {
		fmt.Printf("success %+v", resp)
	}
}

批量截图 BatchScreenShot

您可以调用 BatchScreenShot 接口批量截图 BatchScreenShot。详细的参数说明可参见 BatchScreenShot 接口文档。

接口调用示例如下所示。

package main

import (
	"context"
	"fmt"
	"os"

	"github.com/volcengine/volc-sdk-golang/base"
	ACEP "github.com/volcengine/volc-sdk-golang/service/acep"
)

func BoolPtr(v bool) *bool {
	return &v
}

func Int32Ptr(v int32) *int32 {
	return &v
}

func main() {
	// 强烈建议不要把 VOLC_ACCESSKEY 和 VOLC_SECRETKEY 保存到工程代码里,否则可能导致 AccessKey 泄露,威胁您账号下所有资源的安全。
	// 本示例通过从环境变量中读取 VOLC_ACCESSKEY 和 VOLC_SECRETKEY,来实现 API 访问的身份验证。运行代码示例前,请配置环境变量 VOLC_ACCESSKEY 和 VOLC_SECRETKEY
	service := ACEP.NewInstance()

	service.SetCredential(base.Credentials{
		AccessKeyID:     os.Getenv("VOLC_ACCESSKEY"),
		SecretAccessKey: os.Getenv("VOLC_SECRETKEY"),
	})

	body := &ACEP.BatchScreenShotBody{
		// 实例所属业务 ID,可在「云手机控制台-业务管理-业务详情」中获取。
		ProductID: `1608456935646xxxxxx`,
		// 是否保存截图文件在云手机实例:
		// <li> true:上传截图文件到火山引擎对象存储,并保存截图文件在云手机实例中。 </li>
		// <li> false:默认值,上传截图文件到火山引擎对象存储,上传完成后,删除保存在云手机实例中的文件。 </li>
		//
		// 截图文件保存和清理逻辑如下:
		// <li> 当保存截图文件在云手机实例时,截图超过 1000 张时会清理之前保存的截图文件; </li>
		// <li> 当上传截图文件到火山引擎对象存储时,截图上传到对象存储成功后再清理云手机实例中的截图文件; </li>
		// <li> 当云手机存储空间小于 600MB 时: </li>
		// <li> 若设置该参数为 true,则不可执行截图操作; </li>
		// <li> 若设置该参数为 false,可执行截图操作。 </li>
		IsSavedOnPod: BoolPtr(true),
		// 截图画面横竖屏旋转:
		// <li> 0:默认值,截图方向不做处理; </li>
		// <li> 1:截图画面旋转为竖屏: </li>
		// <li> 手机竖屏的截图,不做处理; </li>
		// <li> 手机横屏的截图,截图顺时针旋转 90 度。 </li>
		Rotation: Int32Ptr(0),
		// 截图事件是否广播:
		// <li> true:默认值,广播; </li>
		// <li> false:不广播。 </li>
		IsBroadcasted: BoolPtr(true),
		// 设置截图地址回调触发的频次:
		// <li> 0/1/置空:当前行为/默认行为,表示每次调用本接口发起截图,都会刷新 URL,触发新的截图地址回调; </li>
		// <li> -1:URL 固定不刷新,直到 7 天刷新一次 URL(由于 TOS 的 URL 链接有效期为 7 天); </li>
		// <li> 其他数值:截图累计 xx 次后,再刷新 URL,刷新 URL 再触发回调。URL 不变,则不触发新的回调。 </li>
		Interval: Int32Ptr(0),
	}

	// 需要发起截图请求的实例 ID 列表,批量操作的最大实例数量为 100。
	PodIDList := []string{"7299381659819xxxxxx", "7299405883363xxxxxx"}

	body.PodIDList = PodIDList

	resp, err := service.BatchScreenShot(context.Background(), body)

	if err != nil {
		fmt.Printf("error %v", err)
	} else {
		fmt.Printf("success %+v", resp)
	}
}

开始录屏 StartRecording

您可以调用 StartRecording 接口开始录屏 StartRecording。详细的参数说明可参见 StartRecording 接口文档。

接口调用示例如下所示。

package main

import (
	"context"
	"fmt"
	"os"

	"github.com/volcengine/volc-sdk-golang/base"
	ACEP "github.com/volcengine/volc-sdk-golang/service/acep"
)

func BoolPtr(v bool) *bool {
	return &v
}

func main() {
	// 强烈建议不要把 VOLC_ACCESSKEY 和 VOLC_SECRETKEY 保存到工程代码里,否则可能导致 AccessKey 泄露,威胁您账号下所有资源的安全。
	// 本示例通过从环境变量中读取 VOLC_ACCESSKEY 和 VOLC_SECRETKEY,来实现 API 访问的身份验证。运行代码示例前,请配置环境变量 VOLC_ACCESSKEY 和 VOLC_SECRETKEY
	service := ACEP.NewInstance()

	service.SetCredential(base.Credentials{
		AccessKeyID:     os.Getenv("VOLC_ACCESSKEY"),
		SecretAccessKey: os.Getenv("VOLC_SECRETKEY"),
	})

	body := &ACEP.StartRecordingBody{
		// 实例所属业务 ID,可在「云手机控制台-业务管理-业务详情」中获取。
		ProductID: `1608456935646xxxxxx`,
		// 实例 ID,可通过调用 ListPod 接口获取。
		PodID: `7299381659819xxxxxx`,
		// 设置最大录屏时长,单位:秒。
		// 支持设置的最大值为 14400,即 4 小时。
		DurationLimit: 120,
		// 录屏请求的唯一标识。
		// 为避免由于网络等原因造成重复请求,同一 RoundId 在 5 分钟内只可使用一次。
		RoundID: `01`,
		// 是否保存录屏文件在云手机实例:
		// <li> true:上传录屏文件到火山引擎对象存储,并保存录屏文件在云手机实例中; </li>
		// <li> false:默认值,上传录屏文件到火山引擎对象存储,上传完成后,删除保存在云手机实例中的文件。 </li>
		IsSavedOnPod: BoolPtr(true),
	}

	resp, err := service.StartRecording(context.Background(), body)

	if err != nil {
		fmt.Printf("error %v", err)
	} else {
		fmt.Printf("success %+v", resp)
	}
}

停止录屏 StopRecording

您可以调用 StopRecording 接口停止录屏 StopRecording。详细的参数说明可参见 StopRecording 接口文档。

接口调用示例如下所示。

package main

import (
	"context"
	"fmt"
	"os"

	"github.com/volcengine/volc-sdk-golang/base"
	ACEP "github.com/volcengine/volc-sdk-golang/service/acep"
)

func main() {
	// 强烈建议不要把 VOLC_ACCESSKEY 和 VOLC_SECRETKEY 保存到工程代码里,否则可能导致 AccessKey 泄露,威胁您账号下所有资源的安全。
	// 本示例通过从环境变量中读取 VOLC_ACCESSKEY 和 VOLC_SECRETKEY,来实现 API 访问的身份验证。运行代码示例前,请配置环境变量 VOLC_ACCESSKEY 和 VOLC_SECRETKEY
	service := ACEP.NewInstance()

	service.SetCredential(base.Credentials{
		AccessKeyID:     os.Getenv("VOLC_ACCESSKEY"),
		SecretAccessKey: os.Getenv("VOLC_SECRETKEY"),
	})

	body := &ACEP.StopRecordingBody{
		// 实例所属业务 ID,可在「云手机控制台-业务管理-业务详情」中获取。
		ProductID: `1608456935646xxxxxx`,
		// 实例 ID,可通过调用 ListPod 接口获取。
		PodID: `7299381659819xxxxxx`,
	}

	resp, err := service.StopRecording(context.Background(), body)

	if err != nil {
		fmt.Printf("error %v", err)
	} else {
		fmt.Printf("success %+v", resp)
	}
}

上传文件 PushFile

您可以调用 PushFile 接口上传文件 PushFile。详细的参数说明可参见 PushFile 接口文档。

接口调用示例如下所示。

package main

import (
	"context"
	"fmt"
	"os"

	"github.com/volcengine/volc-sdk-golang/base"
	ACEP "github.com/volcengine/volc-sdk-golang/service/acep"
)

func StringPtr(v string) *string {
	return &v
}

func Int32Ptr(v int32) *int32 {
	return &v
}

func main() {
	// 强烈建议不要把 VOLC_ACCESSKEY 和 VOLC_SECRETKEY 保存到工程代码里,否则可能导致 AccessKey 泄露,威胁您账号下所有资源的安全。
	// 本示例通过从环境变量中读取 VOLC_ACCESSKEY 和 VOLC_SECRETKEY,来实现 API 访问的身份验证。运行代码示例前,请配置环境变量 VOLC_ACCESSKEY 和 VOLC_SECRETKEY
	service := ACEP.NewInstance()

	service.SetCredential(base.Credentials{
		AccessKeyID:     os.Getenv("VOLC_ACCESSKEY"),
		SecretAccessKey: os.Getenv("VOLC_SECRETKEY"),
	})

	body := &ACEP.PushFileBody{
		// 业务 ID,可在「云手机控制台-业务管理-业务详情」中获取。
		ProductID: `1608456935646xxxxxx`,
		// (TosBucket 填写时,必填)存储桶下的目录或文件名称(不能以 / 开头),正确示例:cloudphone/gameApk/my_photo.jpg。
		TosFilePath: StringPtr(`files/file01.pdf`),
		// (TosBucket 填写时,必填)对象存储服务地址,例如:tos-cn-beijing.volces.com。
		Endpoint: StringPtr(`tos-cn-beijing.volces.com`),
		// (TosBucket 填写时,必填)对象存储服务区域,例如:cn-beijing。
		Region: StringPtr(`cn-beijing`),
		// 从对象存储推送文件到云手机实例,指定保存源文件的火山引擎对象存储中的存储桶名称,例如:test-bucket。
		// > 说明:与 DownloadUrl 二选一,如果 TosBucket 填写,则会忽略 DownloadUrl 参数。
		TosBucket: StringPtr(`my-bucket`),
		// 推送文件至云手机实例中的目标路径(不包括文件名),支持的目标路径包括以下目录:
		// <li> /sdcard/ </li>
		// <li> /data/local/ </li>
		TargetDirectory: `/data/local/`,
		// 是否自动解压推送的压缩文件:
		// <li> 0:推送 zip 文件后,自动解压文件(默认); </li>
		// <li> 1:推送 zip 文件后,不自动解压文件。 </li>
		AutoUnzip: Int32Ptr(1),
	}

	// 需要推送文件的实例 ID 列表,长度上限为 200。
	PodIDList := []string{"7299381659819xxxxxx"}

	body.PodIDList = PodIDList

	resp, err := service.PushFile(context.Background(), body)

	if err != nil {
		fmt.Printf("error %v", err)
	} else {
		fmt.Printf("success %+v", resp)
	}
}

下载文件 PullFile

您可以调用 PullFile 接口下载文件 PullFile。详细的参数说明可参见 PullFile 接口文档。

接口调用示例如下所示。

package main

import (
	"context"
	"fmt"
	"os"

	"github.com/volcengine/volc-sdk-golang/base"
	ACEP "github.com/volcengine/volc-sdk-golang/service/acep"
)

func main() {
	// 强烈建议不要把 VOLC_ACCESSKEY 和 VOLC_SECRETKEY 保存到工程代码里,否则可能导致 AccessKey 泄露,威胁您账号下所有资源的安全。
	// 本示例通过从环境变量中读取 VOLC_ACCESSKEY 和 VOLC_SECRETKEY,来实现 API 访问的身份验证。运行代码示例前,请配置环境变量 VOLC_ACCESSKEY 和 VOLC_SECRETKEY
	service := ACEP.NewInstance()

	service.SetCredential(base.Credentials{
		AccessKeyID:     os.Getenv("VOLC_ACCESSKEY"),
		SecretAccessKey: os.Getenv("VOLC_SECRETKEY"),
	})

	body := &ACEP.PullFileBody{
		// 业务 ID,可在「云手机控制台-业务管理-业务详情」中获取。
		ProductID: `1608456935646xxxxxx`,
		// 实例 ID,可通过调用 ListPod 接口获取。
		PodID: `7299381659819xxxxxx`,
		// 火山引擎对象存储中的存储桶名称。
		TosBucket: `my-bucket`,
		// 存储桶下保存文件的完整路径,包括文件名,并且指定的路径必须存在(不能以 / 开头),例如:cloudphone/screen_record/record.mp4
		// > 说明:当下载文件夹时,会将文件夹以 .zip 文件的格式下载,TosFilePath 也要指定为以 .zip 文件格式结尾。
		TosFilePath: `files/download.zip`,
		// 对象存储服务地址。
		Endpoint: `tos-cn-beijing.volces.com`,
		// 对象存储服务区域。
		Region: `cn-beijing`,
		// 实例中待下载文件的路径或文件名,支持从以下路径下载文件:
		// <li> /sdcard/ </li>
		// <li> /data/misc/logd/ + 日志文件名/ </li>
		FilePath: `/data/misc/logd`,
	}

	resp, err := service.PullFile(context.Background(), body)

	if err != nil {
		fmt.Printf("error %v", err)
	} else {
		fmt.Printf("success %+v", resp)
	}
}

异步执行命令 RunCommand

您可以调用 RunCommand 接口异步执行命令 RunCommand。详细的参数说明可参见 RunCommand 接口文档。

接口调用示例如下所示。

package main

import (
	"context"
	"fmt"
	"os"

	"github.com/volcengine/volc-sdk-golang/base"
	ACEP "github.com/volcengine/volc-sdk-golang/service/acep"
)

func StringPtr(v string) *string {
	return &v
}

func Int32Ptr(v int32) *int32 {
	return &v
}

func main() {
	// 强烈建议不要把 VOLC_ACCESSKEY 和 VOLC_SECRETKEY 保存到工程代码里,否则可能导致 AccessKey 泄露,威胁您账号下所有资源的安全。
	// 本示例通过从环境变量中读取 VOLC_ACCESSKEY 和 VOLC_SECRETKEY,来实现 API 访问的身份验证。运行代码示例前,请配置环境变量 VOLC_ACCESSKEY 和 VOLC_SECRETKEY
	service := ACEP.NewInstance()

	service.SetCredential(base.Credentials{
		AccessKeyID:     os.Getenv("VOLC_ACCESSKEY"),
		SecretAccessKey: os.Getenv("VOLC_SECRETKEY"),
	})

	body := &ACEP.RunCommandBody{
		// 实例所归属的业务 ID,可在「云手机控制台-业务管理-业务详情」中获取。
		ProductID: `1608456935646xxxxxx`,
		// 待执行的命令,支持的最大长度为 1024 字节。
		Command: `ls`,
		// 权限类型。
		PermissionType: StringPtr(`root`),
		// 异步命令执行的超时时长,单位为 s,默认值为 300,取值范围为 [0,21600]。
		TimeoutSeconds: Int32Ptr(300),
	}

	// 实例 ID 列表,对多个实例批量执行命令操作时,支持的最大实例数量为 100。
	PodIDList := []string{"7299381659819xxxxxx", "7297074858797xxxxxx"}

	body.PodIDList = PodIDList

	resp, err := service.RunCommand(context.Background(), body)

	if err != nil {
		fmt.Printf("error %v", err)
	} else {
		fmt.Printf("success %+v", resp)
	}
}

同步执行命令 RunSyncCommand

您可以调用 RunSyncCommand 接口同步执行命令 RunSyncCommand。详细的参数说明可参见 RunSyncCommand 接口文档。

接口调用示例如下所示。

package main

import (
	"context"
	"fmt"
	"os"

	"github.com/volcengine/volc-sdk-golang/base"
	ACEP "github.com/volcengine/volc-sdk-golang/service/acep"
)

func StringPtr(v string) *string {
	return &v
}

func main() {
	// 强烈建议不要把 VOLC_ACCESSKEY 和 VOLC_SECRETKEY 保存到工程代码里,否则可能导致 AccessKey 泄露,威胁您账号下所有资源的安全。
	// 本示例通过从环境变量中读取 VOLC_ACCESSKEY 和 VOLC_SECRETKEY,来实现 API 访问的身份验证。运行代码示例前,请配置环境变量 VOLC_ACCESSKEY 和 VOLC_SECRETKEY
	service := ACEP.NewInstance()

	service.SetCredential(base.Credentials{
		AccessKeyID:     os.Getenv("VOLC_ACCESSKEY"),
		SecretAccessKey: os.Getenv("VOLC_SECRETKEY"),
	})

	body := &ACEP.RunSyncCommandBody{
		// 实例所归属的业务 ID,可在「云手机控制台-业务管理-业务详情」中获取。
		ProductID: `1608456935646xxxxxx`,
		// 待执行的命令,支持的最大长度为 1024 字节。
		Command: `ls`,
		// 权限类型。
		PermissionType: StringPtr(`root`),
	}

	// 实例 ID 列表,对多个实例批量执行命令操作时,支持的最大实例数量为 100。
	PodIDList := []string{"7299381659819xxxxxx", "7297074858797xxxxxx"}

	body.PodIDList = PodIDList

	resp, err := service.RunSyncCommand(context.Background(), body)

	if err != nil {
		fmt.Printf("error %v", err)
	} else {
		fmt.Printf("success %+v", resp)
	}
}

封禁用户 BanUser

您可以调用 BanUser 接口封禁用户 BanUser。详细的参数说明可参见 BanUser 接口文档。

接口调用示例如下所示。

package main

import (
	"context"
	"fmt"
	"os"

	"github.com/volcengine/volc-sdk-golang/base"
	ACEP "github.com/volcengine/volc-sdk-golang/service/acep"
)

func Int32Ptr(v int32) *int32 {
	return &v
}

func main() {
	// 强烈建议不要把 VOLC_ACCESSKEY 和 VOLC_SECRETKEY 保存到工程代码里,否则可能导致 AccessKey 泄露,威胁您账号下所有资源的安全。
	// 本示例通过从环境变量中读取 VOLC_ACCESSKEY 和 VOLC_SECRETKEY,来实现 API 访问的身份验证。运行代码示例前,请配置环境变量 VOLC_ACCESSKEY 和 VOLC_SECRETKEY
	service := ACEP.NewInstance()

	service.SetCredential(base.Credentials{
		AccessKeyID:     os.Getenv("VOLC_ACCESSKEY"),
		SecretAccessKey: os.Getenv("VOLC_SECRETKEY"),
	})

	body := &ACEP.BanUserBody{
		// 业务 ID,可在「云手机控制台-业务管理-业务详情」中获取。
		ProductID: `1608456935646957568`,
		// 实例 ID。
		PodID: `7299381659819563817`,
		// 目标封禁用户的 ID。
		UserID: `user01`,
		// 封禁时长,单位:秒,取值范围为 [60, 259290]:
		// <li> 若传入值为空或 0 表示允许该用户重新连接云手机; </li>
		// <li> 若传入值大于 0,且小于 60,自动调整为 60; </li>
		// <li> 若传入值大于 259290,自动调整为 259290。 </li>
		ForbiddenInterval: Int32Ptr(120),
	}

	resp, err := service.BanUser(context.Background(), body)

	if err != nil {
		fmt.Printf("error %v", err)
	} else {
		fmt.Printf("success %+v", resp)
	}
}