使用 Android Link SDK 进行设备动态注册并接入

更新时间:

使用 Android Link SDK 进行设备动态注册并接入

背景

本文将进一步介绍如何使用 Android Link SDK 进行设备基于MQTT协议的设备动态注册

参考动态注册文档链接,动态注册分为两步:

  1. 设备注册(register):提供 productKey+productSecret+deviceName 去平台注册,返回 deviceToken

  2. 设备激活(connect):提供 productKey+deviceName+deviceToken 去平台激活设备

设备注册和设备激活是两个单独的过程,Android Link SDK 项目中,分别在 DemoApplication.java、InitManager.java 两个文件中实现。

步骤

修改设备信息

res>raw>deviceinfo中填入自己设备的三元组信息

  1. 替换域名,选择端口 "mqttHost": "si-***********.tuyacloud.com:8883",(tcp 连接为 1883)

  2. 替换三元组信息(注意删除 deviceSecret

"productKey": "*********",

"productSecret": "*************************",

"deviceName": "******************",

  1. 添加 registerType

"registerType": "regnwl",

修改认证方式

  1. connect 的认证方式修改,前文已经介绍过,这里着重介绍 register 的认证方式修改

  2. 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 项目,并运行。可以看到安卓模拟器先后提示

  1. “一型一密成功”

  2. “初始化成功”

同时,您也可以去平台查看设备连接状态。