Search code examples
notificationspushdevicetokenapple-push-notifications

What encoding is the device token for APNs in?


Is it possible to get the Device Token returned from the application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken method? Since I'm not very good at PHP, I'd like for my user to manually enter the token into a program on their computer that is going to be used to send out the notification. But, I can't get the token from this method. It logs fine using NSLog, but when I use NSString initWithData:, I always get some cryptic thing. I suppose the encoding is wrong?

Thanks for your help in advance!


Solution

  • The token is an NSData object, which points to a raw binary blob of data, not a string. The two most common ways to convert it to a string would be:

    1. base64 encode it Download http://projectswithlove.com/projects/NSData_Base64.zip
    NSString *str = [deviceToken base64EncodedStringWithoutNewlines];
    
    1. Use NSData's -description to get a string hex dump and clean it up
    NSString *str = [[deviceToken description] stringByReplacingOccurrencesOfString:@"<" withString:@""];
    str = [str stringByReplacingOccurrencesOfString:@">" withString:@""];
    str = [str stringByReplacingOccurrencesOfString: @" " withString: @""];
    

    I prefer #1 because the latter is dependent on the internal way that NSData's -description call works, but either should work.