APN的设备令牌是什么编码?

时间:2010-09-10 22:03:10

标签: notifications push device token apple-push-notifications

是否有可能从应用程序返回设备令牌:(UIApplication *)应用程序didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken方法?由于我不擅长PHP,我希望我的用户手动将令牌输入到他们的计算机上的程序中,该程序将用于发送通知。但是,我无法从此方法中获取令牌。它使用NSLog记录正常,但是当我使用NSString initWithData:时,我总是得到一些神秘的东西。我想编码错了?

提前感谢您的帮助!

3 个答案:

答案 0 :(得分:7)

令牌是一个NSData对象,它指向原始二进制blob数据,而不是字符串。将它转换为字符串的两种最常见的方法是:

  1. base64编码 下载http://projectswithlove.com/projects/NSData_Base64.zip
  2. NSString *str = [deviceToken base64EncodedStringWithoutNewlines];
    
    1. 使用NSData的-description获取字符串十六进制转储并清理它
    2. 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);