可能重复:
iOS 唯一用户标识符
对于我的应用程序,我需要电话 uuid。我知道我可以得到它
NSUUID *uuid = [NSUUID UUID];
但是每次我重新启动应用程序时,我都会收到不同的值。所以我不能像旧的 uuid 一样使用它(它总是一样的)。
我该怎么做才能获得稳定且唯一的标识符?
可能重复:
iOS 唯一用户标识符
对于我的应用程序,我需要电话 uuid。我知道我可以得到它
NSUUID *uuid = [NSUUID UUID];
但是每次我重新启动应用程序时,我都会收到不同的值。所以我不能像旧的 uuid 一样使用它(它总是一样的)。
我该怎么做才能获得稳定且唯一的标识符?
UUID 是 128 位值 UUID 在空间和时间上都是唯一的,方法是结合生成它的计算机的唯一值和表示自 1582 年 10 月 15 日 00:00 以来 100 纳秒间隔数的值: 00.
所以每一秒你都会得到一个新的 UUID。
您无法收到稳定且唯一的 id,而是可以将收到的 id 保存在钥匙串或 plist 中并使用它。
您正在考虑 UDID(而不是 UUID),它已被弃用且 App Store 不再允许。
这是一种模拟它的技术:https ://stackoverflow.com/a/8677177/832111
您可以使用 OpenUDID 库为每个设备生成唯一的 UDID。它可以在这里找到。从根本上说,它使用粘贴板。下面的一个例子
//First app, install->run->close->delete
UIPasteboard* board = [UIPasteboard pasteboardWithName:@"com.company.wtv" create:YES];
board.persistent=YES;// persistent to make what you write persist after your app closes, or gets deleted.
[board setValue:@"hello" forPasteboardType:@"com.company.wtv.sharedValue"];
//Second app, installed after first one is deleted and ran this one... While bundle identifier and bundle seed different (i tried it on adhoc, not really releasing the app, but i htink the same)
NSData* result=nil;
NSString*resultStr=nil;
result =[board valueForPasteboardType:@"com.company.wtv.sharedValue"];
resultStr=[[NSString alloc] initWithData:result encoding:NSUTF8StringEncoding];// I got resultStr containing hello