4

理由はわかりませんが、以前は機能していたプッシュ通知登録コールバックが奇妙なデバイス トークンを返しています。誰かがそれを理解するのを助けることができますか? 私の知る限り、このプロセスに関するコードは変更していません。

次のコード:

- (void)application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)devToken
{
    NSLog(@"device token: %@", [devToken description]);
}

この出力を返します:

device token: [32]: 8d 21:! 30:0 c3 ec 69:i f4 <--REDACTED--> 24:$ d5 26:& 64:d fb 27:' 79:y fc dc 10 ae 77:w b0 21:! 5b:[ 

誰かがこのフォーマットを認識していますか、または何が起こっているのか知っていますか?

UPDATE[devToken description]奇妙なことに、それに続くすべての文字を抽出すると、デバイストークンが実際に含まれているようです....そして、それは文字列の長さの単なる指標であると:推測しています。[32]:しかし、私はまだこれについての理由を見つけることができません。

言い換えた質問:[NSData description]出力形式は変更されましたか?

4

1 に答える 1

8

iOS の各バージョンから次のバージョンに同じ結果を提供するために、NSData の記述メソッド (実際には NSObject の記述メソッド) に依存しないでください。Apple は、この説明が出力する内容を変更できます。

デバイス トークンは、実際には NSData 形式の HEX です。NSData を変換する必要があります。次のようなものを使用できます。

- (void)application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken
    {

        [[NSUserDefaults standardUserDefaults] setObject:[deviceToken stringWithHexBytes] forKey:@"DeviceToken"];
    }

stringWithHexBytes メソッドは、次のように NSData のカテゴリです。

NSData+Hex.h

    @interface NSData (Hex)

- (NSString *) stringWithHexBytes; 


@end

NSData+Hex.m

    #import "NSData+Hex.h"

@implementation NSData (Hex)

- (NSString*) stringWithHexBytes 
{
    NSMutableString *stringBuffer = [NSMutableString stringWithCapacity:([self length] * 2)];
    const unsigned char *dataBuffer = [self bytes];

    for (int i = 0; i < [self length]; ++i)
    {
        [stringBuffer appendFormat:@"%02X", (unsigned long)dataBuffer[ i ]];
    }

    return [[stringBuffer retain] autorelease];
}

@end
于 2012-09-13T21:55:22.070 に答える