iOS SDK提供了与云端长连接的基础能力接口,用户可以直接使用这些接口完成自定义Topic相关的功能。提供的基础能力包括:发布、订阅、取消订阅、订阅下行。可以通过这部分接口实现云端数据的上下行。
调用上行请求接口,SDK封装了上行发布相关接口。
/**
上行数据,直接透传,不会再按alink业务报文协议封装
@param topic 消息topic
@param dat 需透传的数据
@param completeCallback 数据上行结果回调
*/
-(void)uploadData:(NSString *)topic data:(NSData *)dat complete:(LKExpressOnUpstreamResult)completeCallback;
/**
上行数据,不会有回执。SDK会按alink标准协议封装业务报文。
@param topic 消息topic,完整的topic
@param params 业务参数
@param completeCallback 数据上行结果回调
*/
-(void)publish:(NSString *) topic params:(NSDictionary *)params complete:(LKExpressOnUpstreamResult)completeCallback;
示例
1、
NSDictionary * params = @{@"key1":@"val1", @"key2":@"val2"};
NSString * topic = @"/productKey/deviceName/update";//其中productKey/deviceName要换成真实的值
[[LKIoTExpress sharedInstance] publish:topic
params:params
complete:^(NSError * _Nonnull error) {
dispatch_async(dispatch_get_main_queue(), ^{
if (error == nil) {
//"publish成功"
} else {
//"publish失败"]
}
});
}];
//调用 [publish:params:complete:]时,SDK对数据会按 Alink协议格式再行封装
{
"id":"msgId" //消息id
"system": {
"version": "1.0", // 必填,消息版本,目前为1.0
"time": "" // 必填,消息发生的时间,毫秒,
},
"request": {
},
"params": {
//为入参Pamras的内容
}
}
2、
NSData *data = [NSJSONSerialization dataWithJSONObject:params
options:NSJSONWritingPrettyPrinted
error:nil];
[[LKIoTExpress sharedInstance] uploadData:topic
data:data
complete:^(NSError * _Nonnull error) {
dispatch_async(dispatch_get_main_queue(), ^{
if (error == nil) {
//"upload成功"
} else {
//"upload失败"]
}
});
}];
// 调用 [uploadData:data:complete]时,数据不会封装,直接透传
订阅、取消订阅
由于此连接通道是基于Mqtt协议的。而Mqtt协议是基于订阅、发布模型。如A方往TopicA上publish了一段数据,那么B方如果要能收到此段数据,则需要先行订阅TopicA。如果不希望再收到TopicA上的数据,则可以取消订阅TopicA。
/**
移动网关订阅topic的接口
@param topic 订阅的消息的topic,由具体业务确定,需要传完整的topic区段,形如:
/sys/${productKey}/${deviceName}/app/abc/cba
@param completionHandler 订阅流程结束的callback,如果error为空表示订阅成功,否则订阅失败
*/
- (void)subscribe:(NSString *)topic complete: (void (^)(NSError * _Nullable error))completionHandler;
/**
移动网关取消订阅topic的接口
@param topic 订阅的消息的topic,由具体业务确定,需要传完整的topic区段,形如:
/sys/${productKey}/${deviceName}/app/abc/cba
@param completionHandler 取消订阅流程结束的callback,如果error为空表示订阅成功,否则订阅失败
*/
- (void)unsubscribe : (NSString *)topic complete: (void (^)(NSError * _Nullable error))completionHandler;
下行数据监听
订阅Topic成功后,还需要注册listener来监听,SDK才会把此Topic的数据上抛。
@protocol LKExpressDownListener<NSObject>
-(void)onDownstream:(NSString *) topic data: (id _Nullable) data;///<topic-消息topic,data-消息内容,NSString 或者 NSDictionary
-(BOOL)shouldHandle:(NSString *)topic;///<数据使用onDownstream:data:上抛时,可以先过滤一遍,如返回NO,则不上传,返回YES,则会使用onDownstream:data:上抛
@end
[[LKIoTExpress sharedInstance] addDownstreamListener:LKExpressDownListenerTypeGw listener:(id<LKExpressDownListener>)downListener];
//downListener在本SDK中 是 weak reference,所以需要调用者保证生命周期。
//LKExpressDownListenerTypeGw,请务必使用此值