0

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 から開始すると、バックグラウンドとフォアグラウンドで通知を受け取ります。

4

1 に答える 1

0

アプリケーションを強制終了すると、iOS はバックグラウンドでアプリへのプッシュ通知の配信を停止します。Xcode からアプリを実行していて終了したい場合は、デバイスのアプリ スイッチャーから上にスワイプするのではなく、Xcode からプロセスを「停止」してください。

サイレントプッシュ通知を再び機能させるには、電話を再起動する必要があるかもしれません.

于 2015-07-24T10:16:57.377 に答える