遇到过一个很棘手的问题,融云推送一条消息后,客户端需要判断appData这个字段来进行不同的个性化跳转。然而远程推送,iOS客户端可以获取到AppData。可是本地推送无法获取到AppData,融云并没有给配置本地推送的数据。但需求是必须实现的,所以想到可以把融云那边的通知给拦截到,然后自己弹一个推送,这样自己弹得推送想配什么参数就配什么参数。
func onRCIMCustomLocalNotification(_ message: RCMessage!, withSenderName senderName: String!) -> Bool {
if let msg = message.content as? RCTextMessage{
if msg.extra != "" && msg.extra != "3" && msg.extra != "2" && msg.extra != "1"{
let rcDic = [
"tId": message.targetId ?? ""
] as [String:Any]
addNotification(titleString: senderName, bodyString: msg.content, rcUserInfo: rcDic, appData: getDictionaryFromJSONString(jsonString: msg.extra))
return true
}else{
return true
//返回true的时候,不再本地弹窗
}
}else{
return false
}
}
/** 添加创建并添加本地通知 */
func addNotification(titleString: String, bodyString: String, rcUserInfo: [String:Any], appData: [String:Any]) {
//设置推送内容
let content = UNMutableNotificationContent()
content.title = titleString
content.body = bodyString
content.userInfo = [
"rc": rcUserInfo,
"appData":appData
]
//设置通知触发器
//设置请求标识符
let requestIdentifier = "com.customRC.RCNotification"
//设置一个通知请求
let request = UNNotificationRequest(identifier: requestIdentifier,content: content, trigger: nil)
//将通知请求添加到发送中心
UNUserNotificationCenter.current().add(request) { error in
if error == nil {
print("Time Interval Notification scheduled: \(requestIdentifier)")
}
}
}