我正在尝试从 CloudKit 获得静默推送。但它仅在我的应用程序在前台时才有效(或者当它从 Xcode 启动时,在这种情况下通知也在后台传递)。
我已经启用了所有相应的背景模式。
注册 remoteNotifications 并在didFinishLaunchingWithOptions中指定后台 fetchInterval
UIApplication.sharedApplication().setMinimumBackgroundFetchInterval(UIApplicationBackgroundFetchIntervalMinimum)
application.registerForRemoteNotifications()
我在这里得到 didRegisterForRemoteNotificationsWithDeviceToken没有问题。
我已经实现了处理远程通知的方法:
func application(application: UIApplication, didReceiveRemoteNotification userInfo: [NSObject : AnyObject], fetchCompletionHandler completionHandler: (UIBackgroundFetchResult) -> Void) {
NSLog(__FUNCTION__)
let identifier : UIBackgroundTaskIdentifier = UIApplication.sharedApplication().beginBackgroundTaskWithExpirationHandler(){
}
CoreDataStack.sharedInstance.ensemblesSynchronizeWithCompletion(){
UIApplication.sharedApplication().endBackgroundTask(identifier)
completionHandler(UIBackgroundFetchResult.NewData)
}
}
我尝试将 CloudKit 容器切换到生产环境并使用 TestFlight 进行测试。结果总是相同的:在前台我收到 CKNotifications,但对于控制台中的背景,我看到了这个:
错误:apsd [81]:静默推送:拒绝应用程序不可用
此外,我尝试过:完全更换容器 - 不走运。
我也相应地编辑了我的 AppID,但我认为 CloudKit 通知没有必要(或者是吗?):
从设备启动时的控制台输出(而不是从 Xcode)
应用运行后台:
从 Xcode 开始时,我会在后台和前台收到通知。