IOS;当应用程序未运行或在后台时,推送通知不起作用

Posted

技术标签:

【中文标题】IOS;当应用程序未运行或在后台时,推送通知不起作用【英文标题】:iOS; Push notification is not work when the app is not running or in background 【发布时间】:2013-11-26 07:35:43 【问题描述】:

我在检测来自 APNS 的推送通知时遇到问题。

如果应用程序未运行或在后台时有来自 APNS 的推送通知,

- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo fetchCompletionHandler:(void (^)(UIBackgroundFetchResult))completionHandler

没用。

当我回到前台而不从通知中心选择推送通知消息时,它不起作用。

我该如何解决这个问题?

我正在 ios 6.13 和 iOS 7.0.4 中测试该应用。

感谢您的帮助。 :)

【问题讨论】:

您似乎还没有完全阅读文档护理。 developer.apple.com/library/ios/documentation/… 读取应用程序:didFinishLaunchingWithOptions: 首先确保APNS的基本设置.. 【参考方案1】:

实际上,通知的第一个接收者是系统,而不是你的应用程序。

如果您的应用不在前台,应用的application:didReceiveRemoteNotification:fetchCompletionHandler 将永远不会被调用,直到您点按通知以使您的应用再次进入前台。

当推送通知到达并且用户点击“cancel”时,your app has no way to read that push notification again。您必须实现一个单独的功能(很可能在 server-side 上)来获取发送到此设备的通知列表。

【讨论】:

如果系统在后台没有提醒我应用程序的通知怎么办?虽然application:didReceiveRemoteNotification:fetchCompletionHandler 在前台被调用。【参考方案2】:

来自 Apple 文档:

如果您的应用支持远程通知后台模式,请实现此方法。

这意味着您使用的方法专注于后台任务。并且仅在 iOS 7.0 之后可用。

我建议您使用application:didReceiveRemoteNotification:

来自 Apple 文档:

如果应用正在运行并收到远程通知,应用会调用此方法来处理通知。

【讨论】:

当应用程序不运行时,您是否可以正常工作。 ?我的意思是当应用程序处于非运行状态时如何处理推送通知?如果您收到许多通知并且您没有打开应用程序,也没有点击系统的通知面板怎么办。您如何保留这些推送以供以后检索。 @BalramTiwari,如果在应用程序未运行时收到应用程序通知,则设备会提醒用户该应用程序有数据等待它。如果用户不点击通知面板,您将一无所获

以上是关于IOS;当应用程序未运行或在后台时,推送通知不起作用的主要内容,如果未能解决你的问题,请参考以下文章

当应用程序在 iOS 中关闭且应用程序未在后台运行时从推送通知中获取数据

iOS 应用未收到来自 Firebase 的后台推送通知

当应用程序处于未运行或后台状态时,如何处理推送通知有效负载而不点击它

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

Flutter Firebase前台推送通知未显示但后台正在运行

应用程序在 iOS 11 中处于后台时未收到推送通知