2013-04-13 17 views
10

Voglio creare UDID per il dispositivo iphone/ipad che rimarrà invariato, quindi per favore dimmi se qualcuno ne ha un'idea?Un modo alternativo per creare un ID univoco

Ho una ricerca su google e stack overflow, ma non ho la soluzione.

Inoltre, alcuni suggeriscono di utilizzare OpenUDID e CFUUID, ma CFUUID sarà diverso quando gli utenti eliminano e reinstallano l'app. Ma voglio usare lo stesso UDID per applicazione che verrà generato alla prima volta e che dovrebbe rimanere invariato per tutta la vita per dispositivo per ogni applicazione.

+0

che si potrebbe aggiungere un ID per l'applicazione ad un ID del dispositivo e prendere l'hash codice di quello. Non so come ottenere un ID dispositivo fisso su iThings. –

risposta

8

EDIT 2

A causa di aggiornamento iOS e come da nuova documentazione identifierForVendor non mantiene il valore su app re-installazioni. Ho visto risposta a this link. Questo può aiutare in un modo o nell'altro. Solo per notare solo UDID manterrà anche se il ripristino del sistema, quindi probabilmente questa risposta può diventare una limitazione per gli sviluppatori che cercano l'UDID a vita anche al reset del sistema. Oltre a questo, la risposta citata sembra utile.

Guarda anche il summary here.


identifierForVendor è disponibile da UIDevice Class Reference.

Il valore di questa proprietà è la stessa per le applicazioni che vengono dal stesso fornitore esecuzione sullo stesso dispositivo.

[[UIDevice currentDevice] identifierForVendor].UUIDString 

Nota:Disponibile in iOS 6.0 e versioni successive.

EDIT 1 Come da nuovo rilascio di UIDevice Class Reference

Il valore della offerta rimane la stessa, mentre l'applicazione (o altro applicazione dello stesso fornitore) è installato sul dispositivo iOS. Il valore cambia quando l'utente elimina tutte le app del fornitore dal dispositivo e successivamente ne reinstalla uno o più. Pertanto, se la tua app memorizza il valore di questa proprietà in qualsiasi luogo, dovresti gestire con garbo le situazioni in cui l'identificatore cambia.


EDIT

vorrei di vedere a this popular link

1) MD5 del MAC + CFBundleIdentifier

[[UIDevice currentDevice] uniqueDeviceIdentifier] 

Questo rimarrà lo stesso per app ma diverso per ciascuno app. Se elimini e reinstalla la tua app, sarà uguale per ogni app.

2) MD5 del MAC

[[UIDevice currentDevice] uniqueGlobalDeviceIdentifier] 

Ciò rimarrà uguale per tutti app dal dispositivo stesso. Se elimini e reinstalla la tua app, sarà uguale per dispositivo.

EDIT 3

Nota: Questa soluzione in iOS 7 non è più utile come uniqueIdentifier non è più disponibile da iOS7.

+0

: - Il valore dell'identificatoreForVendor non verrà modificato per quell'app per quel dispositivo, giusto? –

+1

Il valore dell'identificatoreForVendor non verrà mai modificato per Vident + App + Device perticulari. –

+0

Parole documento Apple: "Il valore di questa proprietà è lo stesso per le app che provengono dallo stesso fornitore in esecuzione sullo stesso dispositivo. Viene restituito un valore diverso per le app sullo stesso dispositivo provenienti da fornitori diversi e per app su diversi dispositivi indipendentemente dal venditore. " –

0

Generare un UUID (utilizzando l'API CFUUIDRef, forse) per la prima volta e memorizzarlo nel portachiavi.

+0

Se l'utente aggiorna ios e/o installa un nuovo ios, i dati del portachiavi verranno rimossi o no? –

+0

Voglio memorizzare l'ID univoco creato per tutta la vita, è possibile? –

+0

@sunilz Lo so, ho letto la tua domanda. La mia risposta è qui. Non so quale sia il tuo problema. –

2

È importante notare la differenza tra un UDID e un UUID.

UDID "ID dispositivo univoco" è specifico dell'hardware. Non cambia mai per un particolare dispositivo. Per questo motivo, è diventato un problema di privacy e Apple sta bloccando le app che tentano di utilizzare questo. Di conseguenza, Apple ha generato un hash "id del dispositivo" di opt-out, in particolare per l'utilizzo pubblicitario. Questo nuovo ID hash si chiama IFA ed è disponibile in iOS 6.0+.

UUID "ID universalmente univoco" non specifico dell'hardware. È un hash utilizzato per identificare un dispositivo; ma non particolarmente un valore assoluto. Ad esempio, PhoneGap genera un UUID in base alle proprietà del dispositivo; questo è ciò che ottieni quando fai device.uuid. Se si elimina l'app e si reinstalla, si otterrà un nuovo hash ID. UUID non viene bloccato da Apple.

Penso che la soluzione migliore sia utilizzare l'IFA, con OpenUDID come backup per iOS < 6.0.

Ecco il codice che usiamo. Se IFA non è disponibile, ottieni OpenUDID. [[È necessario installare OpenUDID, saperne di più su che qui, https://github.com/ylechelle/OpenUDID.]]

NSString* uuid = nil; 
if ([[UIDevice currentDevice] respondsToSelector:@selector(identifierForVendor)]) { 
    // IOS 6 new Unique Identifier implementation, IFA 
    uuid = [[[UIDevice currentDevice] identifierForVendor] UUIDString]; 
} else { 
    // Before iOS6 (or if IFA disabled) you shoud use a custom implementation for uuid 
    // Here I use OpenUDID (you have to import it into your project) 
    // https://github.com/ylechelle/OpenUDID 
    NSString* openUDID = [OpenUDID value]; 
    uuid = [OpenUDID value]; 
} 
+0

Grazie per la risposta. Ma ho una domanda, se si elimina l'app e si reinstalla, si spegne il dispositivo, si aggiorna o si installa un nuovo ios, quindi OpenUDID rimarrà uguale al precedente? –

+0

Puoi leggere ulteriori informazioni su OpenUDID sul sito del progetto. Ma praticamente è una stringa universalmente unica condivisa da più applicazioni sul dispositivo. Ad esempio, Gmail, Chrome e Dropbox utilizzano OpenUDID (non ne ho idea, ma solo per usare i nomi per le app). La prima applicazione che scarichi afferma che Gmail imposterà l'OpenUDID. La seconda e la terza applicazione leggeranno la stessa stringa OpenUDID. Supponiamo che tu elimini Gmail; invece di perdere la stringa OpenUDID, verrà mantenuta dalle altre app che la utilizzano. (Per sbarazzartene, tutte le app devono essere state eliminate). – Federico