【问题标题】:FCM Server side differentiate between iOS and AndroidFCM 服务器端区分 iOS 和 Android
【发布时间】:2020-09-13 11:50:39
【问题描述】:

我正在从我的服务器发送推送通知(发送到 firebase 令牌而不是主题)。我不区分平台,服务器只是通过 RestTemplate (Spring Boot App) 发送 JSON。

如果我为 Android 准备它,它可以工作,但它不适用于 iOS。但如果我为 iOS 准备它,它不适用于 Android。

情况是:我想要通知和后台进程(它应该在任何情况下都显示通知前台/后台/已终止,并且它应该从数据负载中获取键值对)。

问题是:如果我在 JSON 中使用 notification,通知将显示在 iOS 和 Android 上,但只有 iOS 可以处理有效负载(处于前台/后台/已终止状态)。如果我删除 JSON 中的 notification 标记,那么一切正常(Android 和 iOS 接收所有状态的有效负载,但 iOS 不显示通知)。

在 Android 中,您可以构建通知客户端(像我一样),但在 iOS 中这是不可能的。

那么,我如何发送带有 firebase-token 的 FCM (JSON) 并且它是独立于平台的?两者都可以正确处理它,都接收有效负载并显示消息,并且有效负载应在每个状态下处理。

这适用于 android 并显示消息(内置客户端)但不适用于 iOS

{
   "content_available": true,
   "data":{
        "action":"bla",
        "value":"true",
        "id":"111111"
   },
   "android":{
      "priority":"high"
   },
   "apns":{
      "headers":{
         "apns-priority":"10"
      }
   },
   "to":"<MY_FCM_TOKEN>"
}

这会显示适用于 android 和 iOS 的 FCM,但仅在 iOS 上处理有效负载

{
   "notification":{
      "sound":"default",
      "title":"Test Title",
      "body":"Message of FCM"
   },
   "content_available": true,
   "data":{
        "action":"bla",
        "value":"true",
        "id":"111111"
   },
   "android":{
      "priority":"high"
   },
   "apns":{
      "headers":{
         "apns-priority":"10"
      }
   },
   "to":"<MY_FCM_TOKEN>"
}

或者是否可以只为 iOS 声明通知标签? 或者是否可以在收到有效负载时在 iOS 客户端创建通知?

【问题讨论】:

  • 您找到解决方案了吗?
  • @VadimF。不,我没有找到解决方案

标签: android ios json server firebase-cloud-messaging


【解决方案1】:

在服务器端发送通知之前,我正在使用 google 的方法检查平台是 iOS 还是 Android:

https://iid.googleapis.com/iid/info/IID_TOKEN

成功时返回带有“平台”参数的 JSON。 你可以找到更多信息here

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-10-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-12-10
    • 1970-01-01
    相关资源
    最近更新 更多