是否有可能从应用程序返回设备令牌:(UIApplication *)应用程序didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken方法?由于我不擅长PHP,我希望我的用户手动将令牌输入到他们的计算机上的程序中,该程序将用于发送通知。但是,我无法从此方法中获取令牌。它使用NSLog记录正常,但是当我使用NSString initWithData:时,我总是得到一些神秘的东西。我想编码错了?
提前感谢您的帮助!
答案 0 :(得分:7)
令牌是一个NSData对象,它指向原始二进制blob数据,而不是字符串。将它转换为字符串的两种最常见的方法是:
NSString *str = [deviceToken base64EncodedStringWithoutNewlines];
NSString *str = [[deviceToken description] stringByReplacingOccurrencesOfString:@"<" withString:@""]; str = [str stringByReplacingOccurrencesOfString:@">" withString:@""]; str = [str stringByReplacingOccurrencesOfString: @" " withString: @""];
我更喜欢#1,因为后者依赖于NSData的-description调用的内部方式,但两者都应该有效。
答案 1 :(得分:3)
您可以获取十六进制字符串,而无需担心NSData
的{{1}}方法的行为,其中包含:
description
答案 2 :(得分:0)
Token是NSData。您可以转换为string.And remove&lt;和&gt;和空格
NSString *devToken = [[deviceToken description] stringByTrimmingCharactersInSet:[NSCharacterSet characterSetWithCharactersInString:@"<>"]];
devToken = [devToken stringByReplacingOccurrencesOfString:@" " withString:@""];
NSLog(@"token: %@",devToken);