2011-07-08 19 views
4

と呼ば取得していない私は、次のコードを呼び出すことにより、プッシュ通知のために登録しています:デリゲート以下プッシュ通知デリゲートコールバックは

[[UIApplication sharedApplication] registerForRemoteNotificationTypes:UIRemoteNotificationTypeBadge|UIRemoteNotificationTypeAlert|UIRemoteNotificationTypeSound]; 

しかし、いくつかのまれなケースでは呼び出されません。

- (void)application:(UIApplication *)iApplication didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)iNewDeviceToken { 

でも従わないメソッドが呼び出されます:

- (void)application:(UIApplication *)iApplication didFailToRegisterForRemoteNotificationsWithError:(NSError *)iError { 

理由何ができますか この。私はデバイストークンを受け取った後、私のアプリフローを進めています。だから、いくつかのまれなシナリオで私のアプリがハングアップします。

ヒント?

+0

'didRegisterForRemoteNotificationsWithDeviceToken'は、' registerForRemoteNotificationTypes'も呼び出されたときに呼び出されます。 – malinois

答えて

9

ドキュメントによると、デバイスがプッシュサーバーとの永続的な接続を確立するまで、どちらのコールバックも起こりません。したがって、無線またはデータ接続が利用できない場合、コールバックは発生しません。リンゴはこれをエラー状態とみなしません。私が知る限り、didFail ...コールバックの原因となる唯一のエラーは、不正な証明書/アプリケーション権限の問題(開発上の問題)またはユーザーの権限の拒否です(ただし、これを散発的に再現できます日付を変更して電話をオフにする)。

0

手掛かりはすぐそこにあります:失敗するとNSErrorインスタンスが発生します。だから、それがなぜエラーであるかを理解するために、NSErrorを調べて、それがあなたに何を伝えているかを見てください。

「アプリケーションの登録に失敗しました。もう一度やり直してください...」の行に沿ってエラーメッセージを表示するなど、アプリでそのケースを処理する必要があります。

+0

彼はいずれのハンドラも呼び出されていないので、NSErrorを受け取っていないと言っています...今は同じ問題があります.5台のデバイスで動作しますが、6台目のデバイスはdidRegisterもdidFailToRegisterも呼び出さない – jab11

0

プロビジョニングプロファイルでプッシュ通知を有効にする必要があります。アプリケーションIDを使用して開発者ポータルで設定します。そうすればうまくいくはずです。

0

もう1つ:他のネットワークなどで使用するために電話が根ざしているか壊れている場合は、問題が発生します。私の電話は根付いていて、代表者は誰も呼ばれませんでした。私は同僚に自分のiPadに入れてもらいました。うまくいきましたので、コードはOKです。

私の携帯電話にOSを再インストールしたところ、動作し始めました。