story-iot-ios
Требования
- iOS 11.0+
- Swift 5.0+
- XCode 11+
Установка
CocoaPods
pod 'StoryIoT', '~> 1.6'
Вручную
将 StoryIoT 文件夹的内容复制到您的项目中。然后连接 Alamofire 版本 4.9 的依赖。
使用
初始化 StoryIoT
通过 SIOTAuthCredentials 初始化 StoryIoT
let credentials = SIOTAuthCredentials(endpoint: "storyIoTEndpoint", hub: "storyIoTHub", key: "storyIoTKey", secret: "storyIoTSecret")
let storyIoT = StoryIoT(credentials: credentials)
通过字符串初始化 StoryIoT
注意:通过字符串初始化时使用失败的初始化器
let rawString = "https://storyIoTEndpoint=storyIoTHub=storyIoTKey=storyIoTSecret=storyIoTexpirationTimeInterval"
let storyIoT = StoryIoT(raw: rawString)
发布
发布小型消息(命令、事件)
服务器可以直接接收长度至 256Kb 的消息体(一个分块)。长度较大的消息体将被拒绝并返回 500 状态码。发布消息时,消息体和元数据将被记录到存储中,只有操作成功完成后,才会向消费者发送新的消息通知。
let body: [String: Any] = [
"testKey": "testValue",
"created": Date().iotServerTimeString(),
]
let message = SIOTMessageModel(body: body)
message.eventId = "myEventId"
message.userId = self.randomTestUUID()
message.entityId = self.randomTestUUID()
message.created = Date()
message.operationType = .create
self.storyIoT.publish(message: message, success: { response, dataResponse in
}, failure: { error, dataResponse in
})
发布大消息
大数据。此类型消息允许上传大小不受消息存储实现限制的消息。
标准存储允许存储每个大小至2TB的消息。
guard let data = self.messageData else { return }
let message = SIOTMessageModel(data: data)
message.eventId = "myEventId"
message.userId = self.randomTestUUID()
message.entityId = self.randomTestUUID()
message.created = Date()
message.operationType = .update
self.storyIoT.publish(message: message, success: { response, dataResponse in
}, failure: { error, dataResponse in
})
消息存储
消息存储允许根据标识符检索消息并管理其元数据。
检索消息
通过标识符检索消息。
let messageId = "messageID"
self.storyIoT.getMessage(withMessgaeId: messageId, success: { response, dataResponse in
}, failure: { error, dataResponse in
})
修改元数据
如果之前没有这样的值,则创建它,否则替换为新值。
let messageId = "messageID"
self.storyIoT.updateMeta(metaName: "metaName", withNewValue: "newValue", inMessageWithId: messageId, success: { response, dataResponse in
}, failure: { error, dataResponse in
})
删除元数据
为了删除元数据,需要指定要删除的列名称。如果该列存在,则将其删除,否则操作会被忽略,不会引发错误。
let messageId = "messageID"
self.storyIoT.deleteMeta(metaName: "metaName", inMessageWithId: messageId, success: { response, dataResponse in
}, failure: { error, dataResponse in
})
事件流
消息带提供对消息存储的访问,以时间顺序排列的方式表示连续的消息集合,按消息添加到存储的顺序递增排序。在消息带中只显示已确认的消息。
消息带按发布者的发布顺序排列,因此用户可以通过选择页面以两个方向绕过消息带 - 从开始到结束和相反。
消息带的浏览是通过续传令牌实现的。在响应头中与页面一起传递续传令牌。为了获取下一个页面,需要在下一个请求中传递续传令牌,并将返回下一个页面。这样,首次请求服务器建立游标,每次后续请求游标都移动。这样可以通过指示前一个请求的续传令牌和绕行方向来遍历消息带的两侧。
如果未指定令牌,则游标设置为存储中的第一条消息。在执行了首次记录的检索后,将返回续传令牌,然后开始绕行消息带。
可以保存续传令牌并在任何时刻继续获取新的消息进行处理。
获取第一个页面列表
要开始绕行列表,需要执行请求。
注意: size - 页面大小,范围从1到1000。
self.storyIoT.getFeed(token: nil, direction: SIOTFeedDirection.forward, size: 100, success: { response, newToken, dataResponse in
}, failure: { error, dataResponse in
})
获取下一个页面列表
要获取下一个页面,需要提取令牌并将其传递到下一个请求中。将获得下一个页面,如果没有更多消息,则返回空列表。
注意: size - 页面大小,范围从1到1000。
let token = previousToken
self.storyIoT.getFeed(token: token, direction: SIOTFeedDirection.forward, size: 100, success: { response, newToken, dataResponse in
}, failure: { error, dataResponse in
})
许可证
StoryIoT在MIT许可证下分发。 查看详情