方法[[UIDevice currentDevice] uniqueIdentifier]不再允许,我需要一个替代方案

时间:2012-02-22 13:55:10

标签: objective-c ios xcode

我在所有应用中使用[[UIDevice currentDevice] uniqueIdentifier],Apple不再允许使用uniqueIdentifier。 我需要一些东西来代替我可以用来识别用户的uniqueIdentifier,即使用户删除了应用并再次安装它,(并且我的应用也被Apple批准)。

由于

3 个答案:

答案 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)

与digipeople的黑客攻击。

修复此问题以避免应用崩溃。

systemId = [[NSUUID UUID] UUIDstring];

http://developer.apple.com/library/mac/documentation/Foundation/Reference/NSUUID_Class/Reference/Reference.html#//apple_ref/occ/instm/NSUUID/UUIDString