15

didRegisterForRemoteNotificationsWithDeviceToken が呼び出されたときと似ていますか? .

ユーザーが最初にアプリをインストールし、通知を受け入れるかどうかを尋ねたときに、ユーザーがそれを受け入れるdidRegisterForRemoteNotificationsWithDeviceTokenと呼び出されますか?

registerForRemoteNotificationTypes現在、ユーザーが正常にサインインまたはアカウントを作成した後に電話しています。

その後の起動では、AppDelegatedidRegisterForRemoteNotificationsWithDeviceTokenを呼び出さなくてもデリゲートが呼び出されます。registerForRemoteNotificationTypes

ドキュメントとサンプルコードに従うと:

アプリケーションが起動するたびにデバイス トークンを要求してプロバイダーに渡すことで、プロバイダーがデバイスの最新のトークンを確実に取得できるようになります。

- (void)applicationDidFinishLaunching:(UIApplication *)app {

   // other setup tasks here....
    [[UIApplication sharedApplication] registerForRemoteNotificationTypes:...
}

ただし、アプリの起動時にトークンを要求すると、デリゲートが 2 回呼び出されます。

いくつかの質問と明確さが必要です。

  1. 最初のプロンプトregisterForRemoteNotificationTypesが表示されるようにするには、プロンプトを表示するために呼び出しを行う必要がありますか? ただし、これを AppDelegate で手動で呼び出すと、デリゲートが 2 回呼び出されます。果たしてその通りでしょうか。

  2. ユーザーが最初のプロンプトを受け入れると、didRegisterForRemoteNotificationsWithDeviceToken自動的に呼び出されますか? それとも registerForRemoteNotificationTypes、AppDelegate で呼び出す必要がありますか? しかし、その後、デリゲートは将来の起動のために 2 回呼び出されますか?

  3. ユーザーが拒否し、後で設定を介してそれを受け入れた場合、どうなりますか?

アップデート

0. 最初のプロンプトregisterForRemoteNotificationTypesが表示されるようにするには、プロンプトを表示するために呼び出しを行う必要がありますか? ただし、これを AppDelegate で手動で呼び出すと、デリゲートが 2 回呼び出されます。果たしてその通りでしょうか。 これは正しくありません。registerForRemoteNotiicationTypesAppDelegate で実際に 2 つ作成されていることがわかりました。

4

3 に答える 3

8

ユーザーが最初のプロンプトを受け入れる場合、didRegisterForRemoteNotificationsWithDeviceToken は自動的に呼び出されますか? いいえ、「アクセスを許可する」をクリックするとリモート通知登録プロセスが開始されますが、didRegisterForRemoteNotificationsWithDeviceToken メソッドは APNS 登録が成功した場合にのみ呼び出されます。

アプリケーションが以前に登録されている場合、registerForRemoteNotificationTypes: を呼び出すと、オペレーティング システムは追加のオーバーヘッドを発生させることなく、デバイス トークンをデリゲートにすぐに渡します。

ユーザーがアクション ボタンをタップした結果としてアプリケーションが起動されたのか、アプリケーションの状態を調べることで、既に実行中のアプリケーションに通知が配信されたのかを判断できます。application:didReceiveRemoteNotification: または application:didReceiveLocalNotification: メソッドのデリゲートの実装で、applicationState プロパティの値を取得して評価します。値が UIApplicationStateInactive の場合、ユーザーはアクション ボタンをタップしました。値が UIApplicationStateActive の場合、アプリケーションは通知を受信したときに最前面にありました。

于 2013-09-03T11:23:04.393 に答える