2011-04-08 3 views
10

Il progetto I am on richiede due (o anche tre) identificatori univoci da iPhone o iPad. Lo so, lo so ... l'UDID dovrebbe essere sufficiente ma stiamo cercando di vedere se ci sono altri identificatori univoci che possiamo usare.Identificatore univoco iPhone/iPad BESIDI UUID/UDID?

È possibile ottenere l'IMEI, il numero di serie, l'indirizzo MAC, ecc. Dal telefono utilizzando IOKit.framework ma apparentemente questo è sfigurato da Apple e qualsiasi app che utilizza questo framework verrà rifiutata.

Qualcuno ha altre idee o identificatori che mi mancano che potrebbero essere utilizzati?

Grazie!

+4

Si può sempre cancellare l'UUID in modo enigmatico per ottenere altri due ID :) –

+0

@Nick: Non penso che l'OP voglia utilizzare l'UDID in alcun modo perché è facile falsificarlo, ad es. Scarica UDIDFaker da Cydia su un dispositivo jailbroken. –

+0

Apple si acciglia su IMEI? Non va bene, perché limita così tanto il valore a cui è destinato. – KevinDTimm

risposta

3

È possibile ottenere l'ICCID e l'IMSI (se presenti).

NSString *commcenter = @"/private/var/wireless/Library/Preferences/com.apple.commcenter.plist"; 
NSDictionary *dict = [NSDictionary dictionaryWithContentsOfFile:commcenter]; 
NSString *ICCID = [dict valueForKey:@"ICCID"]; 
NSString *IMSI = [dict valueForKey:@"IMSI"]; 

Penso che sia il massimo che si possa ottenere. Non conosco altre opzioni per ottenere un ID universale.

AGGIORNAMENTO 2013-03-13: Questo probabilmente è cambiato da quando ho scritto questa risposta quasi due anni fa. Al momento non ricordo nemmeno quale fosse la versione iOS. Anche come @joshis ha puntualizzato correttamente nei commenti "Non puoi farlo legalmente, dal momento che la tua app leggerà cose dall'esterno della sandbox dell'applicazione e quindi, sarà respinta, come specificato nelle Linee guida per la revisione di AppStore ...".

+0

Che cosa significa esattamente "legalmente"? L'app verrà rifiutata per la cattura di questi? – edcincy

+0

No, non puoi legalmente fare questo, dal momento che la tua app leggerà roba al di fuori della sandbox dell'applicazione e quindi, sarà respinta, come specificato in Linee guida per la revisione di AppStore, 2.6: le app che leggono o scrivono dati al di fuori dell'area designata saranno respinto – joshis

+0

Non riesco ad aprire tale directory: "wireless" in /private/var/wireless/Library/Preferences/com.apple.commcenter.plist.Sto provando a farlo su dispositivo non jailbroken – Sergio

1

Il metodo per ottenere l'UDID viene deprecato, si dovrebbe ora utilizzare CFUUIDCreate che credo potrebbe essere utilizzato più volte per ottenere più identificatori, se necessario

1

Forse si dovrebbe chiarire la tua domanda.

richiede due (o anche tre) identificatori univoci da iPhone o iPad

... è una contraddizione in termini. Se il tuo scopo è tracciare un dispositivo fisico specifico, un singolo identificatore univoco, per definizione, è sufficiente. Questo è ciò che significa univoco.

Forse, quello che vuoi veramente è tenere traccia di più cose sull'uso della tua app da parte di ciascun utente, a differenza del dispositivo. Supponiamo che l'app di gioco in rete consenta all'utente 1, 2 o 3 diverse personalità. Dal momento che l'utente crea una personalità distinta, è necessario monitorare ciascuna delle personalità di quell'utente tra tutte le personalità degli altri utenti.

Per questo tipo di scopo, generare e memorizzare un UUID* è una soluzione corretta e comune. iOS include le librerie per generare un valore UUID. L'unico problema è che se l'utente elimina e reinstalla l'app, l'archiviazione di quell'UUID potrebbe andare persa. Esistono soluzioni alternative per questa sfida, che puoi ottenere consultando su Google le discussioni relative alla sostituzione del tracciamento UDID con i valori UUID generati.


Questa domanda è un po 'più vecchia. Quindi dovrei menzionare: in iOS 5, Apple deprecated l'uso dell'UDID. A partire dal 2013-05-01 Apple è rejecting qualsiasi app che accede all'UDID.


(*) Non confondere un UUID con un UDID.UUID è un numero standard a 128 bit (32 cifre esadecimali) spesso utilizzato come identificatore univoco in molti scenari tecnologici. UDID è la stringa di 40 cifre esadecimali di Apple masterizzata su ogni dispositivo iOS per identificare in modo univoco ogni dispositivo.

7

Questa domanda è vecchia comunque una nuova unica, basata vendor, identificativo è stata ora aggiunta per sostituire l'UUID deprecato in iOS 6.

Il [UIDevice identifierForVendor] dovrebbero ora essere utilizzati al posto di [UIDevice uniqueIdentifier] che ora è deprecato come di iOS utilizzo 5,0

Esempio:

NSUUID *uuid = [[UIDevice currentDevice] identifierForVendor]; 
NSString *uuidString = [uuid UUIDString]; 
1

da Apple:

Il valore in questa proprietà rimane invariato mentre l'app (o un'altra app dello stesso fornitore) è installata sul dispositivo iOS. Il valore modifica quando l'utente elimina tutte le app di quel fornitore dal dispositivo e successivamente ne reinstalla uno o più.

Quindi, se si utilizza [UIDevice identifierForVendor] e l'utente elimina l'applicazione e reinstallarla, l'id sarà diverso (quindi nessun vero monitoraggio dispositivo fisico)

Perché non si utilizza SecureUDID?

NSString *domain = @"com.example.app"; 
NSString *key = @"mykey"; 
NSString *udid = [SecureUDID UDIDForDomain:domain usingKey:key]; 

In questo modo, anche se l'utente elimina l'app e la reinstalla, l'UDID sarà lo stesso. Ciò ti fornirà un monitoraggio coerente (o qualsiasi altra cosa tu voglia fare con l'UDID). Btw, quanto sopra è ancora consentito da Apple. Buon divertimento.

0

API DeviceCheck in iOS 11 è una soluzione interessante per ottenere un identificatore univoco, il vantaggio è che - il valore verrà mantenuto anche dopo che l'app è stata disinstallata. Quindi utilizzare casi come l'installazione di prova e i premi possono essere controllati efficacemente dagli sviluppatori.