简体   繁体   中英

Method [[UIDevice currentDevice] uniqueIdentifier] is not allowed any more, I need an alternative

I'm using [[UIDevice currentDevice] uniqueIdentifier] in all of my apps, Apple is not allowing the use of uniqueIdentifier anymore. I need something to use that replaces the uniqueIdentifier which I can use to recognize a user even when the user deletes the app and installs it again, (and also get my app approved by apple).

Thanks

The documentation recommends what to do in this section.

Special Considerations
Do not use the uniqueIdentifier property. To create a unique identifier specific to your app, you can call the CFUUIDCreate function to create a UUID, and write it to the defaults database using the NSUserDefaults class.

To make sure that the unique identifier remains after you delete the app you should store it in the keychain rather than NSUserDefaults. Using the keychain you will also be able to share the same unique ID across all of your apps on the same device using keychain access groups . This approach will prevent you from incorrectly tracking users after the device is no longer theirs, and it will be available on any new iDevice they restore from backup.

Update for iOS 7 and prior:

+ (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;
}

Device model you can receive through:

+ (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;
}

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM