更新时间:2022-02-24 GMT+08:00

设备绑定

接口功能

设备第一次接入物联网平台时需要进行绑定操作,上层应用通过调用该接口传入设备序列号或者MAC地址以及设备信息来绑定到物联网平台。

在绑定前需要调用BindConfig.setConfig接口设置绑定服务器IP与端口(IoCM服务器地址与端口,Agent Lite会配置默认端口8943)。

接口描述

1
public static boolean bind(String verifyCode, IotaDeviceInfo deviceInfo);

接口所属类

BindService

参数说明

字段

必选/可选

类型

描述

verifyCode

必选

String

设备绑定验证码。

  • 如果通过管理门户注册设备,则verifyCode填写为设备注册时设置的preSecret(预置密钥)。
  • 如果通过开发中心注册设备,则verifyCode填写为设备注册时设置的nodeId(设备标识)。

deviceInfo

必选

IotaDeviceInfo

设备信息。

接口返回值

返回值

描述

true

成功。

false

失败。

说明:
  • 此返回值是调用接口的同步返回结果,返回true只是说明接口调用成功,并不说明绑定成功,绑定成功需要收到BindService发出的通知。
  • 当前绑定流程的重试策略为:如果绑定失败,则30秒后继续进行重试,如果重试超过5次(总计尝试超过6次),则返回失败,不再进行重试。如果想要重新发起绑定,建议让用户重启设备。

示例

开发者调用设备绑定接口:

1
2
3
String verifyCode = 123456;
deviceInfo = new IotaDeviceInfo(nodeId,manufactrueId,deviceType,model,protocolType);
BindService.bind(verifyCode,deviceInfo);

开发者调用绑定接口前需要实现AgentLite提供的观察者接口。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
// 调用bindService.registerObserver(this)进行注册,以便接收绑定结果回调,获取回调参数,在登录配置时使用
public class AgentliteBind implements MyObserver{
    public Subscribe (Observable bindService) {
        bindService. registerObserver (this);
    }
}
//绑定结果回调,在AgentliteBind中重写update方法
@Override
public void update(IotaMessage arg0) {
    System.out.println("BindManager收到绑定通知:" + arg0);
    int status = arg0.getUint(BindService.BIND_IE_RESULT, -1);
    System.out.println("status is :" + status);
    switch (status) {
        case 0:
        saveBindParaAndGotoLogin(arg0);
        break;
        default:
        System.out.println("======  绑定失败  === ");
        bindAction();
        break;
    }
}

接收设备绑定响应消息。

1
2
3
4
5
6
7
8
9
// 当设备绑定成功后,Agent Lite会返回给UI如下几个参数:appId,deviceId,secret需要UI进行持久化存储,设备登录前需要提前进行配置。
//保存绑定响应消息携带的参数
private void saveBindParaAndGotoLogin(IotaMessage iotaMsg) {
    String appId = iotaMsg.getString(BindService.BIND_IE_APPID);
    String deviceId = iotaMsg.getString(BindService.BIND_IE_DEVICEID);
    String secret = iotaMsg.getString(BindService.BIND_IE_DEVICESECRET);
    String haAddress = null, lvsAddress = null;
    saveGatewayInfo(appId, deviceId, secret, haAddress, lvsAddress);
}