Notifications APN的设备令牌采用什么编码?
是否可以获取从应用程序返回的设备令牌:(UIApplication*)应用程序didRegisterForRemotionTificationswithDeviceToken:(NSData*)deviceToken方法?由于我不太擅长PHP,我希望我的用户手动将令牌输入到他们计算机上的程序中,该程序将用于发送通知。但是,我无法从这个方法中获取令牌。使用NSLog可以很好地记录日志,但是当我使用NSString initWithData:,我总是会得到一些神秘的东西。我想编码是错的吧Notifications APN的设备令牌采用什么编码?,notifications,push,device,token,apple-push-notifications,Notifications,Push,Device,Token,Apple Push Notifications,是否可以获取从应用程序返回的设备令牌:(UIApplication*)应用程序didRegisterForRemotionTificationswithDeviceToken:(NSData*)deviceToken方法?由于我不太擅长PHP,我希望我的用户手动将令牌输入到他们计算机上的程序中,该程序将用于发送通知。但是,我无法从这个方法中获取令牌。使用NSLog可以很好地记录日志,但是当我使用NSString initWithData:,我总是会得到一些神秘的东西。我想编码是错的吧 提前谢谢你
提前谢谢你的帮助 令牌是一个NSData对象,它指向原始二进制数据块,而不是字符串。将其转换为字符串的两种最常见的方法是:
NSString*str=[[deviceToken description]stringByReplacingOfString:@“with string:@]”的发生率;
str=[str STRINGBYREPLACINGOURCRENCESOFSTRING:@“with string:@]”;
我更喜欢#1,因为后者取决于NSData的-description调用的内部工作方式,但两者都应该工作。您可以获得十六进制字符串,而不必担心
NSData
的description
方法的行为,具有:
+ (NSString *)hexadecimalStringFromData:(NSData *)data {
NSMutableString *hexToken;
const unsigned char *iterator = (const unsigned char *) [data bytes];
if (iterator) {
hexToken = [[NSMutableString alloc] init];
for (NSInteger i = 0; i < data.length; i++) {
[hexToken appendString:[NSString stringWithFormat:@"%02lx", (unsigned long) iterator[i]]];
}
return hexToken;
}
return nil;
}
+(NSString*)十六进制StringFromData:(NSData*)数据{
NSMutableString*hexToken;
常量无符号字符*迭代器=(常量无符号字符*)[数据字节];
if(迭代器){
hexToken=[[NSMutableString alloc]init];
对于(NSInteger i=0;i
令牌是NSData。您可以将其转换为字符串,并删除NSString *devToken = [[deviceToken description] stringByTrimmingCharactersInSet:[NSCharacterSet characterSetWithCharactersInString:@"<>"]];
devToken = [devToken stringByReplacingOccurrencesOfString:@" " withString:@""];
NSLog(@"token: %@",devToken);
NSString*devToken=[[deviceToken description]stringByTrimmingCharactersInSet:[NSCharacterSet characterSetWithCharactersInString:@”“];
devToken=[devToken StringByReplacingOfString:@“with String:@”的发生率];
NSLog(@“令牌:%@”,devToken);
我使用base64方法,但使用“url安全”base64,这是一种编码,使生成的字符串在url中可以接受为-等。原始base64使用标准base64的“+”和“/”字符,分别替换为“-”和“\u64”。
+ (NSString *)hexadecimalStringFromData:(NSData *)data {
NSMutableString *hexToken;
const unsigned char *iterator = (const unsigned char *) [data bytes];
if (iterator) {
hexToken = [[NSMutableString alloc] init];
for (NSInteger i = 0; i < data.length; i++) {
[hexToken appendString:[NSString stringWithFormat:@"%02lx", (unsigned long) iterator[i]]];
}
return hexToken;
}
return nil;
}
NSString *devToken = [[deviceToken description] stringByTrimmingCharactersInSet:[NSCharacterSet characterSetWithCharactersInString:@"<>"]];
devToken = [devToken stringByReplacingOccurrencesOfString:@" " withString:@""];
NSLog(@"token: %@",devToken);