aza*_*arp 11 push-notification devicetoken ios
在我的iPhone应用程序中,我从Apple获取设备令牌,我在Delegate文件中分配了一个公共属性,如下所示:
- (void)application:(UIApplication*)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData*)deviceToken
{
self.dToken = [[NSString alloc] initWithData:deviceToken encoding:NSUTF8StringEncoding];
}
Run Code Online (Sandbox Code Playgroud)
dToken属性声明如下:
NSString *dToken;
@property (nonatomic,retain) NSString *dToken;
Run Code Online (Sandbox Code Playgroud)
但是当我尝试从另一个文件中检索设备令牌时,我得到了null值.
+(NSString *) getDeviceToken
{
NSString *deviceToken = [(MyAppDelegate *)[[UIApplication sharedApplication] delegate] dToken];
NSLog(@" getDeviceToken = %@",deviceToken); // This prints NULL
return deviceToken;
}
Run Code Online (Sandbox Code Playgroud)
我究竟做错了什么?
Nek*_*kto 35
我建议你用这种方式将token转换为string:
self.dToken = [[[deviceToken description]
stringByTrimmingCharactersInSet:[NSCharacterSet characterSetWithCharactersInString:@"<>"]]
stringByReplacingOccurrencesOfString:@" "
withString:@""];
Run Code Online (Sandbox Code Playgroud)
更新:正如很多人提到的那样,最好使用下一种方法转换NSData *
为NSString *
:
@implementation NSData (Conversion)
- (NSString *)hexadecimalString
{
const unsigned char *dataBuffer = (const unsigned char *)[self bytes];
if (!dataBuffer) {
return [NSString string];
}
NSUInteger dataLength = [self length];
NSMutableString *hexString = [NSMutableString stringWithCapacity:(dataLength * 2)];
for (int i = 0; i < dataLength; ++i) {
[hexString appendFormat:@"%02lx", (unsigned long)dataBuffer[i]];
}
return hexString;
}
@end
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
13518 次 |
最近记录: |