このテクニカルノートを読む必要があります:TN2265-プッシュ通知のトラブルシューティング
それは言う:
最初のプッシュ対応アプリがインストールされると、iOSまたはMac OS Xは、システム上のすべてのプッシュ対応アプリによって共有されるプッシュサービスへの永続的なネットワーク接続を確立しようとします。デリゲートコールバックapplication:didRegisterForRemoteNotificationsWithDeviceToken:もapplication:didFailToRegisterForRemoteNotificationsWithError:も呼び出されない場合は、この接続がまだ確立されていないことを意味します。
これは必ずしもエラー状態ではありません。システムがセルタワーまたはWi-Fiアクセスポイントの範囲外にあるか、機内モードになっている可能性があるため、システムにインターネット接続がまったくない可能性があります。これをエラーとして扱うのではなく、アプリは通常どおり続行し、プッシュ通知に依存する機能のみを無効にする必要があります。
ネットワークの可用性は頻繁に変更される可能性があることに注意してください。プッシュサービスへの永続的な接続が成功すると、前述のアプリケーションデリゲートメソッドの1つが呼び出されます。
registerForRemoteNotificationTypes
ネットワーク接続がない場合でも、アプリケーションが起動するたびに呼び出す必要があります。プッシュフレームワークが残りを処理します。didRegisterForRemoteNotificationsWithDeviceTokenで、トークンをサーバーに送信します(まだ送信されていない場合、またはトークンが変更されている場合)。
ローカルおよびプッシュ通知プログラミングガイドも確認してください。
アプリケーションが起動するたびにデバイストークンを要求してプロバイダーに渡すことで、プロバイダーがデバイスの現在のトークンを持っていることを確認できます。ユーザーがバックアップを作成したデバイスまたはコンピューター以外のデバイスまたはコンピューターにバックアップを復元する場合(たとえば、ユーザーがデータを新しいデバイスまたはコンピューターに移行する場合)、ユーザーはアプリケーションを少なくとも1回起動する必要があります。通知を再度受信します。ユーザーがバックアップデータを新しいデバイスまたはコンピューターに復元するか、オペレーティングシステムを再インストールすると、デバイストークンが変更されます。さらに、デバイストークンをキャッシュして、プロバイダーに渡さないでください。必要なときはいつでもシステムからトークンを取得してください。アプリケーションが以前に登録されている場合は、registerForRemoteNotificationTypesを呼び出します。