从Firebase remotemessage中的嵌套JSON中提取数据



我正在Swift开发一个消息传递应用程序。我配置了firebase云消息传递,它有效,数据到达我的手机。

func messaging(_ messaging: Messaging, didReceive remoteMessage: MessagingRemoteMessage) {
    print(remoteMessage.appData)
}

问题是,我不知道如何提取每个值。这是我从服务器收到的输出的一个示例。

[AnyHashable("message"): {"chat":{"msg":"hey","file":null,"to":"username","date":"2019/03/06 08:17:42","group":"TESTING","from":"User Real Name","res":"1"}}, AnyHashable("from"): 123123123]

我尝试将其读为JSON,但它不起作用。

let data = try? JSONSerialization.data(withJSONObject: remoteMessage.appData["message"]
if let messageJSON = try? JSONSerialization.jsonObject(with: data!) as? [String : Any] {
    print(messageJSON
    if let chatJSON = messageJSON["chat"] as? [String : Any] {
        print(chatJSON)
    }
}

它在第一行中给了我这个错误。

*终止由于未知的异常'NSInvalidArgumentException',原因:'* [nsjsonserialziation datawithjsonobjectiond

我遵循了这篇文章的建议,但也没有运气。

let d: [String : Any] = remoteMessage.appData["message"] as! [String : Any]
let body: [String : Any] = d["chat"] as! [String : Any]
let msg: String = body["msg"] as! String
print(msg)

无法将" __nscfstring"类型的价值投射为'nsdictionary'(0x1E0E53BC0)。

您需要

do {
  let d  = remoteMessage.appData["message"] as! String
  let res = try JSONDecoder().decode(Root.self,from:Data(d.utf8)) 
  print(res)
}
catch {
 print(error)
}

struct Root: Codable {
    let chat: Chat
}
struct Chat: Codable {
    let msg: String
    let file: String?
    let to, date, group, from: String
    let res: String
}

作为 message键包含一个json字符串,而不是字典

相关内容

  • 没有找到相关文章

最新更新