1

プッシュ通知をテストするには、iPhone でデバイス トークンを取得する必要があります。私の iPhone では、プッシュ許可を通知することに既に同意していました。アプリを削除して再インストールしようとしましたが、何もしません。メソッドにブレークポイントを入れようとしましたdidRegisterForRemoteNotificationsWithDeviceTokenが、何もありません。

なにか提案を?

これは私のコードです:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    /**** PUSH NOTIFY ****/
    [[UIApplication sharedApplication] registerForRemoteNotificationTypes:UIRemoteNotificationTypeAlert | UIRemoteNotificationTypeSound | UIRemoteNotificationTypeBadge];

    self.window.rootViewController = self.tabBarController;
    [self.window makeKeyAndVisible];

    return YES;
}


- (void)application:(UIApplication *)app didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken { 
    NSMutableString *str = [[NSMutableString alloc] initWithFormat:@"http://www.mysite.com/storeToken.php?task=register&token=%@", [self stringWithDeviceToken:deviceToken]];
    //NSLog(@"%@",str);
    NSUserDefaults *pref = [NSUserDefaults standardUserDefaults];    
    [pref setObject:[self stringWithDeviceToken:deviceToken] forKey:@"token"];
    [pref synchronize];

    NSURL *url = [NSURL URLWithString:str];

    ASIHTTPRequest *request = [ASIHTTPRequest requestWithURL:url];
    [request startSynchronous];

    [str release];
}

- (NSString*)stringWithDeviceToken:(NSData*)deviceToken {
    const char* data = [deviceToken bytes];
    NSMutableString* token = [NSMutableString string];

    for (int i = 0; i < [deviceToken length]; i++) {
        [token appendFormat:@"%02.2hhX", data[i]];
    }

    return [[token copy] autorelease];
}

これは、出力されるエラーです。

Error: Error Domain=NSCocoaErrorDomain Code=3000 "nessuna stringa di autorizzazione 'aps-environment' valida trovata per l'applicazione" UserInfo=0x296e80 {NSLocalizedDescription=nessuna stringa di autorizzazione 'aps-environment' valida trovata per l'applicazione}
4

1 に答える 1

4

エラー処理用に別のデリゲート メソッドを用意することをお勧めします。

- (void)application:(UIApplication *)application didFailToRegisterForRemoteNotificationsWithError:(NSError *)error {
    NSLog(@"Fail to register for remote notifications: %@", [error localizedDescription]);
}

質問の更新後、問題が間違ったプロビジョニング プロファイル (一般的または「aps-evironment」なし) にあることがより明確になりました。そう:

  • XCode とデバイスの両方から、期限切れのすべてのプロファイルとそのア​​プリのすべてのプロファイルを削除します
  • アプリのプッシュ通知が有効になっていることを確認します (プロビジョニング ポータルで)
  • ポータルからプロビジョニング プロファイルをダウンロードし、XCode にインストールします。
  • 選択したプロファイル (ビルド設定/コード署名 ID で) がアプリと一致し、汎用/ワイルドカードではないことを確認します (自動選択がうまくいかない場合があります)
  • いつものように (XCode キャッシングの「魔法」)、XCode を再起動し、ビルド前にデバイスからアプリケーションを削除することをお勧めします。
  • 建てて祈る
于 2012-03-16T15:12:46.977 に答える