0

我的应用程序使用Apple推送通知服务。当我的应用程序不在前台,并且如果我收到推送通知,通知将显示在通知标题中。当我们点击该通知时,应用程序将恢复并执行application:didReceiveRemoteNotification:方法的一些代码行。如果用户没有在横幅中看到此通知,并且通过其图标直接启动应用程序,则不会调用application:didReceiveRemoteNotification:方法。那么,我该如何执行这些代码行呢?无论App的状态如何,我都需要在App收到通知时立即执行这些代码行。怎么可能?在后台执行响应推送通知 - ios

回答

2

对此的简短回答是,您至少不能使用推送通知服务。如果用户没有通过点击通知来打开应用程序,您将看不到接收到的通知(如果有)。

有几件事你可以尝试。

  • 如果你的推送通知还增加应用程序图标徽章数量,你可以访问,使用[UIApplication sharedApplication].applicationIconBadgeNumber。如果这个数字不是0,它就会告诉你接收到了多少个推送通知(但是如果你有不同的推送通知,则不会收到)。记得在适当的时候清除这个数字。

  • 如果您使用的是后端服务,您还可以跟踪推送通知已发送到哪一端,并在您的应用程序变为活动状态时请求该信息。

这里的正确答案,虽然可能是返工你是如何架构的应用程序,所以这不是必须的,而不是只刷新需要的任何数据被刷新,当你的应用程序变得活跃,无论一个推送通知收到与否。

1

UIApplicationDelegate协议中有application:didFinishLaunchingWithOptions:

如果您的应用程序是由用户点击的提示中的右键点击推送通知,绑定到方法调用的字典将包含有关该通知的信息;

如果你的应用程序已经在运行,那么application:didReceiveRemoteNotification:(也在委托协议中)将被调用。

+0

这在技术上是正确的,但不回答他所问的问题。 – Dima

0

直到除非您单击通知,否则应用程序都不会知道收到通知。因此,为该代码块创建一个单独的方法,并从 应用程序中调用它:didReceiveRemoteNotification:

如果您使用徽章编号。将徽章号码保存在NSUserDefaults中,并从应用程序图标启动应用程序。比较徽章号码与前一次添加要从didFinishLaunchingWithOptions执行的区块: