Search code examples
iospush-notificationdevicetoken

Saving the DeviceToken for Later Use in Apple Push Notification Services


In my iPhone app I am getting the device token from Apple which I am assigning a public property inside the Delegate file as shown below:

- (void)application:(UIApplication*)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData*)deviceToken
{
   self.dToken = [[NSString alloc] initWithData:deviceToken encoding:NSUTF8StringEncoding]; 
}

The dToken property is declared as shown below:

NSString *dToken;

@property (nonatomic,retain) NSString *dToken;

But when I try to retrieve the device token from another file I get the null value.

+(NSString *) getDeviceToken
{
  NSString *deviceToken = [(MyAppDelegate *)[[UIApplication sharedApplication] delegate] dToken];

    NSLog(@" getDeviceToken = %@",deviceToken);  // This prints NULL

    return deviceToken; 

}

What am I doing wrong?


Solution

  • I suggest you to convert token to string in this way:

    self.dToken = [[[deviceToken description]
                        stringByTrimmingCharactersInSet:[NSCharacterSet characterSetWithCharactersInString:@"<>"]] 
                        stringByReplacingOccurrencesOfString:@" " 
                        withString:@""];
    

    UPDATED: As many people mentioned it is better to use next approach to convert NSData * to 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