本文介绍如何在 Android 平台集成腾讯云物联网(IoT)应用端 SDK 并完成登录:涵盖工程配置、SDK 引入、登录签名计算与登录调用,并通过拉取家庭列表验证接入是否成功。设备绑定、设备分享、远程控制等能力在登录完成后按需接入,参见本文 下一步。
前提条件
开通服务
AppKey
AppSecret
ProductId
DeviceName
定义物模型
环境准备
Android Studio 3.5 及以上版本。
最低兼容 Android 4.4(SDK API Level 19),建议 Android 5.0(SDK API Level 21)及以上。
创建项目
参考以下步骤创建一个新的 Android 项目。如果已有项目,可跳过本节。
1. 打开 Android Studio,选择 New Project(新建项目)。
2. 选择 Empty Views Activity 模板,单击 Next。

3. 在 Configure your project 页面配置:
Language 选择 Java。
Minimum SDK 建议 Android 5.0(API 21)及以上。
Build configuration language 选择 Groovy DSL (build.gradle)。

集成 SDK
1. 在 app/build.gradle(非根目录的 build.gradle)的 dependencies 中添加 IoT SDK 依赖:
dependencies {// 物联网应用端 SDKimplementation 'com.tencent.liteav.customize:LiteAVSDK_Professional:13.4.0.25011'}
2. 完成配置后,在 Android Studio 工具栏单击 Sync Now,SDK 将自动下载并集成到工程中。出现 Build successful 即表示成功。

接入步骤
步骤 1:创建 SDK 实例
调用
TXIoTEngine.getInstance 创建 SDK 实例,注册登录、签名过期和设备状态推送监听。TXIoTEngine iotEngine = TXIoTEngine.getInstance(getApplicationContext());iotEngine.addListener(new TXIoTEngine.TXIoTEngineListener() {@Overridepublic void onLoginSuccess() {// 登录成功}//其他回调省略实现});
步骤 2:计算登录签名
说明:
快速接入阶段可直接在客户端计算签名进行调试。正式上线时请将签名计算逻辑放在业务后台,不要将 AppSecret 保存在客户端。
签名参数
参与签名的参数:
参数 | 说明 |
RequestId | 唯一请求 ID,建议使用 UUID。 |
Timestamp | 当前 UNIX 秒级时间戳。 |
Nonce | 随机正整数,用于和时间戳一起防重放。 |
AppKey | |
OpenID | 用户标识,需与后续登录的 userId 保持一致。支持数字、字母、下划线,长度不超过 32 字节。 |
注意:
OpenID 与 UserID 的关系:签名参数名为 OpenID,SDK 登录接口参数名为 userId,两者是同一个东西,值必须保持一致。
签名计算规则
1. 去掉值为空的参数。
2. 将参数按参数名的字典序升序排列。
3. 将排序后的参数按
Key=Value 格式拼接。4. 使用
& 连接所有参数,得到签名原文。5. 使用从 开通服务 文档获取的
AppSecret 对签名原文进行 HMAC-SHA1 签名。6. 对签名结果进行 Base64 编码,得到最终
Signature。签名计算示例
例如,参与签名的参数如下:
RequestId=8b8d499bbba1ac28b6da21b4Timestamp=1546315200Nonce=71087795AppKey=your_app_keyOpenID=user_001
排序后的签名原文:
AppKey=your_app_key&Nonce=71087795&OpenID=user_001&RequestId=8b8d499bbba1ac28b6da21b4&Timestamp=1546315200
参考以下 Python 示例计算签名:
import base64import hashlibimport hmacdef generate_signature(app_secret, request_id, timestamp, nonce, app_key, user_id):params = {"RequestId": request_id,"Timestamp": str(timestamp),"Nonce": str(nonce),"AppKey": app_key,"OpenID": user_id,}# 去掉值为空的参数params = {key: valuefor key, value in params.items()if value is not None and value != ""}# 按参数名的字典序升序排列sorted_items = sorted(params.items(), key=lambda item: item[0])# 按 Key=Value 格式拼接,使用 & 连接source = "&".join([f"{key}={value}" for key, value in sorted_items])# 使用 AppSecret 对签名原文进行 HMAC-SHA1 签名digest = hmac.new(app_secret.encode("utf-8"),source.encode("utf-8"),hashlib.sha1,).digest()# 对签名结果进行 Base64 编码signature = base64.b64encode(digest).decode("utf-8")return signaturesignature = generate_signature(app_secret="your_app_secret",request_id="8b8d499bbba1ac28b6da21b4",timestamp=1546315200,nonce=71087795,app_key="your_app_key",user_id="user_001",)print(signature)
Running Environment
Operating System: Ubuntu 24.04.3 LTS / x86_64
Runtime Version: Python 3.11.1
步骤 3:登录 SDK
调用
TXIoTEngine.login 登录 SDK,传入上一步计算得到的签名参数。参数说明
参数 | 类型 | 说明 |
appKey | String | |
userId | String | 用户标识,支持数字、字母、下划线,长度不超过 32 字节。 首次使用会自动注册,已注册则登录原有账号,该账号下的设备绑定关系仍然保留。需与签名参数 OpenID 保持一致。 |
userSignature.requestId | String | 对应签名参数 RequestId。 |
userSignature.timestamp | long | 对应签名参数 Timestamp。 |
userSignature.nonce | int | 对应签名参数 Nonce。 |
userSignature.signature | String | 签名计算结果。 |
TXIoTEngine.TXIoTUserSignature userSignature = new TXIoTEngine.TXIoTUserSignature();userSignature.requestId = requestId;userSignature.timestamp = timestamp;userSignature.nonce = nonce;userSignature.signature = signature;iotEngine.login(appKey, userId, userSignature);
步骤 4:验证登录结果
登录成功后,调用
getFamilyManager 获取家庭管理实例并拉取家庭列表,以此验证登录态与网络链路是否正常。返回的 familyId 是后续绑定设备、查询设备列表的必备参数,请妥善保存。TXIoTFamilyManager familyManager = iotEngine.getFamilyManager();if (familyManager == null) {// SDK 未登录或登录态已失效return;}familyManager.getFamilyList(new TXIoTCallback<List<TXIoTFamilyInfo>>() {@Overridepublic void onSuccess(List<TXIoTFamilyInfo> familyList) {// 选择一个家庭,记录 familyIdString familyId = familyList.get(0).familyId;}@Overridepublic void onError(TXIoTErrorCode errorCode, String errorMessage) {// 获取家庭列表失败}});
如果当前账号下没有家庭,可调用
createFamily 创建:familyManager.createFamily("我的家庭", callback);
常见问题
为什么 getFamilyManager 或 getDeviceManager 返回 null?
SDK 尚未登录或登录态已失效。请先调用
TXIoTEngine.login,并在收到 onLoginSuccess 后再获取对应 Manager。登录签名过期后如何处理?
当收到
onUserSignatureExpired 回调时,请重新计算登录签名,然后再次调用 TXIoTEngine.login。下一步
完成基础接入后,您还可以继续接入以下能力:
设备绑定
远程控制
家庭管理