iOS UUID库作为旧的好UDID和identifierForVendor的替代品。
此库提供了获取不同持久化级别的最简单API,以获取通用唯一标识符。
可以检索为同一用户的所有设备创建的UUIDs,以此方式,通过服务器端的一点点帮助,可以轻松管理多台设备间的访客账户。
uuidsOfUserDevices
的值,并在使用相同iCloud账户的多台设备间使用。uuidForDevice
/ uuidsOfUserDevices
的值。FCUUID
文件夹复制到您的项目中。建议在applicationDidFinishLaunchingWithOptions
方法中执行设置。
FCUUIDsOfUserDevicesDidChangeNotification
的观察者,以通知用户设备UUIDs的变化。uuidForDevice
或uuidsForUserDevices
方法之前进行迁移)。请注意,迁移只能在现有值有效且uuidForDevice
尚未创建时工作。获取不同的UUID(每个都具有自己的持久性级别)
//changes each time (no persistent)
+(NSString *)uuid;
//changes each time (no persistent), but allows to keep in memory more temporary uuids
+(NSString *)uuidForKey:(id<NSCopying>)key;
//changes each time the app gets launched (persistent to session)
+(NSString *)uuidForSession;
//changes each time the app gets installed (persistent to installation)
+(NSString *)uuidForInstallation;
//changes each time all the apps of the same vendor are uninstalled (this works exactly as identifierForVendor)
+(NSString *)uuidForVendor;
//changes only on system reset, this is the best replacement to the good old udid (persistent to device)
+(NSString *)uuidForDevice;
//or
#import "UIDevice+FCUUID.h"
[[UIDevice currentDevice] uuid];
获取用户设备的UUID列表
//returns the list of all uuidForDevice of the same user, in this way it's possible manage guest accounts across multiple devices easily
+(NSArray *)uuidsOfUserDevices;
从之前存储的UUID/UDID迁移
在迁移现有值之前,建议通过简单地传递commitMigration:NO
并记录返回的值来调试它。
当您准备好提交迁移时,使用 commitMigration:YES
。
迁移完成后,任何对 uuidForDevice
的未来调用都将返回迁移后的值。
//these methods search for an existing UUID / UDID stored in the KeyChain or in UserDefaults for the given key / service / access-group
+(NSString *)uuidForDeviceMigratingValue:(NSString *)value commitMigration:(BOOL)commitMigration;
+(NSString *)uuidForDeviceMigratingValueForKey:(NSString *)key commitMigration:(BOOL)commitMigration;
+(NSString *)uuidForDeviceMigratingValueForKey:(NSString *)key service:(NSString *)service commitMigration:(BOOL)commitMigration;
+(NSString *)uuidForDeviceMigratingValueForKey:(NSString *)key service:(NSString *)service accessGroup:(NSString *)accessGroup commitMigration:(BOOL)commitMigration;
检查值是否为有效的UUID
+(BOOL)uuidValueIsValid:(NSString *)uuidValue;
√
是的-
否*
请参阅以下说明PERSISTS | 应用内存 | 应用重启 | 重置广告标识符 | 应用重新安装 | 系统重启 | 系统升级 | 系统重置 |
---|---|---|---|---|---|---|---|
uuid |
- | - | - | - | - | - | - |
uuidForKey:key |
√ | - | - | - | - | - | - |
uuidForSession |
√ | - | - | - | - | - | - |
uuidForInstallation |
√ | √ | √ | - | √ | - | - |
uuidForVendor |
√ | √ | - | √* | √ | - | - |
uuidForDevice |
√ | √ | √ | √ | √ | √ | √** |
*(如果用户未卸载同一制造商的所有应用,则保留)
**(如果用户恢复包含密钥链数据的设备备份,则保留)
您必须启用 密钥链共享(权限和配置文件),并且您的应用的标识符必须具有相同的bundle seed。
您将获得2个 不同的UUID,如果您调用uuidsOfUserDevices,您将获得包含两个设备UUID的列表。
请参阅上面的 持久化 表。
在 MIT License 下发布。