What is a long-term method I can use to uniquely identify an iOS device?

前端 未结 5 1735
难免孤独
难免孤独 2020-12-09 03:55

What is the best way to uniquely register an iOS Device, which won\'t be limited by future Apple restrictions?

My current approach to register an iOS device (basical

相关标签:
5条回答
  • 2020-12-09 04:17

    Using Apple's preferred method of generating a CFUUIDRef is probably the better solution as I feel the MAC address may be removed in the future as well. If you use this and save it to your NSUserdefaults you will have it persist unless the user deletes the app. If you want to have a generated unique ID that you can share between apps or persist between installs you should look at using the UIPasteboard and saving your generated UID with a key that you share between apps.

    //Create a unique id as a string
    CFUUIDRef theUUID = CFUUIDCreate(NULL);
    CFStringRef string = CFUUIDCreateString(NULL, theUUID);
    
    //create a new pasteboard with a unique identifier
    UIPasteboard *pasteboard = [UIPasteboard pasteboardWithName:@"youruniquestring" create:YES];
    
    [pasteboard setPersistent:YES];
    
    //save the unique identifier string that we created earlier
    [pasteboard setString:((__bridge NSString*)string)];
    
    
     //accessing it
    UIPasteboard *pasteboard = [UIPasteboard pasteboardWithName:@"youruniquestring" create:NO];
    NSLog([pasteboard string]);
    

    I have written a brief tutorial here but its basically the lines above: http://www.roostersoftstudios.com/2012/03/26/a-way-to-share-data-between-apps-on-a-given-ios-device/

    0 讨论(0)
  • 2020-12-09 04:32

    The best approach I've seen is using the keychain. You can generate an UUID with the CFUUIDCreateString function and store it in the keychain. This data stays in the device between installs and restores from backups.

    0 讨论(0)
  • 2020-12-09 04:33

    Another option is dynamically generating your own UUID.

    CFUUIDRef uuid = CFUUIDCreate(NULL); 
    CFStringRef generatedUuidStr = CFUUIDCreateString(NULL, uuid);
    CFRelease(uuid);
    NSString* uuidStr = [(NSString*)generatedUuidStr autorelease];
    

    You could persist this UUID in NSUserDefaults for install based uniqueness. If device based uniqueness is truly the most important thing (so that after an uninstall and reinstall the id persists) you'll need a mechanism to persist the ID on the device. I think you could look into using the Keychain in order to persist that ID which should persist beyond app uninstall. You can even use an access group when adding the UUID to the keychain so that you could have a suite of apps that use the same UUID.

    See apple's security framework reference for more info on saving keychain items and retrieving them.

    http://developer.apple.com/library/ios/#DOCUMENTATION/Security/Reference/SecurityFrameworkReference/_index.html

    0 讨论(0)
  • 2020-12-09 04:34

    Unless your application is for managing my Apple devices, it is the wrong approach. As a user, I don't want you to know which device I'm using. I want you to recognize me, whatever the device I use. I want to be able to replace a defective device. Apple will restrict more and more the access to this information.

    [edit] I can't see how a MAC address could work. My iOS devices can have multiple.

    0 讨论(0)
  • 2020-12-09 04:35

    Use the devices Mac address. It's as unique as you could need I think.

    How can I programmatically get the MAC address of an iphone

    0 讨论(0)
提交回复
热议问题