2013-10-26 15 views
31

Unsere iOS-Anwendung ist für bestimmte Benutzer. So verwendeten wir Gerät eindeutige Kennung für Benutzeridentifikation. Dieser Ansatz funktioniert bis iOS 6, weil wir immer den gleichen Wert bekommen.Erhalten Sie immer eine eindeutige Geräte-ID in iOS 7

NSString *strUniqueIdentifier = [[UIDevice currentDevice] uniqueIdentifier]; 

In iOS 7, das oben beschriebene Verfahren zurückkehrt unterschiedliche Werte und wir bekommen Probleme in Benutzeridentifikation. iOS 7 bietet folgende Alternative.

NSUUID *oNSUUID = [[UIDevice currentDevice] identifierForVendor]; 
[strApplicationUUID setString:[oNSUUID UUIDString]]; 

Wir ersetzten uniqueIdentifier mit identifierForVendor und erstellt ein Ad-hoc-Build. Wir haben dann den Build auf iOS 7 und iOS 6 Geräten installiert. Bisher in iOS 7, wir werden immer den gleichen Wert jedes Mal, aber iOS 6 gibt unterschiedliche Werte jedes Mal, wenn wir die App löschen und neu zu installieren.

+0

testen Sie auf iOS <6.1.3? – Maggie

+0

meine Anwendung unterstützt von iOS 5.0 auf iOS 7.0 und jetzt bin ich testen in IOS 7.0 – jaydev

Antwort

1

Wenn es keine anderen Anwendungen unterzeichnet sind von Ihnen auf dem Gerät installiert, ist es ok für Bezeichner für Verkäufer zu ändern. Außerdem kann sich die Kennung für den Anbieter ändern, wenn Sie Ihre Anwendung über verschiedene Verteilungsmethoden installieren, z. Die Anwendung hat möglicherweise nicht die gleiche Kennung für den Anbieter, wenn sie über XCode installiert und über TestFlight oder HockeyApp verteilt wird.

+0

ok danke, aber ich möchte immer eindeutige ID bekommen. Ansonsten gibt es eine alternative Möglichkeit, eine eindeutige ID immer gleich zu machen, genau wie die Geräte-ID-Methode. Wenn es möglich ist, dann bitte suggerieren Sie mich. – jaydev

+0

Tracking ist böse –

2

Vom UIDevice Class reference für identifierForVendor:

Der Wert ändert sich, wenn der Benutzer alle, dass Anbieters Apps aus dem Gerät löscht und anschließend neu installiert eine oder mehrere von ihnen. Der Wert kann auch beim Installieren von Test-Builds mit Xcode oder beim Installieren einer App auf einem Gerät mit Ad-hoc-Verteilung verwendet werden. Wenn Ihre App den Wert dieser Eigenschaft an einer beliebigen Stelle speichert, sollten Sie daher Situationen, in denen sich der Bezeichner ändert, ordnungsgemäß bearbeiten.

+1

ok danke, aber ich möchte immer einzigartige ID bekommen. Ansonsten gibt es eine alternative Möglichkeit, eine eindeutige ID immer gleich zu machen, genau wie die Geräte-ID-Methode. Wenn es möglich ist, dann bitte suggerieren Sie mich. oder es ist möglich durch identifierforvander-Methode. – jaydev

+0

Nein, es ist nicht möglich, einen Identifikator zu erhalten, der immer derselbe ist. Es ist alles da in der Dokumentation. – neilco

+0

Dieser Wert ändert sich, wenn Sie alle Apps dieses Anbieters löschen und einen neu installieren. –

2

Sind weitere Apps desselben Herstellers auf iOS7-Geräten installiert? Gemäß den docs:

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. Der Wert kann auch bei der Installation von Test-Builds mit Xcode oder bei der Installation einer App auf einem Gerät mit Ad-hoc-Verteilung sein. Wenn Ihre App den Wert dieser Eigenschaft irgendwo speichert, sollten Sie daher Situationen behandeln, in denen sich der Bezeichner ändert.

Haben Sie die App über den App Store zur Verfügung stellen? Falls nicht:

Wenn die App nicht aus dem App Store (wie wenn die App noch in der Entwicklung) installiert wurde, ist der Verkäufer auf der App- Bundle-ID bestimmt. Es wird angenommen, dass die Paket-ID im Reverse-DNS-Format vorliegt, und Die ersten beiden Komponenten werden zum Generieren einer Anbieter-ID verwendet. Für Beispiel würde com.example.app1 und com.example.app2 die gleiche Hersteller-ID haben.

0

