Wie @danypata sagte, verwenden Sie die BezeichnerForVendor wie in this answer beschrieben.
Oder alternativ können Sie möglicherweise die Werbung NSUDID als described here verwenden.
Diese können jedoch als Null zurückkommen oder im Laufe der Zeit geändert werden. Der Nutzer kann das Tracking für Werbetreibende deaktivieren. Daher rate ich davon ab, Nutzer für Ihre eigenen Zwecke zu verwenden.
Ich denke, es hängt davon ab, warum Sie ihr Gerät an erster Stelle verfolgen. Meine Einstellung ist, dass ich Benutzer Gewohnheiten für immer nicht verfolgen muss. Ich muss nur allgemeine Benutzertrends und einige DAU-Informationen verfolgen. Also erstelle ich meine eigene UDID - die sich bei jeder Installation der App ändert. In meiner nächsten Version werde ich den identifierForVendor verwenden und wenn es NIL ist, werde ich mein eigenes erstellen. Diese
ist, wie ich meine eigenen zu machen:
// this makes a device id like: UUID = 89CD872F-C9AF-4518-9E6C-A01D35AF091C
// except that I'm going to attach some other attributes to it like the OS version, model type, etc.
// the UUID that is stored in user defaults will be like the one above.. but the device id that gets returned
// from this function and sent to [my online system] will have the extra info at the end of the string.
- (void) createUUID {
// for collecting some data.. let's add some info about the device to the uuid
NSString *thisDeviceID;
NSString *systemVersion = [[UIDevice currentDevice]systemVersion];
NSString *model = [[UIDevice currentDevice]model];
NSString *retinaTag;
if (retina) {
retinaTag = @"Retina";
}
else {
retinaTag = @"";
}
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
id uuid = [defaults objectForKey:@"uniqueID"];
if (uuid)
thisDeviceID = (NSString *)uuid;
else {
CFStringRef cfUuid = CFUUIDCreateString(NULL, CFUUIDCreate(NULL));
thisDeviceID = (__bridge NSString *)cfUuid;
CFRelease(cfUuid);
[defaults setObject:thisDeviceID forKey:@"uniqueID"];
}
//NSLog(@"UUID = %@", thisDeviceID);
MYthisDeviceID = [NSString stringWithFormat:@"%@-%@-%@-%@",thisDeviceID,systemVersion,retinaTag,model];
//NSLog(@"UUID with info = %@", MYthisDeviceID);
}
Dann wird die einzelne Zeichenfolge, die auf meinen Server geschickt wird sowohl eine UDID drin und Spezifikationen über das Gerät und os. Bis der Nutzer die App vollständig löscht und neu lädt, zeigt die Statistik die Nutzung auf diesem Gerät an. Um doppelte udds nicht zu erhalten, wenn sie auf ein neues os aktualisieren, können Sie nur auf den udid-Teil zuschneiden.
Ich benutze die MAC-Adresse überhaupt nicht, weil es mein Verständnis war, dass Apple uns nicht wollte. Obwohl ich keine Dokumentation finden kann, die es im Moment sagt.
UPDATE für iOS7:
ich jetzt diesen Code verwenden, der unter IO6 und IO7 arbeitet:
NSString *globalDeviceID;
- (void) createUUID
{
NSString *thisDeviceID;
NSString *systemVersion = [[UIDevice currentDevice]systemVersion];
NSString *model = [[UIDevice currentDevice]model];
NSString *retinaTag;
if (retina) {
retinaTag = @"Retina";
}
else {
retinaTag = @"";
}
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
id uuid = [defaults objectForKey:@"deviceID"];
if (uuid)
thisDeviceID = (NSString *)uuid;
else {
if ([[UIDevice currentDevice] respondsToSelector:@selector(identifierForVendor)]) {
thisDeviceID = [[[UIDevice currentDevice] identifierForVendor] UUIDString];
}
else
{
CFStringRef cfUuid = CFUUIDCreateString(NULL, CFUUIDCreate(NULL));
thisDeviceID = (__bridge NSString *)cfUuid;
CFRelease(cfUuid);
}
[defaults setObject:thisDeviceID forKey:@"deviceID"];
}
NSLog(@"UUID = %@", thisDeviceID);
globalDeviceID = [NSString stringWithFormat:@"%@-%@-%@-%@",thisDeviceID,systemVersion,retinaTag,model];
NSLog(@"UUID with info = %@", globalDeviceID);
}
Können Sie mir Dokumentation zeigen, wo die MAC-Adresse veraltet ist? Ich hatte das nicht gehört. –
Ich denke, Ihre einzige Option ist, MAC-Adresse abzufragen und etwas damit zu tun. Es ist bereits [hier] diskutiert (http://stackoverflow.com/questions/6993325/uidevice-uniqueneidentifier-deprecated-what-to-do- jetzt), und ich denke, diese Frage ist ein Duplikat. Und ich glaube nicht, dass MAC-Adresse veraltet ist, zumindest kann ich keine Dokumentation finden – Krishnabhadra
Wenn Ihr iOS-Ziel ist 6.0 und höher gibt es die '[[UIDevice currentDevice] BezeichnerForVendor];' – danypata