有的产品设计了重置(Reset)按钮,用于清除设备上的配置,让设备恢复到出厂状态,这些功能由设备厂商去实现。但是有的场景下,设备商需要云端感知设备上执行了reset操作,那么需要调用Link SDK提供的API告知云端。

Android设备只有用户主动触发reset调用的场景,例如单击按钮或者按键的时候开发者调用SDK的reset接口reset调用之后,SDK分两个流程处理:
  • 如果设备在线,调用reset接口到云端,成功之后销毁整个linkkit(调用deinit),失败按照流程2处理。
  • 如果设备不在线,设置一个reset的标志位,然后销毁整个linkkit,后续linkkit被重新初始化的时候,根据是否有这个reset标志位在建联成功之后再调用reset接口,reset完成之后才会响应设备的发现。如果APP卸载或删除APP数据之后,则下次启动则不再执行reset操作了,标志位被清除了
LinkKit.getInstance().reset(new IConnectSendListener() {
    @Override
    public void onResponse(ARequest aRequest, AResponse aResponse) {
        ALog.d(TAG, "reset onResponse ");
    }

    @Override
    public void onFailure(ARequest aRequest, AError aError) {
        ALog.d(TAG, "reset onFailure");
    }
});
        

智能生活开放平台的用户解绑操作

背景说明:

如果产品是在阿里云IoT的智能生活开放平台注册,那么用户只有通过手机APP与设备之间建立绑定关系之后,才能对设备进行控制。如果设备被出售或者转让给了另外一个用户,那么新用户可以通过触按reset按键告知云端解除设备与原用户的绑定关系,避免原用户对设备可以继续进行控制。

此时就需要调用LinkKit.getInstance().reset接口来告知云端解除设备与原有用户的绑定关系。

允许重新进行动态注册的操作

背景说明:

如果产品的认证选用了动态注册功能,设备出厂时只需要烧写ProductKey、ProductSecret,设备连接到阿里云物联网时可以通过动态注册过程去获取设备的DeviceSecret;但是当设备获取到了DeviceSecret之后,如果通过动态注册过程去获取设备的DeviceSecret,云端将会拒绝。

因此设备获取到DeviceSecret之后,需要将DeviceSecret固化到非应用存储中,并且即使用户触按reset按键或者卸载APP或者删除APP数据也不要将DeviceSecret删除掉。 如果设备因为某些原因导致DeviceSecret被删掉,为了让该设备能够继续被使用,开发者需要将该设备的ProductKey、DeviceName记录下来,到阿里云控制台删除对应deviceName 的设备,然后重新创建一个相同deviceName的设备即可。厂家需要注意正式发布的产品不允许出现deviceSecret可以被用户删除的情况。