2

アプリケーションでデバイストークンを抽出しようとしているときに、大きな不満を感じています。これまでのところ、私は持っています

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {    

    //register for push notifications
    [[UIApplication sharedApplication] registerForRemoteNotificationTypes:(UIRemoteNotificationTypeBadge | UIRemoteNotificationTypeSound | UIRemoteNotificationTypeAlert)];

その後

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

- (void)application:(UIApplication*)application didFailToRegisterForRemoteNotificationsWithError:(NSError*)error
{
    NSLog(@"Failed to get token, error: %@", error);
}

これが取引です。

私のiOSシミュレーター:

 Failed to get token, error: Error Domain=NSCocoaErrorDomain Code=3010 "remote notifications are not supported in the simulator" UserInfo=0x5813d20 {NSLocalizedDescription=remote notifications are not supported in the simulator}

予想通り。

iOS4.2を実行している第2世代のiPodTouchでは、どちらのコールバックも呼び出されません。iOS5.1.1を実行している同僚のiPhone4sでも同じことが起こります

最後に、iOS.5.1.1を実行している別の同僚のiPhone 4では、デバイストークンが「com.apple.mobileconfig」であることが返されているようです...これは非常に奇妙です。

デバイスのアプリで通知が有効になっていることを確認しました。また、アプリ識別子バンドルがxCodeで正しく設定されていることも確認しました。

編集:何が起こったのかわかりませんが、このスレッドを投稿してから数日後、iPhone 4をMacに接続すると、デバイストークンのコールバックがデバッグモードで動作し始め、他のすべてのデバイスでも動作し始めました。プロビジョニングプロファイルにいくつかの変更を加えた(新しいデバイスのUDIDを追加する必要があったなど)ので、何か問題が発生した可能性があります。よくわかりません。

EDIT2: didRegisterコールバックの直前に余分なコロンがあったようDeviceTokenです...

4

2 に答える 2

2

テクニカルノートTN2265からプッシュ通知のトラブルシューティング(私の強調):

デリゲートコールバックなし

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

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

ネットワークの可用性は頻繁に変更される可能性があることに注意してください。プッシュサービスへの永続的な接続が成功すると、前述のアプリケーションデリゲートメソッドの1つが呼び出されます。

于 2012-06-03T21:07:12.107 に答える
1
-(void)application:(UIApplication *)app didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken 

いいえ

-(void)application:(UIApplication *)app didRegisterForRemoteNotificationsWith:DeviceToken:(NSData *)deviceToken 

2番目の間違ったバージョンの余分なコロンに注意してください...愚かな間違い。

ストーリーの教訓:コピーと貼り付けには注意してください:)

于 2012-06-08T09:29:05.353 に答える