Frage

Für eine iPhone-Anwendung, die Bilder auf einen Server übermittelt ich brauche irgendwie zusammen alle Bilder von einem bestimmten Telefon zu binden. Mit jedem einreichen Ich möchte einige einzigartige Telefon-ID senden. Betrachtete

  [[UIDevice mainDevice] uniqueIdentifier]
and [[NSUserDefaults standardDefaults] stringForKey:@"SBFormattedPhoneNumber"]

aber immer Fehler im Simulator.

Gibt es ein Apple sanktioniert Weg, dies zu tun?

War es hilfreich?

Lösung

Welche Fehler werden Sie bekommen? [[UIDevice currentDevice] uniqueIdentifier] ( bearbeitet API zu beheben, dank Martin! ) ist der offiziell empfohlene Weg, dies zu tun.

Andere Tipps

Sie können auch CFUUID verwenden, um eine UUID zu erzeugen. Hier einige Code:

NSString *uuid = nil;
CFUUIDRef theUUID = CFUUIDCreate(kCFAllocatorDefault);
if (theUUID) {
  uuid = NSMakeCollectable(CFUUIDCreateString(kCFAllocatorDefault, theUUID));
  [uuid autorelease];
  CFRelease(theUUID);
}

Bei weitem die einfachste und am besten geeignete Weg, um eine eindeutige Kennung zu erhalten, ist es, die Mechanismen verwenden Apple stellt ausdrücklich für den Erhalt einer - [[UIDevice currentDevice] uniqueIdentifier]. Sie können nicht garantieren, dass die Telefonnummer an das Gerät eindeutig sein wird oder dass das Gerät auch eine Telefonnummer. Darüber hinaus ist dabei eine schreckliche Idee, da es eine bestimmte Invasion der Privatsphäre des Benutzers ist. Auch sollte die uniqueidentifier gehasht werden, wenn Sie es in irgendeiner Weise speichern werden.

Um die Unique Identifier auf Persist Sie zwischen den Installationen erstellen, können Sie den Schlüsselanhänger einfach mit SSKeychain Gebrauch gemacht: Setzen Sie einfach Ihre UUID wie folgt:

        [SSKeychain setPassword:@"Your UUID" forService:@"com.yourapp.yourcompany" account:@"user"];

und es dann wieder anrufen, wann immer Sie es brauchen:

NSString *retrieveuuid = [SSKeychain passwordForService:@"com.yourapp.yourcompany" account:@"user"];

. Hinweis: Die Dienste und Konten müssen genau übereinstimmen

Wenn dann die App gelöscht und neu installiert, wird die UUID mit einer Neuinstallation bestehen bleiben.

Wenn Sie dann wollen diese UUID auf verschiedenen Geräten teilen, richten Sie Ihre App iCloud zu verwenden. Sie können dann speichern Sie die UUID in NSUserDefaults, synchronisiert mit KeyValueStore, und legen Sie dann die UUID in die neuen Geräte oben mit dem Code Keychain.

Diese Antwort würde sehr lange, wenn ich Code für alle oben eingegeben haben, aber viel Beispielcode hier um alles, um herauszufinden.

Sie vergessen, dass nicht in iOS 5 uniqueidentifier veraltet werden Sie CFUUID statt dass verwenden soll

Interessanterweise hat Apple seit dem uniqueidentifier in iOS 5 als veraltet (wie gN0Me erwähnt). Hier ist der relevante TechCrunch Artikel: http://techcrunch.com/2011/08/ 19 / apple-ios-5-Phasing-out-UDID /

Apple-deutet darauf hin, dass Sie nicht mehr das Gerät eindeutig identifizieren, sondern stattdessen die identifizieren Benutzer . In den meisten Fällen ist dies eine ausgezeichnete Beratung obwohl es einige Situationen, die noch erfordern eine global eindeutige Geräte-ID. Diese Szenarien sind recht häufig in der Werbung. Daher schrieb ich eine extrem einfache Drop-in-Bibliothek, die genau das bestehende Verhalten repliziert.

In einem schamlosen Stecker der Selbstförderung, werde ich es verbinden sie hier in der Hoffnung, dass jemand es nützlich findet. Auch begrüße ich alle und jedes Feedback / Kritik: http://www.binpress.com/app/myid/591

