我在所有应用中使用[[UIDevice currentDevice] uniqueIdentifier]
,Apple不再允许使用uniqueIdentifier
。
我需要一些东西来代替我可以用来识别用户的uniqueIdentifier
,即使用户删除了应用并再次安装它,(并且我的应用也被Apple批准)。
由于
答案 0 :(得分:12)
documentation建议您在本节中做些什么。
特别注意事项
不要使用uniqueIdentifier属性。要创建特定于您的应用的唯一标识符,您可以 调用CFUUIDCreate函数创建一个UUID,并将其写入 使用NSUserDefaults类默认数据库。
要确保在删除应用后仍保留唯一标识符,您应将其存储在keychain而不是NSUserDefaults中。使用钥匙串,您还可以使用keychain access groups在同一设备上的所有应用中共享相同的唯一ID。此方法可以防止您在设备不再使用后错误地跟踪用户,并且可以在从备份恢复的任何新iDevice上使用它。
答案 1 :(得分:3)
iOS 7及更早版本的更新:
+ (NSString *)uniqueDeviceIdentifier
{
NSString *device_id = nil;
if ([[self deviceModel] isEqualToString:@"Simulator iOS"]) {
// static id for simulator
device_id = @"== your random id ==";
}
else if (CurrentIOSVersion >= 6.f) {
// iOS 6 and later
device_id = [[[UIDevice currentDevice] identifierForVendor] UUIDString];
}
else {
// iOS 5 and prior
SEL udidSelector = NSSelectorFromString(@"uniqueIdentifier");
if ([[UIDevice currentDevice] respondsToSelector:udidSelector]) {
device_id = [[UIDevice currentDevice] performSelector:udidSelector];
}
}
NSLog(@">>>>>> device_id: %@", device_id);
return device_id;
}
您可以通过以下方式接收的设备型号:
+ (NSString*)deviceModel
{
static NSString *device_model = nil;
if (device_model != nil)
return device_model;
struct utsname systemInfo;
uname(&systemInfo);
NSString *str = @(systemInfo.machine);
return device_model;
}
答案 2 :(得分:0)
修复此问题以避免应用崩溃。
systemId = [[NSUUID UUID] UUIDstring];