更新时间:2024-12-30 02:32:26下载pdf
本文介绍如何基于消息管理业务拓展 SDK,实现消息管理功能,包含消息内容、消息免打扰设置等。
消息管理业务拓展 SDK 封装了三种消息类型:设备告警、家庭消息、通知消息。
查询消息
查询对应类型的消息列表并展示到页面中,以设备告警消息为例,一次查询 15 条消息:
let message = ThingSmartMessage()
let requestModel = ThingSmartMessageListRequestModel()
requestModel.msgType = .alarm
requestModel.limit = 15
requestModel.offset = 0
message.fetchList(with: requestModel) {[weak self] list in
guard let self = self else {return}
self.messageList = list
self.tableView.reloadData()
} failure: { error in
}
删除消息
当用户需要删除消息时,先记录下用户勾选的消息实体:
func change(selected: Bool, msgId: String) {
if selected {
deleteIds.append(msgId)
} else {
deleteIds.removeAll { obj in
obj == msgId
}
}
}
接着调用批量删除接口:
let message = ThingSmartMessage()
let requestModel = ThingSmartMessageListDeleteRequestModel()
requestModel.msgIds = deleteIds
requestModel.msgType = .family
message.delete(with: requestModel) { result in
self.loadData()
} failure: { error in
}
设备告警消息会触发地比较频繁,所以要为用户提供免打扰管理能力。免打扰管理包含免打扰开关、设置免打扰时间等相关能力。
查询免打扰开关状态
ThingSmartMessageSetting().getDeviceDNDSettingstatusSuccess { result in
self.settingStatus = result
} failure: { error in
}
设置免打扰开关状态
let status = sender.isOn
ThingSmartMessageSetting().setDeviceDNDSettingStatus(status) {
} failure: { error in
}
添加免打扰配置
startTime
、endTime
:免打扰开始时间和结束时间,在这一时间段内不会收到设备告警消息。下方示例中表示早上 8 点到中午 12 点是免打扰时间。loops
:表示该配置针对一周中的哪几天生效。如 “0111110” 表示免打扰生效时间为每周一到周五。isAllDevIDs
:表示该免打扰配置是否对所有设备生效。let setting = ThingSmartMessageSetting()
let requestModel = ThingSmartMessageSettingDNDRequestModel()
requestModel.isAllDevIDs = true
requestModel.startTime = "08:00"
requestModel.endTime = "12:00"
requestModel.loops = "0111110"
setting.addDND(with: requestModel) {
self.loadData()
} failure: { error in
}
修改免打扰配置
当免打扰配置创建成功后,用户可以再次编辑开始时间、结束时间、周期以及生效设备。编辑完成后调用修改免打扰配置接口进行保存:
let startCell = tableView.cellForRow(at: IndexPath(row: 0, section: 0)) as? MessageDNDTimeCell
let endCell = tableView.cellForRow(at: IndexPath(row: 1, section: 0)) as? MessageDNDTimeCell
let requestModel = ThingSmartMessageSettingDNDRequestModel()
requestModel.startTime = startCell?.inputFiled.text ?? ""
requestModel.endTime = endCell?.inputFiled.text ?? ""
var loops = ""
for i in 0..<7 {
let choose = selectMap[i]
if let choose = choose, choose {
loops += "1"
} else {
loops += "0"
}
}
requestModel.loops = loops
requestModel.isAllDevIDs = dndModel?.allDevIds ?? false
ThingSmartMessageSetting().modifyDND(withTimerID: dndModel!.timerId, dndRequestModel: requestModel) {
self.navigationController?.popViewController(animated: true)
} failure: { error in
}
删除免打扰配置
当用户不需要免打扰时,可以删除该配置:
ThingSmartMessageSetting().removeDND(withTimerID: dndModel?.timerId ?? 0) {
self.navigationController?.popViewController(animated: true)
} failure: { error in
}
查询免打扰配置列表
用户可以同时创建多个免打扰配置,查询所有免打扰配置并展示到页面中:
let setting = ThingSmartMessageSetting()
setting.getDNDListSuccess { result in
var list : [MessageDNDModel] = []
if let result = result {
for obj in result {
if let data = try? JSONSerialization.data(withJSONObject: obj, options: JSONSerialization.WritingOptions.init()) {
if var model = try? JSONDecoder.init().decode(MessageDNDModel.self, from: data) {
list.append(model)
}
}
}
}
self.dndList = list
self.tableView.reloadData()
} failure: { error in
}
设备告警消息可以通过系统通知、电话通知、短信通知三种渠道推送,每个渠道有单独的开关。其中电话和短信需要额外开通 增值服务,请联系您对应的商务人员咨询详情。
查询推送渠道开关状态
以系统推送告警消息为例:
let messageSetting = ThingSmartMessagePushSetting()
messageSetting.getDeviceAlarmSwitchStatus(with: .system) { result in
self.systemSwitch.isOn = result
}
设置推送渠道开关状态
以系统推送告警消息为例:
let messageSetting = ThingSmartMessagePushSetting()
let requestModel = ThingSmartDeviceAlarmSwitchRequestModel()
requestModel.open = self.systemSwitch.isOn
requestModel.pushChannel = .system
messageSetting.setDeviceAlarmSwitchStatusWith(requestModel) {
}
设置推送渠道节流时间
因为设备告警消息触发地比较频繁,在能够接收推送消息的时间段内,如果每次触发都推送消息,会造成消息轰炸,所以需要设置一个节流时间。以系统推送告警消息为例,节流时间设置为 30 分钟,则系统推送告警消息的时间间隔不小于 30 分钟。
let messageSetting = ThingSmartMessagePushSetting()
let requestModel = ThingSmartDeviceAlarmThrottleTimeRequestModel()
requestModel.minute = 30
requestModel.pushChannel = .system
messageSetting.setDeviceAlarmThrottleTimeWith(requestModel) { result in
}
该内容对您有帮助吗?
是意见反馈该内容对您有帮助吗?
是意见反馈