来自FCM的通知有时会显示在iOS通知栏中

时间:2016-12-08 14:54:07

标签: ios firebase-cloud-messaging

我正在开展一个项目,我们正在使用Firebase Cloud Messaging进行推送通知。后端API当前正在生成以下JSON并发送到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通知托盘,应用程序位于后台,就好像它一样有参数在那里显示。

我发现iOS设备必须存在body_loc_key属性,否则无论应用程序位于前台还是后台,通知都无法访问设备。

以下设备出现问题:

  • Apple iPhone 5,
  • Apple iPhone 6,

也可能会有其他人受到影响。

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

2 个答案:

答案 0 :(得分:0)

在使用FCM有效负载进行sime时间之后,我们发现问题实际上是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等)。

答案 1 :(得分:-1)

您的通知以显示消息而非无声消息的形式发送的原因是您使用notification有效负载。
特别是您正在使用body_loc_key

您写道,您认为发送无声消息需要body_loc_key 这不是真的。 您能否链接到您找到此页面的页面?