解析到 Firebase 增强的推送通知

Posted

技术标签:

【中文标题】解析到 Firebase 增强的推送通知【英文标题】:Parse to Firebase enhanced push notifications 【发布时间】:2017-01-23 20:33:02 【问题描述】:

我正在将 Parse 迁移到 Firebase,但在使用增强型推送通知时遇到了问题。

解析数据(ios 端)是这样的:

"ast":
  "alert": 
    "body": "body_test",
     "title": "title_test",
     "description": "description",
     "endpoint-proposal": "https://.."
     "launch-image": "https://..."
  ,
  "sound": "chime",
  ... 

使用 Firebase API,ast 标签是 ['notification']['body']

如果我发送

['notification']['body'] = 'Hello' 

它完美运行并生成以下推送:

"ast":
  "alert": "Hello"
...

所以,问题来了,我需要在该标签中发送一个字典(警报),但我不能这样做,因为 firebase 将值设置为字符串。

python中的示例:

alert = dict()
alert['title'] = 'title'
alert['description'] = 'description'
alert['endpoint-proposal'] = 'https://..'
alert['launch-image'] = 'https://..'

fcm_payload['notification']['body'] = alert 

send_push()

在 iOS 端我得到:

[AnyHashable("gcm.message_id"): 0:123456789,
 AnyHashable("aps"): 
    alert = "\"body\": \"body\",
              \"launch-image\": \"https://...\",
              \"endpoint-proposal\": \"https://...\",
              \"description\": \"description\",
              \"title\": \"title\"";
]

始终作为字符串 :S

有没有办法将警报作为字典发送?

【问题讨论】:

【参考方案1】:

notificationbody 参数将始终被 FCM 视为String。这只是行为。您需要做的是利用 data 有效负载并放入您的自定义键值对:

在 iOS 上,如果消息是通过 APNS 发送的,它代表自定义数据字段。如果通过 FCM 连接服务器发送,则在 AppDelegate application:didReceiveRemoteNotification: 中表示为键值字典。

更多细节可以在这个Receiving Messages in iOS 文档中看到。我认为对于您的情况,您只需在有效负载中同时使用 notificationdata 参数即可。

【讨论】:

【参考方案2】:

json.loads() 应该给你一个字典。

【讨论】:

已经测试过了。无论如何,它总是将值设置为字符串。

以上是关于解析到 Firebase 增强的推送通知的主要内容,如果未能解决你的问题,请参考以下文章

解析服务器中的推送通知

安装 firebase 后生成推送通知

从 Apple 推送通知中解析数据

Firebase 会惩罚失败的推送通知吗?

Firebase 推送通知不适用于试飞

Firebase 推送通知 [重复]