You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Swift Firebase远程通知中如何访问AnyHashable类型的shipmentMessage数据

解决Firebase远程通知中shipmentMessage访问问题

问题原因

从你提供的通知数据可以看到,shipmentMessage对应的值是字符串类型,但你的代码错误地将其强转为[AnyHashable:Any]字典类型,导致类型转换失败,最终判断该字段为nil。

修正后的代码

if UIApplication.shared.applicationState == .active {
    print("ACTIVE< CHECK > SHIPMENT MESSAGE : : : : : : \(String(describing: userInfo["shipmentMessage"]))")
    
    // 合并guard判断,简化代码
    guard let arrAPS = userInfo["aps"] as? [String: Any],
          let arrAlert = arrAPS["alert"] as? [String: Any] else {
        return
    }
    
    // 正确识别shipmentMessage的字符串类型,同时判断内容非空
    if let shipmentMessage = userInfo["shipmentMessage"] as? String, !shipmentMessage.isEmpty {
        print("***********NOT NULL***************")
        let strTitle = arrAlert["title"] as? String ?? ""
        let strBody = arrAlert["body"] as? String ?? ""
        
        let alert = UIAlertController(title: strTitle, message: strBody, preferredStyle: .alert)
        alert.addAction(UIAlertAction(title: "Ok", style: .default) { action in
            print("OK Action")
        })
        self.window?.rootViewController?.present(alert, animated: true)
    } else {
        print("The shipmentMessage was null or empty")
    }
}

关键优化点

  • 类型匹配:将userInfo["shipmentMessage"]的转换目标改为String,与实际数据类型一致。
  • 严谨性:增加!shipmentMessage.isEmpty判断,确保只有非空的消息才触发弹窗。
  • 代码简洁:合并多个guard语句,减少嵌套层级。

内容的提问来源于stack exchange,提问作者rmr84

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.17 22:05:20