2012-12-20 19 views
5

Esiste un modo per ottenere l'identificativo del dispositivo iOS nell'SDK di iOS? Vorrei accedere l'identificativo che viene presentato dal Xcode in Organizzatore - Dispositivi sezione, qualcosa di simile: 21xb1fxef5x2052xec31x3xd3x48ex5e437xe593Recupera identificativo dispositivo iOS

+0

Perché si vuole ottenere tale identificatore ? –

+2

Ho bisogno di identificare univocamente il dispositivo – aumanets

risposta

7

Dal Apple Documentation:

Una stringa alfanumerica unica per ogni dispositivo in base a vari hardware dettagli. (sola lettura) (Obsoleto in iOS 5.0. Utilizzare la proprietà identificatoreForVendor di questa classe o la proprietà di IDIdentifier advertising della classe ASIdentifierManager invece, come appropriato, o utilizzare il metodo UUID della classe NSUUID su creare un UUID e scrivere al database di default dell'utente.)

-1

Sì c'è.

[[UIDevice currentDevice] uniqueIdentifier] 

EDIT: Tuttavia questo è deprecato in iOS 5. Questo identificatore non deve più essere utilizzato in iOS 5. Leggi this SO postale per maggiori dettagli.

+3

Questo è obsoleto in iOS 5 e le applicazioni che lo utilizzano non saranno consentite nell'App Store. –

12

Sembra che si può accedere UDID sotto iOS 6 ancora, ma è deprecato dal iOS 5.0 e non si deve utilizzare (in ogni caso avrai avvertimento circa che)

[UIDevice currentDevice].uniqueIdentifier 

Se è necessario identificatore univoco si dovrebbe invece usare:

[UIDevice currentDevice].identifierForVendor 

o se è collegato con un certo tipo di pubblicità allora:

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

Tuttavia queste due nuove proprietà sono disponibili solo in iOS> = 6.0, anche advertisingIdentifier non è davvero univoco (sto ricevendo molti duplicati da quello).

suppongo che si può fare una cosa del genere, se si wan't per supportare anche iOS 6 <:

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

ma non sono sicuro di come mela risponderà a quella durante la revisione.

È inoltre possibile utilizzare alcune soluzioni di terze parti come openUDID o secureUDID . Gli UDID aperti e sicuri sono deprecati - utilizzare l'identificatore per il venditore/la pubblicità.


Aggiornamento

più Una possibilità è quella di utilizzare l'indirizzo MAC come base per hash univoco, per esempio, è possibile utilizzare il codice ODIN1- source is here

Come dell'indirizzo iOS7 MAC c'è più a lungo disponibile. (si può leggere ma sarà sempre lo stesso indirizzo fittizio 02: 00: 00: 00: 00: 00).

+0

La proprietà è obsoleta in iOS 5.0 – aumanets

+0

sì, mi spiace, all'inizio ho scritto uniqueIdentifier invece di identifierForVendor, ma comunque penso che fosse abbastanza ovvio che qualcosa è sbagliato quando ho scritto che non dovresti usare uniqueIdentifier e in seconda linea che tu dovrebbe usarlo;) – lupatus

+0

SecureUDID non è più supportato da Crashlytics; scrivono: "Raccomandiamo di utilizzare invece il fornitore iOS 6 e gli identificatori pubblicitari di Apple". –

0

si possono trovare identificatore univoco del dispositivo come

[[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]; 
} 

Funziona al 100%, anche su simulatori di troppo ...

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"]; 
    } 
} 
Problemi correlati