2012-12-20 12 views
5

Gibt es eine Möglichkeit, die iOS-Geräte-ID im iOS SDK abzurufen? Ich möchte die Kennung für den Zugriff auf die von der Xcode in Organizer präsentiert wird - Geräte Abschnitt, so etwas wie: 21xb1fxef5x2052xec31x3xd3x48ex5e437xe593Abrufen der iOS-Geräte-ID

+0

Warum wollen Sie diese Kennung erhalten ? –

+2

Ich muss das Gerät eindeutig identifizieren – aumanets

Antwort

7

Vom Apple Documentation:

Eine alphanumerischen Zeichenfolge einzigartig für jedes Gerät auf verschiedene Hardware- Details basiert. (Read-only) (Veraltete in iOS 5.0. Nutzen Sie die identifierForVendor Eigenschaft dieser Klasse oder der advertisingIdentifier Eigenschaft der ASIdentifierManager Klasse statt, gegebenenfalls, oder verwenden Sie die UUID Methode der NSUUID Klasse eine UUID erstellen und schreiben es an die Benutzerstandarddatenbank.

)
-1

Ja, es gibt.

[[UIDevice currentDevice] uniqueIdentifier] 

EDIT: jedoch diese in iOS 5. sollten Diese Kennung ist veraltet nicht mehr, um weitere Informationen in iOS 5. Lesen this SO Post verwendet werden.

+3

Dies ist in iOS 5 veraltet und Anwendungen, die dies verwenden, werden nicht in den App Store erlaubt. –

12

Es ist wie Sie sieht immer noch 6 UDID unter iOS zugreifen kann, aber es veraltet ist seit iOS 5.0 und Sie sollen es nicht verwenden (sowieso Du, dass Warnmeldungen angezeigt werden)

[UIDevice currentDevice].uniqueIdentifier 

Wenn Sie benötigen eindeutige Kennung sollten Sie lieber verwenden:

[UIDevice currentDevice].identifierForVendor 

oder wenn es mit irgendeiner Art von Werbung verbunden dann:

// from AdSupport.framework 
[ASIdentifierManager sharedManager].advertisingIdentifier 

Allerdings sind diese zwei neuen Eigenschaften nur unter iOS> = 6.0, auch advertisingIdentifier ist nicht wirklich einzigartig (ich bekomme viele Duplikate davon).

Ich nehme an, dass Sie so etwas tun können, wenn Sie wan't auch iOS < 6 zu unterstützen:

UIDevice *device = [UIDevice currentDevice]; 
NSString *ident = nil; 
if ([device respondsToSelector:SEL(identifierForVendor)]) { 
    ident = [device.identifierForVendor UUIDString]; 
} else { 
    ident = device.uniqueIdentifier; 
} 

aber ich bin nicht sicher, wie Apfel, dass bei der Überprüfung reagieren.

Sie können auch eine Drittanbieterlösung wie openUDID oder secureUDID verwenden. Offene und sichere UDIDs sind veraltet - verwenden Sie die ID für Anbieter/Werbung.


aktualisieren

Eine weitere Möglichkeit ist die MAC-Adresse als Basis für eindeutigen Hash, zum Beispiel die Verwendung von Code aus ODIN1 verwenden - source is here

Ab iOS7 MAC-Adresse ist kein länger Erhältlich. (Man kann es lesen, aber es wird immer die gleiche Dummy-Adresse sein 02: 00: 00: 00: 00: 00).

+0

Die Eigenschaft ist in iOS 5.0 veraltet – aumanets

+0

yeah, sorry, zuerst schrieb ich uniqueIdentifier anstelle von identifierForVendor, aber ich denke sowieso, es war ziemlich offensichtlich, dass etwas falsch ist, wenn ich schrieb, dass Sie nicht uniqueIdentifier und in der zweiten Zeile, dass Sie verwenden sollten sollte es verwenden;) – lupatus

+0

SecureUDID wird nicht mehr von Crashlytics unterstützt; Sie schreiben: "Wir empfehlen stattdessen, Apples iOS 6-Anbieter und Werbe-IDs zu verwenden." –

0

können Sie eindeutige Gerätekennung als

[[UIDevice currentDevice] uniqueIdentifier] 
0
+ (NSString *)uuid 
{ 
    NSString *uuidString = nil; 
    CFUUIDRef uuid = CFUUIDCreate(NULL); 
    if (uuid) { 
     uuidString = (NSString *)CFUUIDCreateString(NULL, uuid); 
     CFRelease(uuid); 
    } 
    return [uuidString autorelease]; 
} 

Es funktioniert 100% finden, auch an Simulatoren zu ...

2
NSString* identifier = nil; 
if([UIDevice instancesRespondToSelector:@selector(identifierForVendor)]) { 
    // iOS 6+ 
    identifier = [[[UIDevice currentDevice] identifierForVendor] UUIDString]; 
} else { 
    // before iOS 6, so just generate an identifier and store it 
    identifier = [[NSUserDefaults standardUserDefaults] objectForKey:@"identiferForVendor"]; 
    if(!identifier) { 
    CFUUIDRef uuid = CFUUIDCreate(NULL); 
    identifier = (__bridge_transfer NSString*)CFUUIDCreateString(NULL, uuid); 
    CFRelease(uuid); 
    [[NSUserDefaults standardUserDefaults] setObject:identifier forKey:@"identifierForVendor"]; 
    } 
}