Идентификатор рекламы и идентификатор ForVendor возвращают "00000000-0000-0000-0000-000000000000"
Я реализовал эти методы, чтобы получить advertisingIdentifier
а также identifierForVendor
:
- (NSString *) advertisingIdentifier
{
if (!NSClassFromString(@"ASIdentifierManager")) {
return [OpenUDID value];
}
return [[[ASIdentifierManager sharedManager] advertisingIdentifier] UUIDString];
}
- (NSString *) identifierForVendor
{
if ([[UIDevice currentDevice] respondsToSelector:@selector(identifierForVendor)]) {
return [[[UIDevice currentDevice] identifierForVendor] UUIDString];
}
return @"";
}
- (BOOL)isAdvertisingTrackingEnabled
{
if (NSClassFromString(@"ASIdentifierManager") && ![[ASIdentifierManager sharedManager] isAdvertisingTrackingEnabled]) {
return NO;
}
return YES;
}
На симуляторе все работает, как и должно быть, и я могу получить представление 2 строки идентификаторов.
Но когда я запускаю iPhone 3GS с iOS 6.0 (10A403), эти 2 метода возвращают "00000000-0000-0000-0000-000000000000" в качестве идентификатора. Уже сделано:
- Перезапустил устройство
- Удалил приложение и переустановил
- Создана и Ad-Hoc сборка, установлена, удалена и установлена снова
- Запустите этот код из другого приложения
- Протестировано на iPad 2 с iOS 6.0 (10A403) и все прошло нормально (у меня правильные идентификаторы)
3 ответа
Кажется, это ошибка в iOS. Наблюдает ту же проблему на устройствах, которые были обновлены по беспроводной сети, но устройства, обновленные с помощью Xcode или iTunes, работают, как и ожидалось, без нулей.
Пробовал те же шаги, что и вы, и единственной общей темой было беспроводное обновление (плохо) и привязное обновление (хорошо).
Обновление: пользователи, которые переходят непосредственно с iOS 5.1 на 6.1 через эфир, испытывают другое поведение. Каждый раз, когда приложение полностью закрывается и перезапускается, новое значение возвращается identifierForVendor
, Этого можно было бы ожидать, если бы приложение удалялось и переустанавливалось, но это не так.
Apple подтвердила эту ошибку в своей системе в ответ на запрос службы технической поддержки. Они сказали, что identifierForVendor
а также advertisingIdentifier
иногда возвращение всех нулей можно увидеть как в сборках для разработчиков, так и в приложениях, загружаемых по беспроводной сети из App Store. У них нет работы, и они не могут сказать, когда проблема будет решена.
В некоторых ситуациях API возвращает пустой ответ для идентификатора, например, после восстановления устройства.
Предлагаем отложить получение идентификатора, поэтому вы можете вызвать sometginh так:
-(void)retrieveID
{
if (<check fails>)
[self performSelector:@"retrieveID" withObject:nil afterDelay:1.0];
}
И получить удостоверение личности позже.