为iOS设备创建唯一标识符
Create an unique identifier for iOS devices?
使用Xcode可以发现iOS设备标识符。我需要每个下载的应用程序都有一个唯一的标识符。我曾想过生成随机数,但它们可能不止一次生成相同的数字!有人有主意吗?
在UIDevice类中,apple提供了方法uniqueIdentifier,但现在已弃用(对于iOS5)。在方法的文档中,您可以找到如何使用uniqueIdentifier。
我找到了一种非常简单的方法来实现这一点,方法如下:
按命令+N并选择Cocoa Touch Class
。
将你的班级命名为NSString+UUID
,然后点击下一个。
然后,将NSString+UUID.h
中的代码替换为:
@interface NSString (UUID)
+ (NSString *)uuid;
@end
在NSString+UUID.m
中使用:
@implementation NSString (UUID)
+ (NSString *)uuid {
NSString *uuidString = nil;
CFUUIDRef uuid = CFUUIDCreate(NULL);
if (uuid) {
uuidString = (NSString *)CFUUIDCreateString(NULL, uuid);
CFRelease(uuid);
}
return [uuidString autorelease];
}
@end
现在,当您需要获取UUID时(即:在加载应用程序时使用NSUserDefaults存储):
-(BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions{
NSString *userIdentifierKey = @"user-identifier"
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
if ([defaults objectForKey:userIdentifierKey] == nil) {
NSString *theUUID = [NSString uuid];
[defaults setObject:theUUID forKey:userIdentifierKey];
[defaults synchronize];
}
// additional application setup...
return YES;
}
试试这个UIDevice-with-UniqueIdentifier-for-iOS-5,它使用设备的mac地址作为唯一标识符。
iOS6提供了一个新的替换[[UIDevice currentDevice]identifierForVendor]UUIDString]
对于来自在同一设备上运行的同一供应商。返回不同的值对于来自不同供应商的同一设备上的应用程序,以及供应商的不同设备上的应用程序。
请参阅:https://developer.apple.com/library/ios/#documentation/UIKit/Reference/UIDevice_Class/Reference/UIDevice.html#//apple_ref/doc/uid/TP40006902-CH3-SW49
您可以创建UIApplication、UIDevice或您喜欢的类别(ARC示例)
@interface UIApplication (utilities)
- (NSString*)getUUID;
@end
@implementation UIApplication (utilities)
- (NSString*)getUUID {
NSUserDefaults *standardUserDefault = [NSUserDefaults standardUserDefaults];
static NSString *uuid = nil;
// try to get the NSUserDefault identifier if exist
if (uuid == nil) {
uuid = [standardUserDefault objectForKey:@"UniversalUniqueIdentifier"];
}
// if there is not NSUserDefault identifier generate one and store it
if (uuid == nil) {
uuid = UUID ();
[standardUserDefault setObject:uuid forKey:@"UniversalUniqueIdentifier"];
[standardUserDefault synchronize];
}
return uuid;
}
@end
UUID()是的这个函数
NSString* UUID () {
CFUUIDRef uuidRef = CFUUIDCreate(NULL);
CFStringRef uuidStringRef = CFUUIDCreateString(NULL, uuidRef);
CFRelease(uuidRef);
return (__bridge NSString *)uuidStringRef;
}
这会生成一个存储在NSUserDefault中的唯一标识符,以便在应用程序需要时重复使用-该标识符将与应用程序相关,而不是安装到设备,但可以用于跟踪订阅APN服务的设备数量等
之后你可以用这种方式使用它:
NSString *uuid = [[UIApplication sharedApplication] getUUID];
尝试这个
- (NSString *)getDeviceID
{
NSString *uuid = [self gettingString:@"uniqueAppId"];
if(uuid==nil || [uuid isEqualToString:@""])
{
CFUUIDRef theUUID = CFUUIDCreate(kCFAllocatorDefault);
if (theUUID)
{
uuid = NSMakeCollectable(CFUUIDCreateString(kCFAllocatorDefault, theUUID));
[self savingString:@"uniqueAppId" data:uuid];
[uuid autorelease];
CFRelease(theUUID);
}
}
return uuid;
// this is depreciated
// UIDevice *device = [UIDevice currentDevice];
// return [device uniqueIdentifier];
}
使用此:[[UIDevice currentDevice] identifierForVendor]
有关更多信息,请查看此答案
- 如何在C++中为增加但记住删除先前对象的对象分配唯一标识符
- 按唯一标识符描述数字列表
- 获取窗口监视器的唯一标识符
- 鼠标,键盘和其他HID设备的唯一标识符
- 从 Android 上的 c++ 获取唯一的设备标识符
- 没有成员作为唯一标识符的两个类实例的比较
- 在Windows中获得C 中的唯一硬件标识符
- 如何构造本地唯一标识符名称
- 在编译时生成唯一的类型标识符
- 如何将目录路径转换为唯一的数字标识符 (Linux/C++)
- 获取系统的唯一标识符(而不是MAC地址)
- 生成可以区分 ID(Foo::a()) 和 ID(Foo::b()) 的唯一标识符
- 为iOS设备创建唯一标识符
- 如何获取计算机的唯一标识符
- CRTP和唯一的持久标识符
- 如何以跨平台的方式获得(几乎)唯一的系统标识符
- 为类型分配唯一的整型标识符,编译时
- protocolbuffers-c++唯一的持久类标识符
- 缩短唯一标识符
- 通过类型标识符表示类的数字唯一标识符