【问题标题】:Notification from FCM is sometimes displayed in iOS notification tray来自 FCM 的通知有时会显示在 iOS 通知托盘中
【发布时间】:2017-04-23 20:43:14
【问题描述】:

我正在开展一个项目,我们使用 Firebase Cloud Messaging 进行推送通知。以下 JSON 目前正在由后端 API 生成并发送到 FCM:

{
  "priority": "normal",
  "delay_while_idle": true,
  "dry_run": false,
  "time_to_live": 3600,
  "notification": {
    "body_loc_key": "MyCustomNotificationId"
  },
  "data": {
    // contains notification data
  },
  "registration_ids": [

  ]
}

此通知应该是静默的,这意味着它应该仅在 iOS 应用程序处于前台时才收到,但有时在某些设备上,此通知也会进入 iOS 通知托盘,而应用程序处于后台,就好像它一样有参数要显示在那里。

我发现 body_loc_key 属性必须存在于 iOS 设备上,否则无论应用程序是在前台还是后台,通知都不会到达设备。

问题出现在以下设备上:

  • 苹果 iPhone 5,
  • 苹果 iPhone 6,

其他人也可能受到影响。

您成功使用的发送到 FCM 的 JSON 是否有不同的配置,其中通知仅在应用程序处于前台时发送到设备?

【问题讨论】:

    标签: ios firebase-cloud-messaging


    【解决方案1】:

    您的通知以 display-message 而不是 silent-message 形式发送的原因是因为您使用的是notification 有效负载。
    特别是您使用的是body_loc_key

    您写道,您读到body_loc_key 需要发送静默消息。
    这不是真的。 你能链接你找到这个的页面吗?

    【讨论】:

    • notification 有效负载为空时,通知永远不会到达设备。根据我们的测试,它必须包含一些内容。
    【解决方案2】:

    在摆弄 FCM 负载一段时间后,我们发现问题实际上一直是 body_loc_key 属性。

    为了使通知静音并仍发送到苹果设备,有效负载必须满足以下条件:

    • priority 必须设置为normal
    • content_available 必须设置为true
    • notification 属性必须包含数据,但如果它包含 body_loc_key 属性,则它必须设置为空字符串 - ""

    工作负载示例:

    // Example one
    {
      "priority": "normal",
      "delay_while_idle": true,
      "dry_run": false,
      "time_to_live": 3600,
      "content_available": true,
      "notification": {
        "body_loc_key": ""
      },
      "data": {
        // contains notification data
      },
      "registration_ids": [
      ]
    }
    
    // Example two
    // (note that body_loc_key has been replaced with badge)
    {
      "priority": "normal",
      "delay_while_idle": true,
      "dry_run": false,
      "time_to_live": 3600,
      "content_available": true,
      "notification": {
        "badge": 10
      },
      "data": {
        // contains notification data
      },
      "registration_ids": [
      ]
    }
    

    body_loc_key 更改为空字符串几乎可以解决问题。除此之外,我们还发现了notification属性的other属性如下:

    • badge 可能存在并正在处理,通知保持沉默,
    • title_loc_key 无效,通知保持沉默,
    • body_loc_args 无效,通知保持沉默。

    所有三个新增内容都适用于满足先例条件的场景(空 body_loc_key 如果/当存在等)。

    【讨论】:

    • 如果您决定否决答案,请提供反馈。我为我遇到的问题提供了一个实际的解决方案,与其他答案不同,不知道这里有什么问题。
    猜你喜欢
    • 2021-05-07
    • 1970-01-01
    • 2023-03-15
    • 1970-01-01
    • 2017-05-18
    • 1970-01-01
    • 1970-01-01
    • 2017-08-28
    • 1970-01-01
    相关资源
    最近更新 更多