在寫下我的原始問題時,我在Ray Wenderlichs tutorial的推送通知中找到了答案。在第Handling Push Notifications
部分,我將代碼添加到AppDelegate.swift中,如第一種情況所述。Apple的遠程推送通知在沙盒和生產模式下表現出不同
if let notification = launchOptions?[UIApplicationLaunchOptionsRemoteNotificationKey] as? NSDictionary {
updateFromSyncData(userInfo: notification)
}
這種變化之後,我可以顯示從Push消息中的生產模式下的文本,而應用程序是無效的。
在我加入而應用程序是活躍的和無活性在沙箱模式的有效載荷上面的代碼將被處理,但是僅當它在生產模式活性。
當我注意到這個時,我改變了代碼,並測試了我的iphone連接(在沙箱模式下)。當它工作時,我將其歸檔,上傳並從testflight重新安裝應用程序。我在這個圈子裏漫遊了幾次。
沙箱和生產設計之間的行爲差異?
我在Xcode中8的測試版5使用SWIFT 3和iPhone iOS上10測試6.
AppDelegate.swift:
func application(_ application: UIApplication, didReceiveRemoteNotification userInfo: [NSObject : AnyObject], fetchCompletionHandler completionHandler: (UIBackgroundFetchResult) -> Void) {
if (application.applicationState == .inactive) {
completionHandler(.newData)
updateFromSyncData(userInfo: userInfo)
}
if (application.applicationState == .active) {
completionHandler(.newData)
updateFromSyncData(userInfo: userInfo)
}
if (application.applicationState == .background) {
completionHandler(.newData)
updateFromSyncData(userInfo: userInfo)
}
}
func updateFromSyncData(userInfo: NSDictionary) -> Void {
if let aps = userInfo["aps"] as? NSDictionary {
let tabbarController = self.window!.rootViewController as! UITabBarController
let sVC = tabbarController.viewControllers?[1] as! SecondViewController
// Show payload in SecondViewController etc.
}
}
謝謝。我遵循了你的建議#1,並改變了順序並在函數之後調用了completionhandler。這解決了我的問題。 – kometen