UDID和UUID区别

2017-05-17  本文已影响100人  神采飞扬_2015

UDID

NSUUID *uuid = [UIDevice currentDevice].identifierForVendor;

UUID

// 循环10次,每一次打印的值都是不一样的,当然循环的再多,这个值永远不会出现两个一样的值。
NSString *uuid = [NSUUID UUID].UUIDString;

APP中需要一个能够标识设备唯一性的ID怎么办

1. 获取本地mac地址和应用bundle_id。
2. 将mac+bundle_id进行散列运算获得机器+应用的唯一标。
3. 只将mac进行散列运算获得机器的唯一标识。
1. 应用中增加推送用来获取token。
2. 获取应用bundle_id。
3. 根据token+bundle_id进行散列运算。

评价:apple push token保证设备唯一,但必须有网络情况下才能工作,该方法不依赖于设备本身,但依赖于apple push。加上一定的业务逻辑可以解决大部分情景。

使用OpenUDID开源代码,这个代码通过一些特殊的算法,创建了每一个设备的唯一标识符。


Device Token

image

通过苹果私有方法获取AADeviceInfo

- (NSString *)getDeviceIdentifier {
    NSBundle *privatePath = [NSBundle bundleWithPath:@"/System/Library/PrivateFrameworks/AppleAccount.framework"];
    if([privatePath load]){
        Class AADeviceInfo = NSClassFromString(@"AADeviceInfo");
        
        NSLog(@"productVersion- %@", [AADeviceInfo valueForKey:@"productVersion"]);
        NSLog(@"userAgentHeader- %@", [AADeviceInfo valueForKey:@"userAgentHeader"]);
        NSLog(@"appleIDClientIdentifier- %@", [AADeviceInfo valueForKey:@"appleIDClientIdentifier"]);
        NSLog(@"appleIDClientIdentifier- %@", [AADeviceInfo valueForKey:@"apnsToken"]);
        NSLog(@"appleIDClientIdentifier- %@", [AADeviceInfo valueForKey:@"serialNumber"]);
        NSLog(@"productVersion- %@", [AADeviceInfo valueForKey:@"osVersion"]);
        NSLog(@"userAgentHeader- %@", [AADeviceInfo valueForKey:@"udid"]);
        NSLog(@"appleIDClientIdentifier- %@", [AADeviceInfo valueForKey:@"infoDictionary"]);
        if([[AADeviceInfo valueForKey:@"appleIDClientIdentifier"] integerValue]){
            return [AADeviceInfo valueForKey:@"appleIDClientIdentifier"];
        } else{
            NSLog(@"没有");
        }
        
    }
    return @"";
}
上一篇下一篇

猜你喜欢

热点阅读