开发者可以通过 XLinkCloudDelegate 接收服务器的推送消息。这里的推送不单指通常意义上的文本消息的推送,还包含用户或者设备变化的消息推送。
一、推送消息对象
XLinkEventNotify类结构如下所示:
@interface XLinkEventNotify : NSObject
/** 通知事件触发来源类型 */
@property(nonatomic, assign) EventNotifyFromType fromType;
/** notify来源 */
@property(nonatomic, assign) uint32_t fromID;
/** 消息类型 */
@property(nonatomic, assign) EventNotifyType messageType;
/** 通知事件标志 */
@property(assign, nonatomic) EventNotifyFlag notifyFlag;
/** 消息的原始数据 */
@property(nonatomic, copy) NSData *notifyData;
@end
- 消息来源类型
来源类型 | 说明 | 对应ID说明 |
---|---|---|
EventNotifyFromSever | 来自服务端 | 0(固定值) |
EventNotifyFromDevice | 来自设备 | deviceId |
EventNotifyFromAPP | 来自APP | appId |
- 消息类型
消息类型 | 值 | 说明 |
---|---|---|
EventNotifyTypeDataPointChanged | 1 | 设备通知,数据端点变化通知 |
EventNotifyTypeDataPointAlert | 2 | 设备告警,数据端点变化引起的告警 |
EventNotifyTypeDeviceShare | 3 | 设备分享,设备管理员发出的分享 |
EventNotifyTypeBoardcast | 4 | 消息广播推送 |
EventNotifyTypeDevicePropChanged | 5 | 设备属性变化通知 |
EventNotifyTypeSubscribeChanged | 6 | 设备与用户订阅关系变化通知 |
EventNotifyTypeDeviceOnlineStateChanged | 7 | 设备在线状态变化通知 |
EventNotifyTypeDeviceOnlineStateAlert | 8 | 设备在线状态告警 |
EventNotifyTypeHomeMessage | 9 | 家庭消息通知,留言板消息 |
EventNotifyTypeHomeInvite | 10 | 家庭邀请通知 |
EventNotifyTypeHomeDeviceAuthrizeChanged | 11 | 家庭设备权限变化 |
EventNotifyTypeHomeMemberChanged | 12 | 家庭成员变化 |
EventNotifyTypeHomeDeviceChanged | 13 | 家庭设备变化 |
二、推送消息对象的数据结构
各类型对应的数据请参考实体类结构:
消息类型 | 实体类 |
---|---|
1 设备通知,数据端点变化通知 | XLinkDataPointChangeNotify |
2 设备告警,数据端点变化引起的告警 | XLinkDataPointAlertNotify |
3 设备分享,设备管理员发出的分享 | XLinkDeviceShareNotify |
4 消息广播推送 | XLinkBroadcastNotify |
5 设备属性变化通知 | XLinkDevicePropChangedNotify |
6 设备与用户订阅关系变化通知 | XLinkSubscriptionChangeNotify |
7 设备在线状态变化通知 | XLinkDeviceOnlineStateChangedNotify |
8 设备在线状态告警 | XLinkDeviceOnlineStateAlertNotify |
三、推送消息解析
开发者可以通过 eventNotify.messageType的来判断消息类型,再根据 eventNotify.notifyData 来处理消息数据。SDK 内置了 EventNotifyHelper 类方便开发者解析消息推送,当需要对 EventNotify 的数据进行处理时,可以通过 EventNotifyHelper 进行快速辅助处理
//如以下示例,通过EventNotifyHelper可快速得到订阅信息变更的推送消息对象
XLinkDeviceShareNotify *shareNotify = [EventNotifyHelper parseDeviceShareNotifyWithData:eventNotify.notifyData];
若 EventNotifyHelper 中不存在对应的 API 可以直接进行通知事件的解析时,则可以使用以下的通用解析方法进行处理
//使用通用解析方式解析出home设备变更的推送消息对象
NSData *payload = [eventNotify.notifyData subdataWithRange:NSMakeRange(2, eventNotify.notifyData.length - 2)];
NSDictionary *recDict = [NSJSONSerialization JSONObjectWithData:payload
options:NSJSONReadingMutableLeaves
error:nil];
关于home相关的通知信息暂时都未提供相关的解析方法
强烈建议使用此辅助类进行事件的解析。由于通知事件实际上是字符串数据,当必须自行进行数据解析时,请忽略 payload 的前两个字节(表示该字符串的长度),再将 payload 的二进制数据转成字符串再进行 json 解析。
注1:开发者在使用sdk时,如果想避免通过轮询的方式来更新状态,应利用上述通知来更新状态
注2:目前消息通知在服务器端不会缓存,即离线后上线,期间的消息通知不会再次收到
注3:消息通知功能需用户登录,并使用云平台服务