在后台接收推送通知 iOS

Posted

技术标签:

【中文标题】在后台接收推送通知 iOS【英文标题】:Receiving push notifications in background iOS 【发布时间】:2014-04-01 15:18:45 【问题描述】:

我正在开发一个从 Zenpush 服务接收推送通知的应用程序。我设法在 Zenpush 上设置了应用和帐户来发送和接收通知。

当应用程序处于活动状态(打开)并且我收到通知时 - 一切正常。我在application:didReceiveRemoteNotification: 处理这个。

此外,当用户在通知到达时点击通知或从通知中心打开应用程序时,我可以处理通知。

问题是 - 如果应用程序在后台或已终止,我将无法处理通知。 我已经为此苦苦挣扎了一个星期。 我在后台模式中启用了后台获取远程通知。 在方案中,我检查了“由于后台获取事件而启动”。 根据 Apple 文档和我在 *** 上发现的内容,我使用以下方法在后台处理通知:application:didReceiveRemoteNotification:fetchCompletionHandler:

无论我发送什么通知,都不会调用此方法。我试图通过更改一些数据并尝试 NSLog 来确定这一点。

https://devforums.apple.com/message/873265#873265

我在通知中包含 "content-available": 1。

我还有什么遗漏的吗?或者也许有一种方法可以在应用程序处于后台/终止应用程序激活时接收到的所有通知?

【问题讨论】:

相关:***.com/q/19068762/2446155 当应用程序在 background 中时,您应该能够通过该方法处理通知,而不是在 终止 时(通过向上滑动在应用切换器中) @SantaClaus 我尝试使用您提到的相关问题中的代码。但应用仍然没有对通知做出反应。 尝试在您的方案中取消选中“由于后台提取事件而启动”。这是一个调试功能,旨在模拟由于后台提取而启动,但您想使用正常启动进行测试。 【参考方案1】:

仍然无法让应用调用application:didReceiveRemoteNotification:fetchCompletionHandler: 我决定调试我从 Zenpush 收到的确切信息。 事实证明,使用他们的自定义有效负载部分添加 content-available 不是正确的方法。 这样content-available 被添加到asp 对象之后,而不是在它里面。

我写信给 Zenpush 支持,如果我得到任何关于如何在 asp 中发送 content-available 的信息,我将编辑这个答案

更新:

我收到了 Zenpush 支持的回复。此功能现已测试,即将推出。

更新 2:

Zenpush 为后台服务添加了一个复选框,现在它可以正常工作了。

【讨论】:

我也在使用相同的场景,但我使用的是 FCM。我也像你一样被困在我点击通知消息之前无法打开推送通知。您对如何使用 FCM 解决此问题有任何想法吗?

以上是关于在后台接收推送通知 iOS的主要内容,如果未能解决你的问题,请参考以下文章

在 ios 中接收推送通知时后台执行不起作用

在后台推送 iOS 通知

当应用程序处于后台时接收 Apple 推送通知

iOS应用后台主题推送通知

在后台处理应用程序时的 iOS 推送通知

如何在前台 iOS Swift 3.0 中接收推送通知?