A-云端消息推送

一、云端消息推送

开发者可以通过 XLinkCloudListener 接收服务器的推送消息。这里的推送不单指通常意义上的文本消息的推送,还包含用户或者设备变化的消息推送。

1、推送消息对象

EventNotify类结构如下所示:

public class EventNoify{
    //消息来源类型
    public byte fromType;
    //消息来源ID
    public int fromId;
    //消息flag
    public byte notifyFlags;
    //消息类型
    public short messageType;
    //消息内容
    public byte[] payload;
}
  • 消息来源类型
来源类型 说明 对应ID说明
FROM_TYPE_FROM_SERVER 来自服务端 0(固定值)
FROM_TYPE_FROM_DEVICE 来自设备 deviceId
FROM_TYPE_FROM_APP 来自APP appId
  • 消息类型
消息类型 说明
MSG_TYPE_DATA_POINT_CHANGED 1 设备通知,数据端点变化通知
MSG_TYPE_DATA_POINT_ALERT 2 设备告警,数据端点变化引起的告警
MSG_TYPE_DEVICE_SHARE 3 设备分享,设备管理员发出的分享
MSG_TYPE_PUSH_MSG 4 消息广播推送
MSG_TYPE_DEVICE_PROP_CHANGE 5 设备属性变化通知
MSG_TYPE_SUBSCRIPTION_CHANGE 6 设备与用户订阅关系变化通知
MSG_TYPE_ONLINE_STATE_CHANGE 7 设备在线状态变化通知
MSG_TYPE_ONLINE_STATE_ALERT 8 设备在线状态告警
MSG_TYPE_HOME_MESSAGE_NOTIFY 9 家庭消息通知,留言板消息
MSG_TYPE_HOME_INVITE 10 家庭邀请通知
MSG_TYPE_HOME_DEVICE_PERMISSION_CHANGED 11 家庭设备权限变化
MSG_TYPE_HOME_MEMBER_CHANGED 12 家庭成员变化
MSG_TYPE_HOME_DEVICE_CHANGED 13 家庭设备变化

2、推送消息对象的数据结构

各类型对应的数据请参考实体类结构:

消息类型 实体类
消息类型 实体类
1 设备通知,数据端点变化通知 DataPointChangedNotify
2 设备告警,数据端点变化引起的告警 DataPointAlertNotify
3 设备分享,设备管理员发出的分享 DeviceShareNotify
4 消息广播推送 PushMsgNotify
5 设备属性变化通知 DevicePropChangeNotify
6 设备与用户订阅关系变化通知 SubscriptionChangeNotify
7 设备在线状态变化通知 OnlineStateChangeNotify
8 设备在线状态告警 OnlineStateAlertNotify
9 家庭消息通知,留言板消息 HomeMessageNotify
10 家庭邀请通知 HomeMemberInvitedNotify
11 家庭设备权限变化 HomeDevicePermissionChangedNotify
12 家庭成员变化 HomeMemberChangedNotify
13 家庭设备变化 HomeDeviceChangedNotify

3、推送消息解析

开发者可以通过 EventNotify.messageType 的来判断消息类型,再根据 EventNotify.payload 来处理消息数据。XAPP SDK 内置了 EventNotifyHelper 类方便开发者解析消息推送,当需要对 EventNotify 的数据进行处理时,可以通过 EventNotifyHelper 进行快速辅助处理

//如以下示例,通过EventNotifyHelper可快速得到订阅信息变更的推送消息对象
SubscriptionChangeNotify = EventNotifyHelper.parseSubscriptionChangeNotify(eventNotify.payload);EventNotifyHelper 中不存在对应的 API 可以直接进行通知事件的解析时,则可以使用以下的通用解析方法进行处理
 
 
//使用通用解析方式解析出home设备变更的推送消息对象
HomeDeviceChangedNotify notify = EventNotifyHelper.parseNotifyFromJson(
    eventNotify.data,
    HomeDeviceChangedNotify.class
    );

关于home相关的通知信息暂时都未提供相关的解析方法

强烈建议使用此辅助类进行事件的解析。由于通知事件实际上是字符串数据,当必须自行进行数据解析时,请忽略 payload 的前两个字节(表示该字符串的长度),再将 payload 的二进制数据按 UTF-8 的编码转成字符串再进行 json 解析。

注1:开发者在使用 XAPP SDK 时,如果想避免通过轮询的方式来更新状态,应利用上述通知来更新状态

注2:消息通知功能需用户登录,并使用云平台服务

没找到需要的文档?
你可以提交工单反馈 或 阅读常见问题