181 votes

Comment puis-je convertir le jeton de mon appareil (NSData) en un NSString ?

Je mets en œuvre des notifications push. Je voudrais enregistrer mon Token NPP sous forme de chaîne.

La première ligne de code imprime null. la seconde affiche le jeton. Comment puis-je obtenir mon newDeviceToken comme un NSString ?

161voto

Shubhank Points 11083

Quelqu'un m'a Aidé avec cela.Je suis juste de passage le long de

- (void)application:(UIApplication *)app didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)devToken {

const unsigned *tokenBytes = [deviceToken bytes];
NSString *hexToken = [NSString stringWithFormat:@"%08x%08x%08x%08x%08x%08x%08x%08x",
                      ntohl(tokenBytes[0]), ntohl(tokenBytes[1]), ntohl(tokenBytes[2]),
                      ntohl(tokenBytes[3]), ntohl(tokenBytes[4]), ntohl(tokenBytes[5]),
                      ntohl(tokenBytes[6]), ntohl(tokenBytes[7])];
[[MyModel sharedModel] setApnsToken:hexToken];

}

152voto

Vlad Polyanskiy Points 181

Vous pouvez utiliser cette

- (NSString *)stringWithDeviceToken:(NSData *)deviceToken {
const char *data = [deviceToken bytes];
NSMutableString *token = [NSMutableString string];

for (int i = 0; i < [deviceToken length]; i++) {
[token appendFormat:@"%02.2hhX", data[i]];
}

return [token copy];
}

34voto

kulss Points 1100

utilisez ceci :

 NSString* deviceToken = [[[[[newDeviceToken description]
                     stringByReplacingOccurrencesOfString: @"<" withString: @""] 
                    stringByReplacingOccurrencesOfString: @">" withString: @""] 
                   stringByReplacingOccurrencesOfString: @" " withString: @""] retain];

    NSLog(@"%@",deviceToken);

14voto

Zeb Points 300

C'est ma solution et Cela fonctionne bien dans mon application:

    NSString* newToken = [[[NSString stringWithFormat:@"%@",deviceToken] 
stringByTrimmingCharactersInSet:[NSCharacterSet characterSetWithCharactersInString:@"<>"]] stringByReplacingOccurrencesOfString:@" " withString:@""];
  • convertir NSData de NSString avec stringWithFormat
  • garniture "<>"
  • enlever les espaces

3voto

k06a Points 2741

C'est un peu plus courte solution:

NSData *token = // ...
const uint64_t *tokenBytes = token.bytes;
NSString *hex = [NSString stringWithFormat:@"%016llx%016llx%016llx%016llx",
                 ntohll(tokenBytes[0]), ntohll(tokenBytes[1]),
                 ntohll(tokenBytes[2]), ntohll(tokenBytes[3])];

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X