消息管理业务拓展

更新时间: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

}

免打扰配置

添加免打扰配置

  • 参数 startTimeendTime:免打扰开始时间和结束时间,在这一时间段内不会收到设备告警消息。下方示例中表示早上 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

}