2012-09-26 8 views
25

Ho implementato questo metodi per ottenere advertisingIdentifier e identifierForVendor:Il ritorno advertisingIdentifier e identifierForVendor "00000000-0000-0000-0000-000000000000"

- (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; 
} 

sul simulatore che tutto funzioni come dovrebbe essere e posso ottenere la rappresentazione degli ID a 2 stringhe.

Ma quando corro da iPhone 3GS con iOS 6.0 (10A403), questi 2 metodi restituiscono "00000000-0000-0000-0000-000000000000" come identificatore. già fatto:

  • riavviato il dispositivo
  • rimosso l'app e reinstallato
  • Creato e Ad-Hoc costruzione, installazione, rimosso e installato di nuovo
  • eseguire questo codice da un'altra app
  • Tested su iPad 2 con iOS 6.0 (10A403) e tutto è andato ok (ho gli identificatori corretti)

risposta

24

Sembra un bug in iOS. Vedere lo stesso problema su dispositivi che sono stati aggiornati over-the-air, ma i dispositivi aggiornati con Xcode o iTunes funzionano come previsto senza zeri.

Ho provato passi simili a te, e l'unico tema comune era l'over-the-air (cattivo) rispetto all'aggiornamento cablato (buono).

Aggiornamento: Gli utenti che si spostano direttamente da iOS 5.1 a 6.1 over-the-air sperimentano un comportamento diverso. Ogni volta che l'app viene chiusa completamente e riavviata, viene restituito un nuovo valore da identifierForVendor. Ci si aspetterebbe se l'app venisse disinstallata e reinstallata, ma non è così.

+0

Questo sembra essere corretto come ho trovato dopo [ricerca] (https://devforums.apple.com/search.jspa?resultTypes=MESSAGE&peopleEnabled=true&q=00000000-0000-0000-0000-000000000000) su Apple Forum (è necessario accedere con il proprio account sviluppatore) –

+9

È abbastanza pulito come Apple ha rimosso qualcosa (UID) e lo ha sostituito con qualcosa che * non funziona *. –

+5

Abbiamo appena aggiornato un paio di dispositivi su iOS 6.0.1 over-the-air e 'identifierForVendor' sembra essere corretto. – MattP

8

Apple ha confermato questo errore nel proprio sistema in risposta a una richiesta di Incidente di supporto tecnico. Hanno detto che identifierForVendor e advertisingIdentifier a volte restituendo tutti gli zeri possono essere visualizzati sia nelle build di sviluppo che nelle app scaricate in modalità wireless dall'App Store. Non hanno alcun problema e non possono dire quando il problema verrà risolto.

+0

Puoi per favore postare un link dove posso vedere la loro risposta, ho fatto advertisingIdentifier come chiave primaria e ora sta causando enormi problemi nella mia app – Geet

0

Ci sono alcune situazioni in cui l'API restituisce una risposta vuota per ID come dopo il ripristino del dispositivo.

suggerimento è di rinviare ID retreival, in modo da poter chiamare sometginh in questo modo:

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

E prendere ID tardi.

Problemi correlati