2013-04-13 10 views
10

Ich möchte UDID für iPhone/iPad-Gerät erstellen, die unverändert bleiben wird, also bitte sagen Sie mir, wenn jemand eine Idee dafür haben?Alternative Möglichkeit zum Erstellen lebenslange eindeutige ID

Ich habe Suche um Google und Stack-Überlauf, aber keine Lösung bekommen.

Es wurde auch empfohlen, OpenUDID und CFUUID zu verwenden, aber CFUUID wird anders aussehen, wenn Benutzer Ihre App löschen und neu installieren. Aber ich möchte die gleiche UDID pro Anwendung verwenden, die zum ersten Mal generiert wird und sollte für die Lebensdauer pro Gerät für jede Anwendung unverändert bleiben.

+0

Denken Sie eine ID für die Anwendung auf eine Geräte-ID hinzufügen könnte und nehmen Sie die Hash -code davon. Ich weiß jedoch nicht, wie man eine feste Geräte-ID auf iThings bekommt. –

Antwort

8

EDIT 2

Wegen des iOS-Upgrade und nach neuer Dokumentation identifierForVendor nicht neu installiert Wert auf app behalten. Ich habe die Antwort unter this link gesehen. Dies kann auf die eine oder andere Weise helfen. Nur zu beachten, dass nur UDID beibehalten wird, selbst wenn das System zurückgesetzt wird, also kann diese Antwort für Entwickler, die lebenslange UDID selbst beim System-Reset suchen, eine Einschränkung darstellen. Ansonsten scheint die erwähnte Antwort nützlich zu sein.

Schauen Sie auch die summary here.


identifierForVendor ist von UIDevice Class Reference.

Der Wert dieser Eigenschaft ist für Anwendungen, die von der gleichen Hersteller kommen auf dem gleichen Gerät ausgeführt wird.

[[UIDevice currentDevice] identifierForVendor].UUIDString 

Hinweis:Erhältlich in iOS 6.0 und höher.

EDIT 1 Wie pro neuer Version von UIDevice Class Reference

Der Wert in dieser Eigenschaft bleibt gleich, während die Anwendung (oder eine andere app vom gleichen Hersteller) auf dem IOS-Gerät installiert ist. Der Wert ändert sich, wenn der Benutzer alle Apps dieses Anbieters vom Gerät löscht und anschließend eines oder mehrere von ihnen erneut installiert. Wenn Ihre App den Wert dieser Eigenschaft an einer beliebigen Stelle speichert, sollten Sie daher problemlos Situationen behandeln, in denen sich der Bezeichner ändert.


EDIT

Ich möchte Sie bei this popular link

1) MD5 von MAC + CFBundleIdentifier

[[UIDevice currentDevice] uniqueDeviceIdentifier] 

sehen Dies wird gleich bleiben pro App aber für jeden anders App Wenn du deine App löschst und neu installierst, wird sie für jede App gleich sein.

2) MD5 des MAC

[[UIDevice currentDevice] uniqueGlobalDeviceIdentifier] 

Dies wird für alle von der gleichen App Gerät gleich bleiben. Wenn du deine App löschst und neu installierst, wird sie für jedes Gerät gleich sein.

EDIT 3

Hinweis: Diese Lösung in iOS 7 ist nicht mehr nützlich als uniqueidentifier nicht mehr von iOS7 zur Verfügung steht.

+0

: - Der Wert von identifierForVendor wird für diese App für dieses Gerät nicht geändert, richtig? –

+1

Der Wert von identifierForVendor wird niemals für dieses spezielle Vender + App + Device geändert. –

+0

Wörter in Apple-Dokumenten: "Der Wert dieser Eigenschaft ist derselbe für Apps, die von demselben Anbieter auf demselben Gerät stammen. Für Apps auf demselben Gerät, die von verschiedenen Anbietern stammen, und für Apps auf anderen Geräten wird ein anderer Wert zurückgegeben Geräte unabhängig vom Anbieter. " –

0

Erzeugen Sie zum ersten Mal eine UUID (mit der API CFUUIDRef) und speichern Sie sie im Schlüsselbund.

+0

Wenn Benutzer ios aktualisieren und/oder neue ios installieren, werden Schlüsselbunddaten entfernt oder nicht? –

+0

Ich möchte eine eindeutige ID für die gesamte Lebensdauer speichern, ist das möglich? –

+0

@sunilz Ich weiß, ich habe deine Frage gelesen. Meine Antwort ist hier. Ich weiß nicht, was dein Problem ist. –

2

Es ist wichtig, den Unterschied zwischen einer UDID und einer UUID zu beachten.

UDID "eindeutige Geräte-ID" ist hardwarespezifisch. Es ändert sich nie für ein bestimmtes Gerät. Aus diesem Grund ist es zu einem Datenschutzproblem geworden und Apple blockiert Apps, die versuchen, dies zu nutzen. Aus diesem Grund hat Apple einen Opt-Out-fähigen "Geräte-ID" -Hash generiert, insbesondere für die Nutzung von Werbung. Dieser neue ID-Hash heißt IFA und ist in iOS 6.0 und höher verfügbar.

UUID "universelle eindeutige ID" ist nicht hardwarespezifisch. Es ist ein Hash, der verwendet wird, um ein Gerät zu identifizieren. aber nicht besonders ein absoluter Wert. Beispielsweise generiert PhoneGap eine UUID basierend auf Geräteeigenschaften. Das bekommst du, wenn du device.uuid tust. Wenn Sie die App löschen und neu installieren, erhalten Sie einen neuen ID-Hash. UUID wird nicht von Apple blockiert.

Ich denke, die beste Lösung ist die Verwendung der IFA mit OpenUDID als Sicherung für iOS < 6.0.

Hier ist der Code, den wir verwenden. Wenn IFA nicht verfügbar ist, rufen Sie OpenUDID ab. [[Sie OpenUDID installieren müssen, um mehr über das hier lesen, 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

Danke für Ihre Antwort. Aber ich habe Frage, wenn Sie die App löschen und neu installieren, Gerät ausschalten, aktualisieren oder neue ios installieren, dann bleibt OpenUDID gleich wie zuvor? –

+0

Sie können mehr über OpenUDID auf der Projektseite lesen. Aber es ist eine universell eindeutige Zeichenfolge, die von mehreren Anwendungen auf dem Gerät gemeinsam genutzt wird. So verwenden beispielsweise Google Mail, Chrome und Dropbox OpenUDID (ich habe keine Ahnung, sondern nur Namen für Apps). Die erste Anwendung, die Sie herunterladen, besagt, dass Google Mail die OpenUDID stark setzt. Die zweite und dritte Anwendung wird dieselbe OpenUDID-Zeichenfolge lesen. Aber sagen Sie, dass Sie Gmail löschen - anstatt dass der OpenUDID-String verloren geht, wird er von den anderen Apps, die ihn verwenden, beibehalten. (Um es los zu werden, müssen alle Apps gelöscht worden sein). – Federico