ach*_*han 4 objective-c apple-push-notifications devicetoken ios ios5
不知道为什么......但我以前功能的推送通知注册回调是返回一个奇怪的设备令牌.任何人都可以帮助理解吗?据我所知,我没有更改任何有关此过程的代码.
以下代码:
- (void)application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)devToken
{
NSLog(@"device token: %@", [devToken description]);
}
Run Code Online (Sandbox Code Playgroud)
返回此输出:
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:[
Run Code Online (Sandbox Code Playgroud)
有没有人认识到这种格式或者知道发生了什么?
更新奇怪的是,似乎我的设备令牌实际上包含在[devToken description]
我提取每个:
和跟随它的字符....并且我猜这[32]:
只是字符串长度的指示器.我仍然找不到任何理由.
重新提问:[NSData description]
输出格式是否改变?
您不应该依赖NSData的描述方法(实际上是NSObject的描述方法)来提供从每个iOS版本到下一个版本的相同结果.Apple可以更改此描述输出的内容.
设备令牌实际上是NSData格式的HEX.您需要转换NSData.您可以使用以下内容:
- (void)application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken
{
[[NSUserDefaults standardUserDefaults] setObject:[deviceToken stringWithHexBytes] forKey:@"DeviceToken"];
}
Run Code Online (Sandbox Code Playgroud)
stringWithHexBytes方法是NSData上的一个类别,如下所示:
的NSData + Hex.h
@interface NSData (Hex)
- (NSString *) stringWithHexBytes;
@end
Run Code Online (Sandbox Code Playgroud)
的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
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
1484 次 |
最近记录: |