关于iOS的设备标识,历史上有多个方法,取不同的ID,有些方法已经被苹果禁止,所以现在开发也不需要去看了,广告标识符可能会取不到(用户可以自己去设备设置中关闭,建议关闭,能少收集一个是一个),主要说下目前我认为最好的解决方案
首先说一下最简单的方法,很多公司在用这个,但是有缺陷,就是相同开发商的多个应用返回的值是一样的,除非真的有这种需求,否则不建议用
[[UIDevice currentDevice]identifierForVendor].UUIDString
Apple的注释很清楚
@property(nullable, nonatomic,readonly,strong) NSUUID *identifierForVendor NS_AVAILABLE_IOS(6_0); // a UUID that may be used to uniquely identify the device, same across apps from a single vendor.
所以这个方法一般不会用,那就用到了CFUUIDRef
+ (NSString *)uuidString
{
CFUUIDRef uuid_ref = CFUUIDCreate(NULL);
CFStringRef uuid_string_ref= CFUUIDCreateString(NULL, uuid_ref);
NSString *uuid = [NSString stringWithString:(__bridge NSString *)uuid_string_ref];
CFRelease(uuid_ref);
CFRelease(uuid_string_ref);
return [uuid lowercaseString];
}
这样生成的uuid会每次变化,所以需要存储,对于存储的方法,建议存在NSUserDefaults或者数据库中,然后同时存到keychain中,每次从NSUserDefaults读取,取不到再去keychain中查找,都没有才生成新的并存储,这样可以保证卸载了app重新安装后设备号还是不变的,但如果重置系统,那就没有办法了,还有一种方法是上传iCloud,但会有很多限制和不确定,所以没有用。但其实iCloud可以做很多事情,大家可以试试。
编辑人:kevin 转载请注明,谢谢
网友评论