17

プッシュ通知が必要な iPhone アプリを開発しています。証明書を作成し、アプリ ID を変更するための指示に従いました。これを正しく行ったかどうかは完全にはわかりませんが、指示に従いました。これが問題ないかどうかを確認する方法はありますか?

エミュレーターで実行すると、エミュレーターがプッシュ通知をサポートしていないというエラー メッセージが表示されました。これはある程度予想されていました。

ところで:私はこの質問を数回目にしたことがあります。それはいつも刑務所で壊れた電話にあるようです. 私の電話はジェイルブレイクされていません。

しかし、iPhone でデバッグすると、didRegisterForRemoteNotificationsWithDeviceToken メソッドが起動されることはありません。助けていただければ幸いです。私のコードは次のとおりです。

-(void)applicationDidFinishLaunching:(UIApplication *)application 
{    
   rootController.delegate = self;
   [window addSubview:rootController.view];
   [window makeKeyAndVisible];

   [[UIApplication sharedApplication] 
   registerForRemoteNotificationTypes:
   (UIRemoteNotificationTypeAlert | 
     UIRemoteNotificationTypeBadge | 
     UIRemoteNotificationTypeSound)];
}

- (void)application:(UIApplication *)app didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken 
{ 
   NSString *str = 
    [NSString stringWithFormat:@"%@",deviceToken];
    NSLog(str);
}

- (void)application:(UIApplication *)app didFailToRegisterForRemoteNotificationsWithError:(NSError *)err 
{ 
    NSString *str = [NSString stringWithFormat: @"Error: %@", err];
    NSLog(str);    
}
4

7 に答える 7

21

通常、didRegisterForRemoteNotificationsWithDeviceTokenが呼び出されない場合は、 ではないプロビジョニング プロファイルを使用していることが原因ですAPS-entitled。アプリが運用アプリの場合、プッシュを機能させるには配布プロファイルで署名する必要があります。開発アプリの場合は、開発プロファイルで署名する必要があります。

編集:provisioning profile明示的なバンドル ID を使用する必要があることにも注意してください。ワイルドカード プロファイルで署名されたものに送信されたプッシュは配信されません。

于 2012-08-22T15:48:46.230 に答える
9

同じ問題がありました。

私にとっては、アプリの通知設定がすべてオフになっていました。

iOS 設定でアプリの通知が無効になっている場合、そのメソッドは呼び出されません。

通知タイプをオンにすると、機能し始めました。

Settings App->Notification Settings->[My App]

于 2013-12-02T21:02:41.497 に答える
2

プッシュ通知の問題をデバッグするためのヒントがあるTN2265を確認してください。今日まさにこの問題が発生し、iPod Touch で WiFi がオフになっていることが判明しました。iPhoneで作業していると言ったので。それはおそらくそうではありませんが、追加の可能性についてテクニカルノートをチェックする価値があります.

于 2010-11-08T03:14:41.770 に答える
1

ファイアウォールの設定を確認してください。

スコットKの回答から:

iOS デバイスがセルラー データ ネットワークを使用できる場合は、有効なセルラー データ プランがあることを確認します。たとえば、[設定] で Wi-Fi をオフにして、引き続き Safari で Web を閲覧できるかどうかを確認します。一方、プッシュ サービスが Wi-Fi を使用している場合、デバイスまたはコンピューターとインターネットの間のファイアウォールは、ポート 5223 との間の TCP トラフィックを許可する必要があります。

于 2012-08-07T17:48:15.283 に答える
1

Apple のドキュメント「プッシュ通知のトラブルシューティング」によると、「デリゲート コールバック application:didRegisterForRemoteNotificationsWithDeviceToken: も application:didFailToRegisterForRemoteNotificationsWithError: も呼び出されない場合、この接続がまだ確立されていないことを意味します。」...「システムにインターネット接続がない可能性があります。 .aiplane モード。

この動作も見られますが、インターネット接続がないためではなく、IrFan が指摘したように、アプリの通知が無効になっているため、通知を有効にするとすぐにメソッドが起動します。

解決策 1) これらのデリゲート メソッドのいずれかが呼び出されることに依存しないでください。2) デリゲート コールバックを受信した場合は、それに対処します。3) ネットワーク接続がない、アプリのプッシュ通知が無効になっている、APS が有効になっていない、または ? デリゲートが呼び出されないようにします。

于 2014-05-07T20:29:41.497 に答える
0

デリゲート メソッドが呼び出されない iOS 11.3 デバイスで同じ問題に直面しました。したがって、Appleのドキュメントによると:-

https://developer.apple.com/library/content/technotes/tn2265/_index.html

最初のプッシュ対応アプリがインストールされると、iOS または OS X は、システム上のすべてのプッシュ対応アプリによって共有されるプッシュ サービスへの永続的なネットワーク接続を確立しようとします。デリゲート コールバック application:didRegisterForRemoteNotificationsWithDeviceToken: も application:didFailToRegisterForRemoteNotificationsWithError: も呼び出されない場合、この接続がまだ確立されていないことを意味します。

これより先、

これは必ずしもエラー状態ではありません。システムが携帯電話基地局または Wi-Fi アクセス ポイントの範囲外にあるか、または機内モードになっているために、システムがインターネットにまったく接続されていない可能性があります。これをエラーとして処理する代わりに、アプリは通常どおり続行し、プッシュ通知に依存する機能のみを無効にする必要があります。

私は他のネットワークに接続してみましたが、登録通知操作の実行を再開し、出来上がり!したがって、どちらのデリゲート メソッドも呼び出していない通知の登録に問題があったと思います。

于 2018-06-04T11:22:53.853 に答える