认证与连接

本文主要介绍如何进建立设备与云端的连接。

设备认证

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();
}

results matching ""

    No results matching ""