不知道为什么......但我以前的功能推送通知注册回调返回一个奇怪的设备 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:[
有人认识这种格式或知道发生了什么吗?
UPDATE 奇怪的是,如果我提取每个
[devToken description]
和它后面的字符,我的设备 token 似乎实际上包含在 :
中......而且我猜 [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/