it-roy-ru.com

Идентификатор рекламы и идентификатор 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) и все прошло хорошо (у меня есть правильные идентификаторы)
25
J. Costa

Кажется, это ошибка в iOS. Видна та же проблема на устройствах, которые были обновлены по беспроводной сети, но устройства, обновленные с помощью Xcode или iTunes, работают, как и ожидалось, без нулей.

Пробовал те же шаги, что и вы, и единственной общей темой было беспроводное обновление (плохо) и привязное обновление (хорошо).

Обновление: Пользователи, которые переходят непосредственно с iOS 5.1 на 6.1 по беспроводной связи, испытывают другое поведение. Каждый раз, когда приложение полностью закрывается и перезапускается, identifierForVendor возвращает новое значение. Этого можно было бы ожидать, если бы приложение удалялось и переустанавливалось, но это не так.

24
MattP

Apple подтвердила эту ошибку в своей системе в ответ на запрос службы технической поддержки. Они сказали, что identifierForVendor и advertisingIdentifier иногда Возвращая все нули, можно увидеть как в сборках для разработчиков, так и в приложениях, загружаемых по воздуху из App Store. У них нет работы, и они не могут сказать, когда проблема будет решена.

8
Peter B. Kramer

В некоторых ситуациях API возвращает пустой ответ для идентификатора, например, после восстановления устройства.

Предлагаем отложить получение идентификатора, поэтому вы можете вызвать sometginh так:

-(void)retrieveID
{
    if (<check fails>)
        [self performSelector:@"retrieveID" withObject:nil afterDelay:1.0];
}

И получить удостоверение личности позже.

0
vedrano