Versuchen Sie, Caches der App auf Ihrem Computer zu löschen und dann zu überprüfen. Es kann Ihr Cache-Problem

30

Verwenden Sie dieses kleine Helfer-Methode zu halten Kennung in Keychain sein zwischen installieren/löschen Sitzungen App

-(NSString *)getUniqueDeviceIdentifierAsString 
{ 
    NSString *appName=[[[NSBundle mainBundle] infoDictionary] objectForKey:(NSString*)kCFBundleNameKey]; 

    NSString *strApplicationUUID = [SSKeychain passwordForService:appName account:@"incoding"]; 
    if (strApplicationUUID == nil) 
    { 
     strApplicationUUID = [[[UIDevice currentDevice] identifierForVendor] UUIDString]; 
     [SSKeychain setPassword:strApplicationUUID forService:appName account:@"incoding"]; 
    } 

    return strApplicationUUID; 
} 

Fügen Sie die SSKeychain Bibliothek zu einem Projekt, zum Beispiel über Cocoapods mit pod 'SSKeychain'

+2

Wenn Sie Inhalte und Einstellungen auf dem Gerät zurücksetzen, ist die zurückgegebene Zeichenfolge anders. – Hadu

+1

Sicher, das ist keine universelle Antwort auf ein Problem – nerowolfe

8

Womit wird UDID ersetzt?

Für jetzt sieht es aus wie Apple plant, UDIDs mit zwei verschiedenen Kennungen zu ersetzen: Vendor IDs und Advertising IDs.

Vendor IDs

-ID, die zwischen Anwendungen aus dem gleichen Entwickler identisch ist. Gelöscht mit dem Entfernen der letzten App für diese Team ID.

Werbung IDs

Einzigartige an das Gerät. Verfügbar für alle Anwendungen; verwendet für Werbung - iAd hat von UDID für iOS 6 und höher konvertiert. Zurücksetzen mit "Alle Inhalte löschen & Einstellungen".


Zum größten Teil wird Vendor IDs ermöglichen es Entwicklern, mit mehreren Anwendungen, die Sie als der Benutzer über alle ihre Anwendungen zu identifizieren. Dadurch können Entwickler ihre Zielgruppe besser verstehen und einen besseren Service bieten.

Werbe-IDs erstellen weiterhin eine eindeutige ID für das Gerät, können aber im Gegensatz zur UDID deaktiviert oder zurückgesetzt werden, genau wie Cookies im Browser auf Ihrem Desktop oder Laptop gesteuert werden können.

Mit der Ankündigung von iOS7 Anfang dieser Woche unternahm Apple einen zusätzlichen Schritt, um eine andere eindeutige Kennung auszuschalten - die "MAC-Adresse", die von App-Entwicklern und Werbeunternehmen anstelle der neuen Werbe-ID verwendet werden konnte. Durch das Schließen dieser Lücke unternimmt Apple den guten Schritt, diese Unternehmen dazu zu zwingen, nur eine Cross-App-Kennung zu verwenden, die Benutzer kontrollieren können.

Es bleibt abzuwarten, ob die Zielunternehmen weiterhin nach Möglichkeiten für Apples Mandat suchen werden. Andere Technologien, wie "Device Fingerprinting", wurden entwickelt, um Ihr Gerät außerhalb des Apple-Frameworks eindeutig zu identifizieren. Ob Apple gegen diese Methoden vorgehen wird, bleibt abzuwarten.

0

etwas nerowolfe's answer hinzuzufügen, gibt es eine große Keychain Wrapper MCSMKeychainItem genannt, dass oben auf einige andere Dinge, Sie eigene Geräte-ID mit einzige Zeile Code erzeugen und abrufen können:

[MCSMApplicationUUIDKeychainItem applicationUUID]; 

so die grundlegende Verwendung wird so etwas wie

+ (NSString *)deviceId { 
    // load unique device ID or generate new one 
    return [MCSMApplicationUUIDKeychainItem applicationUUID]; 
} 

es arbeitet auf der Basis von Schlüsselanhänger sein, wo es einmal generierte eindeutige Kennung speichert (wie nerowolf vorgeschlagen). Es ist Open-Source und Sie können es herunterladen here on github.

Hinweis: Ich bin nicht der Autor der Erweiterung, noch kenne ich ihn in irgendeiner Weise.

+0

Eine kleine Randnotiz für diejenigen, die eine echte gerätespezifische eindeutige ID brauchen, die sich NICHT ändert, "die UUID wird gelöscht, wenn der Benutzer ihr Gerät wiederherstellt, zusammen mit jedem anderen Schlüsselbund '. – Burak

Verwandte Themen