使用 Android Link SDK 进行设备动态注册并接入
使用 Android Link SDK 进行设备动态注册并接入
背景
本文将进一步介绍如何使用 Android Link SDK 进行设备基于MQTT协议的设备动态注册。
参考动态注册文档链接,动态注册分为两步:
设备注册(register):提供 productKey+productSecret+deviceName 去平台注册,返回 deviceToken
设备激活(connect):提供 productKey+deviceName+deviceToken 去平台激活设备
设备注册和设备激活是两个单独的过程,Android Link SDK 项目中,分别在 DemoApplication.java、InitManager.java 两个文件中实现。
步骤
修改设备信息
在res>raw>deviceinfo中填入自己设备的三元组信息
替换域名,选择端口 "mqttHost": "si-***********.tuyacloud.com:8883",(tcp 连接为 1883)
替换三元组信息(注意删除 deviceSecret)
"productKey": "*********",
"productSecret": "*************************",
"deviceName": "******************",
添加 registerType
"registerType": "regnwl",
修改认证方式
connect 的认证方式修改,前文已经介绍过,这里着重介绍 register 的认证方式修改
register 的认证方式修改,主要是修改 DemoApplication.java 中 MqttConfigure 中成员变量(大概在DemoApplication.java 文件的 130 行左右)
MqttInitParams initParams = new MqttInitParams(productKey, productSecret, deviceName, deviceSecret, MqttConfigure.MQTT_SECURE_MODE_TLS);
//动态注册step1: 确定一型一密的类型(免预注册, 还是非免预注册)
//case 1: 如果registerType里面填写了regnwl, 表明设备的一型一密方式为免预注册(即无需创建设备)
//case 2: 如果这个字段为空, 则表示为需要预注册的一型一密(需要实现创建设备)
// docs: https://help.aliyun.com/document_detail/132111.html?spm=a2c4g.11186623.6.600.4e073f827Y7a8y
initParams.registerType = registerType;
//动态注册step2: 设置动态注册的注册接入点域名
MqttConfigure.mqttHost = mqttHost;
//动态注册step3: 替换证书
try {
// 从assets目录加载证书文件为字节数组
String certFileName = "tuyarootca.crt";
java.io.InputStream assetStream = mAppContext.getAssets().open(certFileName);
// 读取字节数组
byte[] certBytes = new byte[assetStream.available()];
assetStream.read(certBytes);
assetStream.close();
// 创建字节数组输入流
java.io.ByteArrayInputStream byteArrayInputStream = new java.io.ByteArrayInputStream(certBytes);
MqttConfigure.mqttRootCrtFile = byteArrayInputStream;
AppLog.d(TAG, "已成功加载证书文件: " + certFileName + ",大小: " + certBytes.length + " 字节");
} catch (Exception e) {
AppLog.e(TAG, "加载根证书失败: " + e.getMessage());
}
如果需要用 tcp 方式动态注册,你也可以通过修改认证方式为 tcp(注意 mqtthost 端口也要改为 1883)。不过我们更推荐修改证书的方式。
MqttConfigure.SECURE_MODE = 3;
编译运行
构建 Android 项目,并运行。可以看到安卓模拟器先后提示
“一型一密成功”
“初始化成功”
同时,您也可以去平台查看设备连接状态。