objective-c - APNs 提供的 Device Token 的格式在我的应用程序中突然改变了吗?

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

不知道为什么......但我之前的功能推送通知注册回调返回一个奇怪的设备 token 。任何人都可以帮助理解它吗?据我所知,我没有更改有关此过程的任何代码。

以下代码:

- (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:[ 

有人认识这种格式或知道发生了什么事吗?

更新 奇怪的是,如果我提取每个 : 和后面的字符,我的设备 token 似乎实际上包含在 [devToken description] 中它....我猜 [32]: 只是字符串长度的一个指标。不过,我仍然找不到任何理由。

改写的问题: [NSData description] 输出格式是否更改?

最佳答案

您不应该依赖 NSData 的描述方法(实际上是 NSObject 的描述方法)来为下一个 iOS 版本提供相同的结果。 Apple 可以更改此描述的输出内容。

设备 token 实际上是 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

关于objective-c - APNs 提供的 Device Token 的格式在我的应用程序中突然改变了吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12414093/

相关文章:

ios - IOS 照片应用程序如何在一个屏幕上显示数百张照片?

iOS应用测试; iPad 是否必须使用与 iOS 开发者计划成员(member)身份相同的 Apple ID

ios - 链接到 Dropbox 后未调用 handleOpenURL - iOS

ios - Openudid 值不持久

objective-c - 类型类型转换 self

objective-c - 休息套件 "*** Assertion failure in -[RKManagedObjectMapping initWithEntity:]"

ios - Titanium:无需设备即可生成 IPA

iphone - 在应用程序启动时从 Storyboard中选择替代的第一个 View Controller

iphone - Objective-C:在 iOS 中转发消息

ios - 在 iOS8 上,以横向模式显示我的应用程序会隐藏状态栏,但在 iOS 7 上,状态栏会同时显示在两个方向上