如果应用程序在后台和/或应用程序位于前台,我的应用程序可以正常使用推送通知.
我遇到的问题是如果应用程序被终止(我强制双击主页按钮,找到应用程序,然后向上滑动).
我正在使用ios 9和swift 2.
在app delegate中,didFinishLaunchingWithOptions,我这样做:
let settings = UIUserNotificationSettings(forTypes: [.Alert, .Badge, .Sound], categories: nil) application.registerUserNotificationSettings(settings) application.registerForRemoteNotifications()
然后:
func application(application: UIApplication, didRegisterUserNotificationSettings notificationSettings: UIUserNotificationSettings) { application.registerForRemoteNotifications() }
其次是didRegisterForRemoteNotificationsWithDeviceToken&didFailToRegisterForRemoteNotificationsWithError.
然后,我使用相对较新的方法:
func application(application: UIApplication, didReceiveRemoteNotification userInfo: [NSObject : AnyObject], fetchCompletionHandler completionHandler: (UIBackgroundFetchResult) -> Void) {...}
根据文档和这个链接,与旧版本相反,didReceiveRemoteNotification
如果应用程序被终止,则会调用此方法(与调用will/doneLaunchingWithOptions相反).
但是,如果有一个推(已收到 - 我可以在屏幕上看到它)并且我终止后启动应用程序,这个方法似乎不会被称为处理推送的代码(只需发布一个通知所以它被相应的ViewController拾取)不会被调用.
我错过了什么?我需要在didFinishLaunchingWithOptions中进行额外的检查吗?别的地方?