Swift 融云推送AppData本地通知无法获取

1,383 阅读1分钟

遇到过一个很棘手的问题,融云推送一条消息后,客户端需要判断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)")
        }
    }

}