Dennoch in Ihrer Situation würde ich raten, die Überspringen global eindeutige ID Funktionalität meiner Bibliothek bietet, da es ein bisschen übertrieben für Ihre Situation ist. Stattdessen würde ich ein einfaches CFUUID und speichern sie in NSUserDefaults erzeugen. Diese ID wäre spezifisch für Ihre Anwendung aber würden Sie gruppieren sich alle zugänglichen Fotos für die „App installieren“ in der Datenbank ermöglichen.

Mit anderen Worten, durch die uniqueidentifier Methode ironische, Apple darauf hindeutet, dass Sie nicht pro Gerät identifizieren, sondern pro app install . Sofern Sie unter bestimmten Bedingungen arbeiten, stehen die Chancen, die pro App ID passt Ihr Produkt sowieso besser.

Dies ist ein interessantes Problem, dass ich auch in Lösung suchen. Hier ist ein Szenario, das Ich mag würde adressieren.

Was passiert, wenn Sie Ihr Telefon an eine andere Person verkaufen ... wird die Geräte-ID dann an jemanden gehören sonst, also auch wenn die App aus dem iPhone entfernt wird, es erneut hinzugefügt und dass alle Daten würden könnte dann sein neu zugeordnet zu einem neuen Benutzer ... das ist schlecht.

unter der Telefonnummer mit der Geräte-ID MD5 eine große Lösung sein würde. Ein andere kamen wir oben mit mit einigen Token mit der Geräte-ID Gehashte einer SQL-Lite DB mit. Dann, wenn die App wird die DB entfernt wird getötet und alle Daten distanzierte werden. Ich denke, das könnte zu spröde sein.

Jede andere Ideen?

Rob Ellis (PhoneGap / Nitobi)

Haben Sie nicht iphone Arbeit getan, aber wie über einen Hash etwas Einmaliges auf das Telefon nehmen ... oh, sagt die Telefonnummer?

Erste iphone Nummer

snippit:

NSString *phoneNumber = (NSString *) [[NSUserDefaults standardUserDefaults] objectForKey:@"SBFormattedPhoneNumber"]; // Will return null in simulator!
NSLog(@"Formatted phone number [%@]", phoneNumber);

I [vor kurzem] lief diesen Code als Service-Leistung auf OS 2.2.1 [und O 3.0].

Es funktioniert wie erwartet, wenn auf dem Gerät laufen, und gibt meine Telefonnummer mit den vollen internationalen Vorwahlen [1 in meinem Fall].

Wenn auf dem Simulator ausgeführt, der Wert [zurück] ist ein Null-String, so dass es nur auf einem tatsächlichen iPhone-Gerät funktioniert.

Ich habe es bisher nicht testen auf einem iPod Touch.

...

Ran diesen Code auf einem anderen Gerät in dieser Woche, und bekam einen Nullwert anstelle der Nummer.

Bei der weiteren Forschung, scheint es, dass die Anzahl von diesem Code snippit zurückgegeben wird, ist die Zahl, die in iTunes auf für das Gerät eingestellt ist.

Wenn Sie nicht die Nummer des iPhone eingeben in iTunes bei Geräteaktivierung, oder vielleicht (wie in meinem Fall), wenn der Standardwert nicht die Nummer des iPhone war und Sie auf OK geklickt haben sowieso, so dass iTunes nicht auflistet die Telefonnummer, wenn Sie Ihr iPhone angeschlossen ist, dieser Code eine leere Zeichenfolge zurück.

[Oben ist eine editierte Verkettung Kommentare Vor kurzem habe ich zu diesem Thema zu einem anderen Beitrag geschrieben unter http://www.alexcurylo.com/blog/2008/11/15/snippet-phone-number/]

Hier sind einige weitere Informationen über ein wie es von iTunes zu erhalten, die für Testzwecke nützlich sein kann.

Ich hatte Erfolg mit einem solchen Code:

- (NSString *)stringUniqueID {
    NSString *  result;
    CFUUIDRef   uuid;
    CFStringRef uuidStr;
    uuid = CFUUIDCreate(NULL);
    assert(uuid != NULL);
    uuidStr = CFUUIDCreateString(NULL, uuid);
    assert(uuidStr != NULL);
    result = [NSString stringWithFormat:@"%@", uuidStr];
    assert(result != nil);
    NSLog(@"UNIQUE ID %@", result);
    CFRelease(uuidStr);
    CFRelease(uuid);
    return result;
}    

Sie können mit MAC-Adresse als eindeutige ID. Folgenden Link hilft Ihnen,

Wie kann ich programmatisch die MAC Adresse eines iphone

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top