В какой кодировке находится токен устройства для APN? - PullRequest
2 голосов
/ 11 сентября 2010

Можно ли получить маркер устройства, возвращенный из приложения: (UIApplication *) приложения didRegisterForRemoteNotificationsWithDeviceToken: (NSData *) метод deviceToken?Поскольку я не очень хорошо разбираюсь в PHP, я бы хотел, чтобы мой пользователь вручную вводил токен в программу на своем компьютере, которая будет использоваться для отправки уведомления.Но я не могу получить токен от этого метода.Он нормально регистрируется с помощью NSLog, но когда я использую NSString initWithData:, я всегда получаю некоторые загадочные вещи.Я полагаю, неправильная кодировка?

Заранее спасибо за помощь!

Ответы [ 3 ]

7 голосов
/ 05 марта 2011

Токен является объектом NSData, который указывает на необработанный двоичный блок данных, а не на строку. Два наиболее распространенных способа преобразования его в строку:

  1. base64 кодировать его Скачать http://projectswithlove.com/projects/NSData_Base64.zip
NSString *str = [deviceToken base64EncodedStringWithoutNewlines];
  1. Используйте описание NSData для получения шестнадцатеричного дампа строки и его очистки
NSString *str = [[deviceToken description] stringByReplacingOccurrencesOfString:@"<" withString:@""];
str = [str stringByReplacingOccurrencesOfString:@">" withString:@""];
str = [str stringByReplacingOccurrencesOfString: @" " withString: @""];

Я предпочитаю # 1, потому что последний зависит от внутреннего способа, которым работает вызов описания NSData, но любой из них должен работать.

3 голосов
/ 09 июля 2014

Вы можете получить шестнадцатеричную строку, не беспокоясь о поведении метода NSData description, с помощью:

+ (NSString *)hexadecimalStringFromData:(NSData *)data {
    NSMutableString *hexToken;
    const unsigned char *iterator = (const unsigned char *) [data bytes];
    if (iterator) {
        hexToken = [[NSMutableString alloc] init];
        for (NSInteger i = 0; i < data.length; i++) {
            [hexToken appendString:[NSString stringWithFormat:@"%02lx", (unsigned long) iterator[i]]];
        }
        return hexToken;
    }
    return nil;
}
0 голосов
/ 01 декабря 2017

токен - NSData. Вы можете преобразовать в строку. И удалить <и> и пробелы

NSString *devToken = [[deviceToken description] stringByTrimmingCharactersInSet:[NSCharacterSet characterSetWithCharactersInString:@"<>"]];
devToken = [devToken stringByReplacingOccurrencesOfString:@" " withString:@""];


NSLog(@"token: %@",devToken);
...