¿El formatting del token de dispositivo proporcionado por APNs cambió repentinamente en mi aplicación?

No estoy seguro de por qué … pero mi callback de logging de notifications push anteriormente funcional está devolviendo un token de dispositivo extraño. ¿Alguien puede ayudar a entenderlo? Que yo sepa, no he cambiado ningún código con respecto a este process.

El siguiente código:

- (void)application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)devToken { NSLog(@"device token: %@", [devToken description]); } 

Devuelve esta salida:

 device token: [32]: 8d 21:! 30:0 c3 ec 69:i f4 <--REDACTED--> 24:$ d5 26:& 64:d fb 27:' 79:y fc dc 10 ae 77:w b0 21:! 5b:[ 

¿Alguien reconoce este formatting o tiene alguna idea de lo que está sucediendo?

ACTUALIZACIÓN Curiosamente, parece que el token de mi dispositivo está realmente contenido en [devToken description] si [devToken description] cada : y el personaje que lo sigue … y supongo que [32]: es solo un indicador de la longitud de la Cuerda. Todavía no puedo encontrar ningún razonamiento para esto.

Pregunta [NSData description] : ¿ [NSData description] formatting de salida [NSData description] ?

No debe confiar en el método de descripción de NSData (que en realidad es el método de descripción de NSObject) para proporcionar los mismos resultados de cada versión de iOS a la siguiente. Apple puede cambiar lo que produce esta descripción.

El token del dispositivo es en realidad HEX en formatting NSData. Necesita convertir los NSData. Puede usar algo como lo siguiente:

 - (void)application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken { [[NSUserDefaults standardUserDefaults] setObject:[deviceToken stringWithHexBytes] forKey:@"DeviceToken"]; } 

El método stringWithHexBytes es una categoría en NSData de la siguiente manera:

NSData + Hex.h

  @interface NSData (Hex) - (NSString *) stringWithHexBytes; @end 

NSData + Hex.m

  #import "NSData+Hex.h" @implementation NSData (Hex) - (NSString*) stringWithHexBytes { NSMutableString *stringBuffer = [NSMutableString stringWithCapacity:([self length] * 2)]; const unsigned char *dataBuffer = [self bytes]; for (int i = 0; i < [self length]; ++i) { [stringBuffer appendFormat:@"%02X", (unsigned long)dataBuffer[ i ]]; } return [[stringBuffer retain] autorelease]; } @end