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

我已经正确设置了Remote Notifications应用程序

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

并且每当应用程序收到Apple Push Notification时,它都会正确处理它。

但是我的问题是,这个方法现在在所有情况下都被调用。

didFinishLaunchingWithOptions似乎不被称为了? 或者launchOptions是空的?

基本上我使用didReceiveRemoteNotification作为捕获所有处理任何传入的通知,这是我的目的,但是当我单击通知本身时,它会再次触发didReceiveRemoteNotification 。 因此处理通知两次,这是我不想要的。

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

  • 任何时候收到通知,都想在后台自动处理通知
  • 当用户点击来自外部应用程序的通知时,运行与didReceiveRemoteNotification不同的方法
  • 当用户在应用程序内部时,运行与其他方法不同的方法

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

1)当应用程序没有运行,并且用户单击通知时,应用程序启动并且通知的有效载荷被加载到函数didFinishLaunchingWithOptions中

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

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

4)当应用程序在后台运行或处于非活动状态并收到通知时,用户单击通知之前,通知无法完成