我的应用程序中APN提供的设备令牌的格式是否突然改变了?

时间:2012-09-13 20:14:28

标签: objective-c ios ios5 apple-push-notifications devicetoken

不确定为什么......但我之前正在使用的推送通知注册回调是返回一个奇怪的设备令牌。任何人都可以帮助理解吗?据我所知,我没有更改任何有关此过程的代码。

以下代码:

- (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]输出格式是否有变化?

1 个答案:

答案 0 :(得分:8)

您不应该依赖NSData的描述方法(实际上是NSObject的描述方法)来提供从每个iOS版本到下一个版本的相同结果。 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