4

初めて電話をかけるとregisterForRemoteNotificationTypes、ユーザーは、このアプリケーションがプッシュ通知を送信できるようにすることに関するシステム プロンプトを受け取ります。UIApplication彼らが「はい」と言った場合didRegisterForRemoteNotificationsWithDeviceToken、アプリデリゲートで呼び出されます。彼らがノーと言えば、呼ばれdidFailToRegisterForRemoteNotificationsWithErrorませ。彼らがその最初のプロンプトにノーと言ったら、将来再登録しようとしてもコールバックを受け取りません.

これは標準的な動作ですか?彼らがそのプロンプトを拒否したことを知る最善の方法は何ですか? これに関する Apple のドキュメントには、このシナリオについて有益なことは何も書かれていません。

4

1 に答える 1

14

どのオプションを選択するかというユーザーの決定は、使用されるコールバックには影響しません。ユーザーが「いいえ」と言った場合でも、ユーザーのデバイス トークンは正常に取得されます。引き続きこのデバイスにプッシュ通知を送信することができ、Apple のフィードバック サービスはそれらが配信されたことを報告します (つまり、フィードバック サービスは、購読を解除したことを通知しません)。「いいえ」を押した場合の唯一の効果は、特定のアプリのデバイスに送信されたプッシュ通知を「非表示」にすることです。

この設計上の決定により、ユーザーは [設定] -> [通知] に移動してこの決定を覆し、アプリのプッシュ通知を再度有効にして、アプリまたは OS から特別な再登録ロジックを必要とせずにプッシュ通知を受け取ることができます。

編集 (iOS7): この動作は iOS 5 で確認されました。iOS 7 で再度テストしたところ、「許可しない」を押した後にデバイス トークンを受け取りませんでした。[設定] > [通知] > [MyApp] にアクセスして通知を有効にしたのは一度だけで、デバイス トークンを取得しました。

編集 (iOS8): iOS 8 通知設定はリモート通知から分離されていますが、動作は iOS 7 に似ています。通知がアプリに対して承認されるまで、デバイス トークンを取得しないようです。私がテストしている私のアプリでは、リモート通知のバックグラウンド モード機能が有効になっていませんが、アプリで有効になっている場合は、通知が有効になっていない場合でもデバイス トークンを取得できる可能性があります。(通知プロンプトを再び表示させるのは非常に面倒なので、これをテストするのに苦労しています。)

于 2013-03-02T00:35:34.347 に答える