Apple推送通知设置远程通知方法会覆盖其他方法

时间:2015-04-25 18:57:19

标签: ios apple-push-notifications

我已使用

方法为Remote Notifications正确设置了我的应用

func application(application: UIApplication, didReceiveRemoteNotification userInfo: [NSObject : AnyObject], fetchCompletionHandler completionHandler: (UIBackgroundFetchResult) -> Void)

并且每次应用收到Apple Push Notification时都会正确处理。

但我的问题是现在所有情况都会调用此方法。

didFinishLaunchingWithOptions似乎不再被召唤了?或者launchOptions是空的?

基本上我使用didReceiveRemoteNotification作为catch all来处理任何传入的通知,这是我的预期目的,但是当我点击通知本身时,它再次触发didReceiveRemoteNotification。因此处理通知两次,这是我不想要的。

所以这就是我希望我的应用处理通知的方式:

  • 如果收到通知,则希望在后台自动处理通知
  • 当用户点击来自外部应用的通知时,运行与didReceiveRemoteNotification
  • 不同的方法
  • 当用户在应用内部时,运行与其他方法不同的方法

1 个答案:

答案 0 :(得分:2)

Apple不允许你想要的东西。推送通知按以下方式工作

1)当应用程序未运行且用户单击通知时,将启动应用程序,并在函数 didFinishLaunchingWithOptions 中加载通知的有效负载。

2)当应用程序在后台运行,并且用户单击通知时,应用程序将变为活动状态并调用函数 didReceiveRemoteNotification 。现在,此函数包含通知的有效负载。

3)当应用程序运行并调用推送通知时,将调用函数 didReceiveRemoteNotification ,并且此函数包含通知的有效负载。

4)当应用程序在后台运行或处于非活动状态且收到通知时,在用户单击通知之前无法对通知执行任何操作