2013-10-04 15 views
9

In meiner aktuellen Anwendung muss ich Benutzer von verschiedenen iOS-Geräten auf ihr Konto anmelden lassen. Momentan mache ich Benutzerauthentifizierung von einem Token-Wert. aber um die Anmeldung mehrerer Geräte zu unterstützen, muss ich einen anderen Weg finden, dies zu tun.wie ios Gerät eindeutig zu identifizieren

Also dachte ich an das Speichern von Geräten uuid zusammen mit Token für die Authentifizierung + Sicherheit. Dann weiß ich, dass ich die uuid des Geräts nicht verwenden kann, stattdessen muss ich identifierForVendor verwenden, die Benutzer- oder Geräteinformationen immer bereitstellen kann oder nicht.

Kann also jemand den besseren und korrekten Weg vorschlagen, um diese Login-Funktion für mehrere Geräte für dasselbe Benutzerkonto in ios zu erreichen?

Antwort

7

Wie Sie dies bereits die UUID des Gerät wissen, ist nicht erlaubt, können Sie jedoch Ihre eigene UUID generieren und auf den UserDefaults der Geräte speichern.

Die Verwendung von identifierForVendor ist nicht 100% zuverlässig, da es nur unter iOS6 und höher funktioniert und Benutzer die Möglichkeit haben, es Ihnen nicht zu geben, was es zu einer schlechten Wahl macht.

Hier ist ein Code, den ich vor einiger Zeit vom Internet kopiert habe und immer noch bis heute benutze, werde versuchen, die Quelle zu finden und meine Antwort ein wenig zu aktualisieren. EDIT: Source

Dies wird erzeugen und speichern eine UUID für Sie in UserDefaults:

- (NSString *)createUUID 
{ 
    CFUUIDRef theUUID = CFUUIDCreate(NULL); 
    CFStringRef string = CFUUIDCreateString(NULL, theUUID); 
    CFRelease(theUUID); 
    [[NSUserDefaults standardUserDefaults] setObject:(__bridge NSString *)string forKey:@"UUID"]; 
    [[NSUSerDefaults standardUserDefaults] synchronize]; 
    return (__bridge NSString *)string; 
} 

Und wenn Sie die generierte UUID lesen müssen:

- (NSString*)UUID 
{ 
    return [[NSUserDefaults standardUserDefaults] ObjectForKey:@"UUID"]; 
} 

Jetzt haben Sie die Wahl Fügen Sie auch Ihre eigene Benutzer-ID hinzu, damit Sie wissen, welche UUID mit welchem ​​Benutzer verknüpft ist.

Dies ist nur eine grobe Skizze Wie es funktionieren sollte

+0

Sieht vertraut aus: http://shipster.com/uuid-udid-unique-identifier/ – Luke

+0

Ich nehme an, dass, wenn ein Benutzer die App neu installiert eine neue UUID erstellt wird? – Rupert

+0

@Rupert ja du bist richtig! –

0

sollten Sie die Standardmethoden zum Erstellen einer UUID verwenden. Apple möchte keine Tracking-Geräte.

To create a unique identifier specific to your app, you can call the CFUUIDCreate function to 
create a UUID, and write it to the defaults database using the NSUserDefaults class. (Source) 

Wenn Sie eine Bibliothek für diese statt rollen Sie Ihre eigenen verwenden möchten, sollten Sie diese ausgezeichnete Bibliothek wie folgt verwenden:

CFUUIDRef uuidRef = CFUUIDCreate(kCFAllocatorDefault); 
NSString *uuidString = (NSString *)CFUUIDCreateString(NULL,uuidRef); 
CFRelease(uuidRef); 
2

Zunächst einmal verbieten/entmutigen Apple-Entwicklerrichtlinien die Verwendung von IDFA zur Verfolgung des Benutzers zum Zweck der Anzeige gezielter Werbung (und einiger anderer Dinge). Die Richtlinien erlauben dem Entwickler eindeutig, das IDFA zur Identifizierung des Geräts für Sicherheitszwecke zu verwenden. Zitiert von den Apfel Richtlinien

advertisingTrackingEnabled

Ein boolescher Wert, der Benutzer angibt, ob Ad-Tracking begrenzt hat.(Nur-Lese)

@Eigenschaft (nonatomic, nur lesbar, Getter = isAdvertisingTrackingEnabled) BOOL advertisingTrackingEnabled

Diskussion

den Wert dieser Eigenschaft prüfen, bevor sie eine Werbetracking durchführen. Wenn der Wert NEIN ist, verwenden Sie die Werbekennung nur für die folgenden Zwecke: Häufigkeitsbegrenzung, Konvertierungsereignisse, Schätzung der Anzahl eindeutiger Benutzer, Sicherheits- und Betrugserkennung sowie Debugging.

Sie können IDFA des Geräts für mehrere Geräteanmeldungen verwenden. Die Strömung würde etwas so aussehen:

  1. Benutzer bei der Server-Vorrichtung A, senden Server ein Token zurück, die auf dem Gerät in NSUserDefaults gespeichert ist. Die App speichert auch den IDFA auf dem Gerät in NSUserDefaults

  2. Dieses Token wird zum Erstellen einer verschlüsselten Zeichenfolge verwendet, die das IDFA enthalten würde. (Verschlüsseln des IDFA mit dem Token) Der verschlüsselte Wert würde zusammen mit dem ursprünglichen IDFA in jeder Anfrage an den Server übergeben.

  3. Der Server würde dann den IDFA und das dazugehörige Token verwenden (der Server würde natürlich die IDFAs für jedes Token speichern), um den verschlüsselten Wert des IDFA zu erhalten und ihn mit dem verschlüsselten Wert zu vergleichen die Anfrage. Der Zweck dieses Vorgangs besteht darin sicherzustellen, dass niemand in Ihren Server eindringen kann, da das Token für niemanden außer der App sichtbar ist (Sie können das Token sogar in einem verschlüsselten Format speichern, um das Sicherheitsniveau zu erhöhen).

  4. Immer wenn eine Anfrage an den Server gesendet wird, wird der IDFA-Wert, der auf dem Gerät unter NSUserDefaults gespeichert ist, mit dem aktuellen IDFA verglichen.

  5. Im Falle einer Diskrepanz würde das aktuelle IDFA zuerst auf dem Server aktualisiert werden und dann, nachdem die Bestätigung des erfolgreichen Updates erhalten wurde, würde die App das auf dem Gerät gespeicherte IDFA in NSUserDefaults durch das aktuelle ersetzen läuft dann wie gewohnt).

Alternativ können Sie Schritt 3,4 und Speicher von IDFA auf dem Gerät in NSUserDefaults vermeiden, sondern dadurch, dass der Benutzer auf den Server neu anmelden müßte auf die IDFA zurückgesetzt wird.

Einfach bestätigen, die Zuordnung von Token zu IDFA würde viele zu eins sein.

Hoffe, dass dies hilft, Kommentar für den Fall, dass alles nicht klar/nicht den Anwendungsfall zu erfüllen.

Verwandte Themen