认证与连接
本文主要介绍如何进建立设备与云端的连接。
设备认证
SDK支持的设备认证方案如下:
设备秘钥认证方式(根据iot实际情况填写)
如:设备密钥认证方式指设备在连接物联网平台时需要使用平台颁发的ProductKey、DeviceName、DeviceSecret进行设备认证,每个设备的设备密钥不能一样,否则会出现一个设备上线导致另外一个设备下线的情况。
注:有时候设备密钥也被称为三元组。
开发者需要实现初始化失败的设备连接平台重试逻辑,如果设备连接物联网平台成功,SDK发现MQTT连接断开时会自动尝试连接物联网平台。
初始化代码如下:
一.注册消息监听器
实现Listener继承XIotTopicCallback,用于接收服务端下发消息
public void XIotMqttClient.getInstance().registerMsgListener(XIotTopicCallback userCallback)
二.与服务端建立连接
1.非阻塞式连接:
/**
* 建立客户端sdk与服务端的连接。
* 这是非阻塞式的连接
*
* @param listener 连接状态回调,可在XIotConnectionListener单独监听
* @throws XIotException 连接操作失败时抛出的异常
*/
public void XIotMqttClient.getInstance().connect(IMqttConnectionListener listener) throws XIotException
2.阻塞式连接:
/**
* 建立客户端sdk与服务端的连接。
* 这是阻塞式的连接,因此线程会被阻塞,直到操作成功/失败或者超时。
*
* @param timeout 建立连接时,线程等待时间
* @param listener 连接状态回调,可在XIotConnectionListener单独监听
* @throws XIotException 连接操作失败向外抛出的异常
* @throws XIotTimeoutException 连接操作超时抛出的异常
*/
public void XIotMqttClient.getInstance().connect(long timeout, IMqttConnectionListener listener) throws XIotException, XIotTimeoutException
3.自由选择连接方式(阻塞or非阻塞):
/**
* 建立客户端sdk与服务端的连接。
* 该请求既可以是阻塞式也可以是非阻塞式。
*
* @param timeout 线程等待时间
* @param blocking 设置是否为阻塞式
* @param listener 连接状态回调,可在XIotConnectionListener单独监听
* @throws XIotException 连接操作失败抛出异常
* @throws XIotTimeoutException 连接超时抛出异常
*/
public void XIotMqttClient.getInstance().connect(long timeout, boolean blocking, IMqttConnectionListener listener)
throws XIotException, XIotTimeoutException
三.与服务端断开连接
1.非阻塞式断开连接:
/**
* 与服务端断开连接。该接口为非阻塞
*/
public void XIotMqttClient.getInstance().disconnect()
2.阻塞式断开连接:
/**
* 与服务端断开连接。该接口为阻塞式,因此该操作线程会被阻塞住,直到操作结果返回,
* 无论成,失败或者超时
*
* @param timeout the timeout in milliseconds that the calling thread will wait
* @throws XIotException exception thrown if the operation fails
* @throws XIotTimeoutException exception thrown if the operation times out
*/
public void XIotMqttClient.getInstance().disconnect(long timeout) throws XIotException, XIotTimeoutException
3.自由选择连接方式(阻塞or非阻塞):
/**
* 与服务端断开连接,该API支持阻塞式和非阻塞式,通过参数blocking进行控制。
* 非阻塞式情况下,即便当前连接正在被中断的情况下,该线程不会被阻塞住。
* @param timeout the timeout in milliseconds that the calling thread will wait
* @param blocking whether the call should be blocking or non-blocking
* @throws XIotException exception thrown if the operation fails
* @throws XIotTimeoutException exception thrown if the operation times out
*/
public void XIotMqttClient.getInstance().disconnect(long timeout, boolean blocking) throws XIotException,
XIotTimeoutException
四.其他设置
1.设置当前固件版本:
/**
* 设置当前固件版本
*
* @param version 版本号
*/
public void XIotMqttClient.getInstance().setFirmwareVer(String version)
2.设置远程配置版本号:
/**
* 设置远程配置版本号
*
* @param version 版本号
*/
public int XIotMqttClient.getInstance().setRemoteConfigVer(String version)
3.设置重连间隔时间:
/**
* 设置重连间隔时间,单位毫秒。该接口需要在{@link #connect(IMqttConnectionListener)}之前调用。
* 如果重连一直失败,重连间隔时间会随着重连次数增加,可以设置最大值见下文
* @param baseRetryDelay the new base retry delay. The default value is 3,000ms.
*/
public void XIotMqttClient.getInstance().setBaseRetryDelay(int baseRetryDelay)
4.设置最大重连间隔时间:
/**
* 设置最大重连间隔时间,单位毫秒。该接口需要在{@link #connect(IMqttConnectionListener)}之前调用。
*
* @param maxRetryDelay the new max retry delay. The default value is 30,000ms.
*/
public void setMaxRetryDelay(int maxRetryDelay)
5.设置连接的超时时间:
/**
* 设置连接的超时时间,必须在调用 XIotMqttClient.getInstance().connect 之前设置
*
* @param connectionTimeout the new connection timeout. The default value is 30,000ms.
*/
public void XIotMqttClient.getInstance().setConnectionTimeout(int connectionTimeout)
6.设置最大重连次数:
/**
* 设置最大重连次数。默认值5,若设置小于或者等于0 表示可以无限制尝试重连
* 该值必须在 XIotMqttClient.getInstance().connect 之前调用
*
* @param maxConnectionRetries the new max connection retries. The default value is 5.
*/
public void XIotMqttClient.getInstance().setMaxConnectionRetries(int maxConnectionRetries)
7.网络状态改变时是否主动网络重连:
/**
* 网络状态改变时是否主动网络重连
* @param netChangeToTryConnect
*/
@Override
public void XIotMqttClient.getInstance().setNetChangeToTryConnect(boolean netChangeToTryConnect)
五.日志开关
/**
* 日志开关
* @param flag true打开日志,默认关闭
*/
public void XIotMqttClient.getInstance().setDebugOn(boolean flag)
代码示例
//注册消息监听器
XIotMqttClient.getInstance().registerMsgListener(new BaseTopicListener());
//设置当前固件版本,用于ota升级业务
XIotMqttClient.getInstance().setFirmwareVer("1.0.4");
//设置远程配置版本号
XIotMqttClient.getInstance().setRemoteConfigVer("1.0");
//设置连接的超时时间
XIotMqttClient.getInstance().setConnectionTimeout(60000);
//设置最大重连次数
XIotMqttClient.getInstance().setMaxConnectionRetries(11111);
//网络状态改变时是否主动网络重连
XIotMqttClient.getInstance().setNetChangeToTryConnect(true);
//建立客户端sdk与服务端的连接,这是非阻塞式的连接
XIotMqttClient.getInstance().connect(new IMqttConnectionListener() {
@Override
public void onConnectionStatus(int code, String status) {
Log.e(TAG,code+ ":-----:"+status);
}
});
......
//与服务端断开连接
if (XIotMqttClient.getInstance() != null) {
XIotMqttClient.getInstance().disconnect();
}