如何在快速接收推送通知时进行服务器调用?

Posted

技术标签:

【中文标题】如何在快速接收推送通知时进行服务器调用?【英文标题】:How to make a server call on receiving push notification in swift? 【发布时间】:2017-05-29 10:18:41 【问题描述】:

我正在开发一个像whatsapp这样的信使应用程序,它必须通知服务器收到消息,当didReceiveRemoteNotification被调用时,我将状态发送到服务器。但是当应用程序不在前台时,它只会在用户点击通知时调用。即使应用处于后台或未运行,如何进行服务器调用?

【问题讨论】:

看看这篇文章。可以给个思路。 developer.apple.com/library/content/documentation/iPhone/… 【参考方案1】:

要在您的应用程序处于后台或挂起模式时首先接收远程通知,您的服务器应在通知负载中发送名为 content-available = 1 的特殊参数。要了解更多信息,请查看文档:https://developer.apple.com/library/content/documentation/NetworkingInternet/Conceptual/RemoteNotificationsPG/PayloadKeyReference.html#//apple_ref/doc/uid/TP40008194-CH17-SW5

在项目设置中也开启这个开关:

使用此参数,当您的应用收到推送通知时,它会在一小段时间被唤醒到后台模式并调用didReceiveRemoteNotification。不要忘记在任务结束时调用completionHandler(<some enum parameter>),否则您的进程可能会被 ios 意外终止,例如当您尝试执行异步服务器请求时。所以当你的异步方法完成调用didReceiveRemoteNotificationcompletionHandler闭包参数时。

实际上,当您的应用完全脱离应用切换器时,无法运行托管代码。据我所知,您应该使用 VOIP 推送消息 - 但这种消息仅适用于具有语音呼叫的应用程序,例如 Skype 或 WhatsApp。即使完全关闭,这类应用程序也有一些代码要执行。 iOS 为他们提供了准备语音通话的能力。这就是所有这些信使都使用语音呼叫的原因——例如,即时交付状态。如果你想要这种互动,你应该在谷歌上搜索更多关于 VOIP 的信息。但是你的应用确实应该有语音通话功能,否则会被应用商店拒绝。

【讨论】:

如果应用程序开关强制退出应用程序,您将无法在重新启动应用程序之前收到通知时运行代码。

以上是关于如何在快速接收推送通知时进行服务器调用?的主要内容,如果未能解决你的问题,请参考以下文章

谷歌推送通知未到达应用程序

如何快速刷新 Firebase 推送通知

如何在接收基于 Flutter 构建的 FCM 推送通知时修复应用程序崩溃

在用户授予接收推送通知的权限时未调用 didRegisterForRemoteNotificationsWithDeviceToken

在 Whatsapp 或 Viber 上接收推送通知即时消息

在接收推送通知时获取数据 - ionic3