CloudKit からサイレント プッシュを取得しようとしています。ただし、アプリがフォアグラウンドにある場合にのみ機能します (または、Xcode から起動された場合、その場合、通知もバックグラウンドで配信されます)。
対応するすべてのバックグラウンド モードを有効にしました。
remoteNotifications に登録され、didFinishLaunchingWithOptions でバックグラウンド fetchInterval が指定されました
UIApplication.sharedApplication().setMinimumBackgroundFetchInterval(UIApplicationBackgroundFetchIntervalMinimum)
application.registerForRemoteNotifications()
ここでは問題なくdidRegisterForRemoteNotificationsWithDeviceTokenを取得 しています。
remoteNotifications を処理するメソッドを実装しました。
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 コンテナーを Production に切り替えて、TestFlight でテストしてみました。結果は常に同じです:フォアグラウンドではCKNotificationsを取得していますが、コンソールのバックグラウンドでは次のように表示されます:
エラー: apsd[81]: サイレント プッシュ: 拒否アプリは利用できません
さらに私は試しました: コンテナを完全に変更する - 運が悪い。
それに応じてAppIDも編集しましたが、CloudKit通知には必要ないと思います(またはそうですか?):
デバイスから起動したときのコンソール出力 ( Xcode からではありません)
アプリの実行中のバックグラウンド:
Xcode から開始すると、バックグラウンドとフォアグラウンドで通知を受け取ります。