A-设备分享管理

一、设备分享管理

设备的分享管理包括以下几部分:

  • 将设备分享给其它用户
  • 分享消息推送
  • 处理分享消息

分享设备相关的所有操作并不完全都依赖于任务完成,有一些需要通过 http 接口获取数据,如设备的分享记录或列表;

相关分享接口请查看OPEN-API-设备功能

1、分享设备

通过 XLinkShareDeviceTask 可以将设备权限分享给其他在平台里已经注册的用户。

// 新建XLinkShareDeviceTask
XLinkShareDeviceTask task = XLinkShareDeviceTask.newBuilder()
        // 要分享出去的设备
        .setXDevice(device.getXDevice())
        // 分享模式
        .setMode(XLinkRestfulEnum.ShareMode.ACCOUNT)
        // 被分享者的账号
        .setAccount(account)
        // 该次分享有效期,单位秒,默认为 7200
        .setExpired(expired)
        // 设备的操作权限,默认允许读写
        .setAuthority(XLinkRestfulEnum.DeviceAuthority.RW)
        .setListener(new XLinkTaskListener<DeviceApi.ShareDeviceResponse>() {
            @Override
            public void onError(@NotNull XLinkCoreException exception) {
            }
 
            @Override
            public void onStart() {
            }
 
            @Override
            public void onComplete(DeviceApi.ShareDeviceResponse response) {
                //从结果中获取邀请码
                String invitedCode = response.inviteCode;
            }
        )
        .build();
XLinkSDK.startTask(task);
  • 分享的模式类型
类型 说明
XLinkRestfulEnum.ShareMode.ACCOUNT 通过用户ID分享
XLinkRestfulEnum.ShareMode.QR_CODE 二维码方式分享
XLinkRestfulEnum.ShareMode.EMAIL 邮件方式分享
  • 设备操作权限
类型 说明
XLinkRestfulEnum.DeviceAuthority.R 只读
XLinkRestfulEnum.DeviceAuthority.W 只写
XLinkRestfulEnum.DeviceAuthority.RW 可读写

2、分享消息推送

当接受分享方在线时,对方的 XLinkCloudListener 中的 onEventNotify 会收到类型为 EventNotify.MSG_TYPE_DEVICE_SHARE 的通知:

public void onEventNotify(EventNotify eventNotify) {
    //当SDK连接上云端,并接收到云端推送时,会回调这个方法
    switch (eventNotify.messageType) {
        case EventNotify.MSG_TYPE_DEVICE_SHARE:
            //收到分享请求
            handleDeviceShareNotify(eventNotify);
            break;
        ....
    }
}

注意:分享仅会有 EventNotify 的通知,设备订阅状态变更 onDeviceChanged() 的回调。
由于分享的设备还不存在当前用户的维护列表中,是无法回调通知设备状态发送了变化的

开发者可通过 EventNotifyHelper 来获取分享的类型,如下所示:

private void handleDeviceShareNotify(EventNotify eventNotify) {
    //解析出设备分析事件
    final EventNotifyHelper.DeviceShareNotify notify = EventNotifyHelper.parseDeviceShareNotify(eventNotify.payload);
    Log.d(TAG, "handleDeviceShareNotify: " + notify);
    ...
    switch (notify.type) {
        //收到新的分享
        case EventNotifyHelper.DeviceShareNotify.TYPE_RECV_SHARE:
            ...
            break;
        // 发出去的分享被接受
        case EventNotifyHelper.DeviceShareNotify.TYPE_ACCEPT_SHARE:
            ...
            break;
        // 原有的分享被取消
        case EventNotifyHelper.DeviceShareNotify.TYPE_CANCEL_SHARE:
            ...
            break;
        // 发出去的分享被拒绝
        case EventNotifyHelper.DeviceShareNotify.TYPE_DENY_SHARE:
            ...
            break;
    }
}  

3、处理分享消息

开发者可以使用 XLinkHandleShareDeviceTask 对分享进行处理,如下所示:

XLinkHandleShareDeviceTask task = XLinkHandleShareDeviceTask.newBuilder()
    // 接受该次分享
    .setAction(action)
    // 待处理的分享的id
    .setInviteCode(notify.invite_code)
     // 当前用户的uid
    .setUid(XLinkUserManager.getInstance().getUid())
    .setListener(xxx)
    .build();
XLinkSDK.startTask(task);

其中 Action 为分享处理的行为:

行为 操作对象 说明
XLinkHandleShareDeviceTask.Action.ACCEPT 被分享者 接受该次分享
XLinkHandleShareDeviceTask.Action.ACCEPT_QRCODE 被分享者 接受该次二维码分享
XLinkHandleShareDeviceTask.Action.DENY 被分享者 拒绝这次分享
XLinkHandleShareDeviceTask.Action.CANCEL 发起分享者 取消已经分享出去的分享记录
XLinkHandleShareDeviceTask.Action.DELETE 被分享者或发起分享者 删除该次分享记录

详情可参考 demo 中关于设备分享部分的代码及注释

4、分享记录状态说明

当分享一个设备或接收到一个分享请求时,该用户都会产生一条分享记录。分享记录的状态如下:

类型 说明
accept string 已接收
cancel string 已取消
deny string 已拒绝
invalid string 无效的请求
overtime string 超时
pending string 等待接收
unsubscribed string 设备已取消订阅,前一个状态必须是Accept

状态的部分变更参考说明如下:

  1. 用户1分享设备给用户2,用户2未处理时,状态为pending;用户1删除设备后,分享记录状态不变;用户2再进行分享记录处理时,提示分享记录无效,状态为invalid
  2. 用户1分享设备给用户2,用户2接受,状态为accpet;用户1删除设备后,分享记录状态变更为cancel
  3. 用户1分享设备给用户2,用户2接受,状态为accpet;用户2删除设备后,分享记录状态变更为unsubscribed

二、更新说明

日期 更新内容
2019-01-16 新增分享记录状态及部分状态变更说明
没找到需要的文档?
你可以提交工单反馈 或 阅读常见问题