2011-10-18 19 views
10

Eventuali duplicati:
UIDevice uniqueIdentifier Deprecated - What To Do Now?UUID per applicazione su iOS5

come mi aspetto siete a conoscenza di, il uniqueIdentifier in è deprecato in iOS5. Quello che sto cercando fondamentalmente la stessa funzionalità per iOS5.

Quello che ho capito dalla documentazione è che Apple desidera che noi (sviluppatori) creiamo il nostro UUID (usando CFUUIDCreate credo) e lo memorizziamo nello NSUserDefaults. Questo, tuttavia, mi fa rabbrividire un po 'e non mi sembra affatto di salvezza. Sembra un po 'inutile avere un UUID in questo caso.

Il motivo per cui ho bisogno di un UUID è perché invio di un gruppo di informazioni incluso UUID ai miei server nel processo di autenticazione e vorrei poter saltare alcuni passaggi se il server può "indovinare" chi è l'utente la prossima volta l'app viene avviata o reinstallata o un'altra app implementa la mia libreria. CFUUIDCreate non sembra aiutarmi con questo.

Ho dato una rapida occhiata a gekitz, ma a quanto ho capito, si basa esclusivamente sull'indirizzo MAC della "scheda" Ethernet nel telefono. Questo non è adatto poiché ho la vaga sensazione che l'indirizzo MAC sia mutevole. Il uniqueIdentifier in era

Una stringa alfanumerica unica per ogni dispositivo in base a vari dettagli hardware.

Currenly Ho scritto questo codice, che recupera un UUID. Ma non appena pulisco XCode e reinstallo l'app sul telefono, ottengo un nuovo UUID.

NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; 
NSString *UUID = @""; 

if (![defaults valueForKey:@"UUID"]) 
{ 
    CFUUIDRef UUIDRef = CFUUIDCreate(kCFAllocatorDefault); 
    CFStringRef UUIDSRef = CFUUIDCreateString(kCFAllocatorDefault, UUIDRef); 
    UUID = [NSString stringWithFormat:@"%@", UUIDSRef]; 

    [defaults setObject:UUID forKey:@"UUID"]; 
} 
else { 
    UUID = [defaults valueForKey:@"UUID"]; 
} 

[deviceInformation setObject:UUID forKey:@"UUID"]; 

Per riassumere, la mia domanda è la seguente:
c'è qualche modo solido di creare un UUID che si basa sul dispositivo che è "duro" da manomettere e mi dà come ricevitore un po ' qualcosa su cui contare e fidarsi? Questo non deve essere basato sul dispositivo, può essere basato sull'app come un UUID di app purché lo stesso dopo una reinstallazione.

+0

Perché un UUID da 'CFUUIDCreate', memorizzato con' NSUserDefaults', non soddisfa il tuo caso di utilizzo dell'autenticazione? Ogni installazione invierebbe sempre lo stesso valore (fino a quando non verrebbe cancellato e reinstallato). Può essere fastidioso durante lo sviluppo, ma un utente non elimina le sue app molto spesso, vero? – DarkDust

+0

Inoltre, perché il MAC cambierebbe? Può cambiare su un PC in cui è possibile modificarlo con qualche strumento, ma fino a quando non lo fai, i MAC non cambiano mai. – DarkDust

+1

@DarkDust Non è un possibile duplicato. Ho letto quel post anche prima di pubblicare il mio. Hai già risposto al tuo secondo commento nel commento stesso. La prossima volta che l'app verrà installata ho bisogno dello stesso UUID, non di uno nuovo per quella installazione. Riesco a eliminare le app in modo abbastanza regolare e sono anche un utente. Tuttavia, questa domanda SO non riguarda le abitudini degli utenti, indipendentemente da cosa siano. I miei requisiti sono un UUID che è unico ma uguale a ogni installazione. –

risposta

7

Finora, il MAC sembra essere l'unico modo "stabile" noto per identificare un dispositivo.

Dai uno sguardo allo Erica Sadun's UIDevice(Hardware) category, noterai che l'unica cosa utile per l'identificazione è il MAC.

Ha anche una categoria UIDevice(IOKit_Extensions) che fornisce IMEI e numero di serie. Tuttavia, IOKit è un'API privata. Erica wrote:

Come ha scritto su Twitter iPhone evangelista Matt Drance, "IOKit non è pubblico su iPhone mancanza di intestazioni e documenti è raramente una svista.".

Quindi utilizzare IOKit potrebbe farvi rifiutare.

Per quanto ne so non c'è modo per un utente di modificare il MAC senza jailbreak del dispositivo (e quindi può fare qualsiasi cosa che vuole comunque). Quindi il mio suggerimento è di ignorare i jailbreaker e semplicemente utilizzare un UUID basato sul MAC.

Avviso! Le API degli indirizzi MAC non funzioneranno su iOS 7.

+0

Come ho accennato nella chat, le librerie private sono un po ' no-no. Apple non lo permetterà. Dovrò usare l'indirizzo Mac. Thnx per il tuo aiuto! –