2012-09-26 9 views
25

Ich habe diese Methoden implementiert advertisingIdentifier und identifierForVendor zu bekommen: wie sollte es sein und ich kannDie advertisingIdentifier und identifierForVendor return „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; 
} 

Auf Simulator alles funktioniert bekommen die 2 Zeichenfolgen ID-Darstellung.

Aber Wenn ich vom iPhone 3GS mit iOS 6.0 (10A403) starte, geben diese 2 Methoden "00000000-0000-0000-0000-000000000000" als Kennung zurück. bereits getan:

  • das Gerät neu gestartet
  • die App entfernt und neu installiert
  • Erstellt und Ad-Hoc-Build installiert, entfernt und wieder
  • Führen Sie diesen Code aus einer anderen App installiert
  • Getestet auf iPad 2 mit iOS 6.0 (10A403) und alles ging ok (ich habe die richtigen Bezeichner)

Antwort

24

Es scheint ein Fehler in iOS zu sein. Dasselbe Problem tritt bei Geräten auf, die über Funk aktualisiert wurden, aber Geräte, die mit Xcode oder iTunes aktualisiert wurden, funktionieren wie erwartet ohne Nullen.

Versuchte ähnliche Schritte wie Sie, und das einzige gemeinsame Thema war Over-the-Air (schlecht) versus gebunden Upgrade (gut).

Update: Benutzer, die direkt von iOS 5.1 zu 6.1 über das Luftbild wechseln, erleben ein anderes Verhalten. Jedes Mal, wenn die App vollständig geschlossen und neu gestartet wird, wird ein neuer Wert von identifierForVendor zurückgegeben. Dies wäre zu erwarten, wenn die App deinstalliert und neu installiert wird, aber das ist nicht der Fall.

+0

Dies scheint korrekt zu sein, wie ich nach [Suche] (https://devforums.apple.com/search.jspa?resultTypes=MESSAGE&peopleEnabled=true&q=00000000-0000-0000-0000-000000000000) auf Apple gefunden habe Foren (Sie müssen sich mit Ihrem Entwicklerkonto anmelden) –

+9

Es ist ziemlich ordentlich, wie Apple etwas (UID) entfernt und durch etwas ersetzt hat, das * nicht funktioniert *. –

+5

Wir haben gerade ein paar Geräte auf iOS 6.0.1 over-the-air aktualisiert und 'identifierForVendor' scheint behoben zu sein. – MattP

8

Apple hat diesen Fehler in ihrem System als Reaktion auf eine Vorfallanforderung für einen technischen Support bestätigt. Sie sagten, dass identifierForVendor und advertisingIdentifier manchmal alle Nullen zurückgegeben werden können sowohl in den Entwicklungsversionen als auch in den Apps, die über den Air-Store aus dem App Store heruntergeladen werden. Sie haben keine Arbeit und können nicht sagen, wann das Problem behoben sein wird.

+0

Können Sie bitte einen Link posten, wo ich ihre Antwort sehen kann, ich hatte advertisingIdentifier als Primärschlüssel gemacht und jetzt verursacht es große Probleme in meiner App – Geet

0

Es gibt einige Situationen, in denen die API eine leere Antwort für die ID zurückgibt, z. B. nach der Wiederherstellung des Geräts.

Vorschlag ist ID retreival zu verschieben, so dass Sie sometginh wie folgt aufrufen können:

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

Und holt ID.

Verwandte Themen