在后台处理远程通知

Posted

技术标签:

【中文标题】在后台处理远程通知【英文标题】:Handle Remote Notification in Background 【发布时间】:2014-03-14 14:33:53 【问题描述】:

这几天,我正在寻找这个问题的解决方案,最后在这里发布:

当我收到远程通知并忽略推送通知并通过单击应用程序图标启动应用程序时,将不会调用委托方法“didreceiveRemoteNotification”。有什么方法可以在应用启动时获取完整的通知负载字典。

任何帮助将不胜感激!

【问题讨论】:

***.com/questions/4295122/… 【参考方案1】:

没有。

您应该将通知详细信息存储在您的服务器上,并向服务器发出请求以获取待处理的详细信息(并更新已访问的详细信息)。

除非用户明确选择从那里打开应用程序,否则应用程序无法访问通知中心的通知。

【讨论】:

ios7多任务增强中,我们可以发送静默PN,通过为payload 1发送密钥“content-available”,这将使应用程序在BG中进行API调用,并调用新的delegate再次,当应用程序启动时,我们的问题似乎已经解决了,我们能否在设备下的 IOS7 中实现相同的功能。【参考方案2】:

在启动时,您将通过启动选项收到远程通知。在您的应用程序委托中,实现- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions,然后您可以检索与didReceiveRemoteNotification:(NSDictionary *)userInfo 相同的字典,如下所示:

if ([launchOptions objectForKey:UIApplicationLaunchOptionsRemoteNotificationKey]) 
    NSDictionary *userInfo = [launchOptions objectForKey:UIApplicationLaunchOptionsRemoteNotificationKey]];

    ...

【讨论】:

这一切都很好。但是当用户点击应用程序图标时,启动委托方法“didReceiveRemoteNotification:(NSDictionary *)userInfo”将不会被调用,那么我们将如何获取通知负载字典。 哦,我想我误会了。上面的答案是正确的,这是不可能的,您必须在服务器上创建某种未读通知数据库,当应用程序通过推送接收或从应用程序内手动获取时,应用程序需要明确标记为已读。

以上是关于在后台处理远程通知的主要内容,如果未能解决你的问题,请参考以下文章

远程通知的后台任务在片​​刻后暂停

在 ios 中处理远程通知接收

应用程序未运行时处理远程通知时崩溃

如何在IOS中处理多个远程通知点击

在后台模式下接收远程推送通知是不是可以多次振动?

远程通知不会在后台启动应用程序