我正在尝试FCM消息服务。我已经完善了一切。当我从FCM收到消息时,我收到以下错误。我不确定这里有什么问题:
AnyHashable("google.c.a.c_id"): 1586592282379086000, AnyHashable("gcm.message_id"): 0:1515418580276498%f4373656f4373656]
Could not cast value of type '__NSCFString' (0x1b4c70040) to 'NSDictionary' (0x1b4c70b80).
2018-01-08 19:06:21.198548+0530 Ozone[1067:540436] Could not cast value of type '__NSCFString' (0x1b4c70040) to 'NSDictionary' (0x1b4c70b80).
奇怪的是,我创建了一个单独的推送通知应用程序,并使用相同的代码,它正在那里工作。这可能有什么问题?
这是片段代码:我在let d中遇到错误:[String:Any] ..... line
UNNotificationPresentationOptions) -> Void) {
print("Handle push from foreground\(notification.request.content.userInfo)")
let dict = notification.request.content.userInfo["aps"] as! NSDictionary
let d : [String : Any] = dict["alert"] as! [String : Any]
let body : String = d["body"] as! String
let title : String = d["title"] as! String
print("Title:\(title) + body:\(body)")
self.showAlertAppDelegate(title: title,message:body,buttonTitle:"ok",window:self.window!)
}
有人可以帮助我吗?我知道这是非常普遍的错误,但不确定为什么会这样,因为它在另一个应用程序中正常工作。
谢谢!
答案 0 :(得分:1)
alert
键可以是字符串或字典(取决于您的服务器)。你可以试试这个。
if let dict = notification.request.content.userInfo["aps"] as? [String : Any] {
if let d = dict["alert"] as? [String : Any],
let body = d["body"] as? String,
let title = d["title"] as? String {
print("Title:\(title) + body:\(body)")
} else if let body = dict["alert"] as? String {
print("body:\(body)")
}
}
此外,你应该避免使用强制转换,不要在swift中使用NSDictionary
。