推送通知Json中“内容可用”的目的?

时间:2015-01-05 10:31:00

标签: ios push-notification apple-push-notifications silent-notification

目的是发送仅带徽章价值的推送通知。没别的(没有横幅)。

我将解析sdk集成到测试推送通知&发送此推送通知

{
"alert" :"",
"badge" :"787",
"Content-available" : "1",
"sound" : ""
}

因此当应用程序处于后台,前台和后台时,推送通知已发送当应用程序被杀死。 用徽章阀78在推送通知到达时擦除一些数据的目的成功。 我发送了与“Content-available”相同的通知:删除了“1”,但是之前一切正常。

我对“内容可用”的理解是,将其值设置为1将允许推送通知而没有警报值。

所以我很困惑,或者我想知道这个推送通知JSon中“Content-available”的含义。

由于

3 个答案:

答案 0 :(得分:7)

如果您为此键提供值1(如果用户打开,您的应用处于后台或已恢复),则会调用application:didReceiveRemoteNotification:fetchCompletionHandler:

根据RemoteNotifications Programming content-available定义是

  

为此键提供值1以指示新内容   可用。包含此键和值意味着您的应用是   在后台发布或恢复,   application:didReceiveRemoteNotification:fetchCompletionHandler:is   调用。

     

(报亭应用程序保证能够至少接收一次推送   每24小时窗口使用此键。)

答案 1 :(得分:2)

简短的回答:对我来说,我只是使用“ content_available”:“ 1” “ content_available”:true 在iOS中恢复后台/退出模式。请注意,在我的情况下,它是下划线而不是连字符。

在我的特定情况下,我的应用是使用react-native开发的,并且我已经使用https://rnfirebase.io进行推送通知

这里有一个完整的解释: https://rnfirebase.io/messaging/usage#data-only-messages

在IOS中

content_available”:“ 1

在Android中等效 优先级:“高”,

在这两种情况下,当应用程序从后台恢复时,后台消息都会调用onMessage()方法,因此程序可以从那里运行一些特定的代码。

以下是使用CURL发送推送通知的示例:

#curl -H“内容类型:application / json” -H“ Authorization:key =#MyAuthHashCode#” -X POST -d'{“ to”:“ / topics /#thetopicnumber#”,“ notification” :{“ title”:“主题的味精”,“ body”:“ bodytext”,“ content_available”:“ true”}}'https://fcm.googleapis.com/fcm/send

答案 2 :(得分:2)

TL;博士:

  • "content-available" : 0:默认;您的应用不会收到发送通知的通知除非应用在前台。
  • "content-available" : 1:如果您的应用程序在前台或后台(应用程序将被唤醒)。

您唯一需要使用 "content-available" : 1 的时间是 background update notifications

<块引用>

后台更新通知为您提供了一种定期唤醒应用的方式,以便它可以在后台刷新其数据,从而改善用户体验。当应用程序长时间不运行时,它们的数据可能会过时。当用户最终再次启动应用程序时,必须替换过时的数据,这会导致应用程序的使用延迟。后台更新通知可以提醒用户,也可以静默发生。

但是,这并不总是意味着此通知对用户不可见

<块引用>

如果有用户可见的更新伴随后台更新,您可以根据需要在 aps 字典中设置警报、声音或徽章键。

默认情况下,"content-available" 设置为 0。这些“常规”通知不会立即通知应用程序,除非应用程序处于前台。相反,这些“常规”通知通过通知上的“Haptic Touch”通知应用when a user taps on them or has selected an option

后台更新通知发送至application(_:didReceiveRemoteNotification:fetchCompletionHandler:)

<块引用>

与仅在您的应用在前台运行时调用的 application(_:didReceiveRemoteNotification:) 方法不同,当您的应用在前台或后台运行时,系统会调用此方法。

注意:“您的应用程序”和“设备”之间有一个关键区别:如果有效负载请求显示通知,设备将显示通知,但这并不总是意味着“您的应用程序”将在传递此通知时收到通知(即“您的应用程序”代码将运行)。这就是 "content-available": "1" 的用武之地:“您的应用程序”将始终收到通知,除非它被终止。