Тот же код сработал на следующий день
Событие application:didRegisterForRemoteNotificationsWithDeviceToken:deviceToken
работает сейчас (на следующий день). Обратите внимание, что , похоже, не имеет ничего общего с предупреждением , спрашивающим, хотите ли вы включить push-уведомления, поскольку я не видел это предупреждение, когда оно начало работать.
Одна вещь, которую я до сих пор нахожу странным, это то, что вчера, используя Ad Hoc, создавалось событие. application:didRegisterForRemoteNotificationsWithDeviceToken:deviceToken
КАЖДЫЙ РАЗ запускал приложение. Однако сборка DEBUG с профилем обеспечения разработчика никогда не запускалась вообще. Тот же код этим утром работает (и срабатывает каждый раз, когда используется сборка DEBUG с профилем обеспечения разработчика) .... Что-то в устройстве (внутренний таймер / тайм-аут) должно быть сброшено.
Пример кода
Ниже приведен код, который я использовал в событии получения deviceToken. Он использует Urban Airship в качестве поставщика для Apple Push Notification Server (APNS). Я удалил имя пользователя и пароли из кода. Я надеюсь, что это полезно для других, кто пытается разобраться.
- (void)application:(UIApplication *)application
didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken
{
NSString *tokenStr = [[[[deviceToken description]
stringByReplacingOccurrencesOfString:@"<" withString:@""]
stringByReplacingOccurrencesOfString:@">" withString:@""]
stringByReplacingOccurrencesOfString:@" " withString:@""];
NSLog(@"Device Token (raw): %@", deviceToken);
NSLog(@"Device Token (string): %@", tokenStr);
UIAlertView *alert = [[[UIAlertView alloc] initWithTitle:@"Device Token"
message:tokenStr
delegate:nil
cancelButtonTitle:nil
otherButtonTitles:@"OK", nil] autorelease];
[alert show];
// Code to send token to server
NSString *urlString = [NSString stringWithFormat:
@"https://go.urbanairship.com/api/device_tokens/%@", tokenStr];
ASIHTTPRequest *request = [ASIHTTPRequest requestWithURL:
[NSURL URLWithString:urlString]];
#if APP_STORE_RELEASE
[request addBasicAuthenticationHeaderWithUsername:@"aaaaaaaaaaaaaaaaaaaaaa"
andPassword:@"bbbbbbbbbbbbbbbbbbbbbb"];
#else
[request addBasicAuthenticationHeaderWithUsername:@"cccccccccccccccccccccc"
andPassword:@"dddddddddddddddddddddd"];
#endif
request.requestMethod = @"PUT";
[request startAsynchronous];
}
Обратите внимание, что описание NSData вернет шестнадцатеричную строку, которая начинается с "<" и заканчивается ">". Между ними пробелы. Мой оригинальный подход состоял в том, чтобы преобразовать NSData в строку, используя NSUTF8StringEncoding
, но это неверно (поскольку вы хотите, чтобы токен был шестнадцатеричной строкой ).