UDID

简介:UDID的全称是Unique Device Identifier,顾名思义,它就是苹果IOS设备的唯一识别码,它由40个字符的字母和数字组成。在很多需要限制一台设备一个账号的应用中经常会用到。在iOS5中可以获取到设备的UDID,iOS7中已经完全的禁用了它。iOS7之前的使用了的app如果在iOS7上运行,它不会返回设备的UDID,而是会返回一串字符串,以FFFFFFFF开头,跟着identifierForVendor的十六进制值。

获取:[[UIDevice currentDevice] uniqueIdentifier]

废弃:iOS6

IDFV

简介:iOS 6.0系统新增用于替换uniqueIdentifier的接口。是给Vendor标识用户用的,每个设备在所属同一个Vender的应用里,都有相同的值。其中的Vender是指应用提供商,但准确点说,是通过BundleID的DNS反转的前两部分进行匹配,如果相同就是同一个Vender,例如对于com.somecompany.appone,com.somecompany.apptwo这两个BundleID来说,就属于同一个Vender,共享同一个idfv的值。和idfa不同的是,idfv的值是一定能取到的,所以非常适合于作为内部用户行为分析的主id,来标识用户,替代OpenUDID。如果用户将属于此Vender的所有App卸载,则idfv的值会被重置,即再重装此Vender的App,idfv的值和之前不同。

获取:[[[UIDevice currentDevice] identifierForVendor] UUIDString]

适用:iOS6.0+

例子:95955F33-BFBD-48BA-A630-866D2DAE482D

IDFA

简介:广告标示符,适用于对外:例如广告推广,换量等跨应用的用户追踪等。但如果用户完全重置系统((设置程序 -> 通用 -> 还原 -> 还原位置与隐私) ,这个广告标示符会重新生成。另外如果用户明确的还原广告(设置程序-> 通用 -> 关于本机 -> 广告 -> 还原广告标示符) ,那么广告标示符也会重新生成。注意:如果程序在后台运行,此时用户“还原广告标示符”,然后再回到程序中,此时获取广 告标示符并不会立即获得还原后的标示符。必须要终止程序,然后再重新启动程序,才能获得还原后的广告标示符。在同一个设备上的所有App都会取到相同的值,是苹果专门给各广告提供商用来追踪用户而设的,用户可以在 设置 -> 隐私 -> 广告追踪 里重置此id的值,或限制此id的使用。

获取:[[[ASIdentifierManager sharedManager] advertisingIdentifier] UUIDString];

适用:iOS6.0+

例子:9C287922-EE26-4501-94B5-DDE6F83E1475

MAC地址

简介:MAC地址在网络上用来区分设备的唯一性,接入网络的设备都有一个MAC地址,他们肯定都是不同的,是唯一的。一部iPhone上可能有多个MAC地址,包括WIFI的、SIM的等,但是iTouch和iPad上就有一个WIFI的,因此只需获取WIFI的MAC地址就好了,也就是en0的地址。MAC地址就如同我们身份证上的身份证号码,具有全球唯一性。但在iOS7之后,如果请求Mac地址都会返回一个固定值。

废弃:iOS7.0+

- (NSString *)macAddress
{  int                 mib[6];  size_t              len;  char                *buf;  unsigned char       *ptr;  struct if_msghdr    *ifm;  struct sockaddr_dl  *sdl;  mib[0] = CTL_NET;  mib[1] = AF_ROUTE;  mib[2] = 0;  mib[3] = AF_LINK;  mib[4] = NET_RT_IFLIST;  if ((mib[5] = if_nametoindex("en0")) == 0) {  printf("Error: if_nametoindex error/n");  return NULL;  }  if (sysctl(mib, 6, NULL, &len, NULL, 0) < 0) {  printf("Error: sysctl, take 1/n");  return NULL;  }  if ((buf = malloc(len)) == NULL) {  printf("Could not allocate memory. error!/n");  return NULL;  }  if (sysctl(mib, 6, buf, &len, NULL, 0) < 0) {  printf("Error: sysctl, take 2");  return NULL;  }  ifm = (struct if_msghdr *)buf;  sdl = (struct sockaddr_dl *)(ifm + 1);  ptr = (unsigned char *)LLADDR(sdl);  NSString *outstring = [NSString stringWithFormat:@"%02x:%02x:%02x:%02x:%02x:%02x", *ptr, *(ptr+1), *(ptr+2), *(ptr+3), *(ptr+4), *(ptr+5)];  NSLog(@"outString:%@", outstring);  free(buf);  return [outstring uppercaseString];
}

KeyChain

简介:iOS整个系统有一个KeyChain,每个程序都可以往KeyChain中记录数据,而且只能读取到自己程序记录在KeyChain中的数据。而且就算我们程序删除掉,系统经过升级以后再安装回来,依旧可以获取到与之前一致的UDID(系统还原、刷机除外)。因此我们可以将UUID的字符串存储到KeyChain中,然后下次直接从KeyChain获取UUID字符串。(本示例中使用KeychainItemWrapper工具类)

获取:

+ (NSString *)UUID {KeychainItemWrapper *keyChainWrapper = [[KeychainItemWrapper alloc] initWithIdentifier:@"MYAppID" accessGroup:@"com.test.app"];NSString *UUID = [keyChainWrapper objectForKey:(__bridge id)kSecValueData];if (UUID == nil || UUID.length == 0) {UUID = [[[UIDevice currentDevice] identifierForVendor] UUIDString];[keyChainWrapper setObject:UUID forKey:(__bridge id)kSecValueData];}return UUID;
}

AppleAccount

简介:虽然苹果在iOS6中禁用了获取uuid的方式,但是只要你研究下就知道这个API只是私有化了,使用私有API还是可以获取设备的uuid。但是这个方面也面临着风险:比如API变更以及AppStore审核问题,但是在越狱设备上你还是可以尽情享用的。

类:AADeviceInfo(dump出头文件)

@class NSObject<OS_dispatch_semaphore>, APSConnection, NSData;@interface AADeviceInfo : NSObject {APSConnection *_apsConnection;BOOL _tokenDone;NSData *_token;NSObject<OS_dispatch_semaphore> *_tokenSema;}+ (id)userAgentHeader;+ (id)signatureWithDictionary:(id)arg1;+ (id)apnsToken;+ (id)serialNumber;+ (id)clientInfoHeader;+ (id)appleIDClientIdentifier;+ (id)productVersion;+ (id)osVersion;+ (id)udid;+ (id)infoDictionary;- (id)wifiMacAddress;- (id)regionCode;- (id)deviceClass;- (id)osName;- (id)productType;- (id)apnsToken;- (id)serialNumber;- (id)deviceInfoDictionary;- (id)appleIDClientIdentifier;- (id)productVersion;- (id)osVersion;- (id)udid;- (id)init;- (void).cxx_destruct;- (id)buildVersion;@end

获取:[AADeviceInfo udid]

使用方法:在项目中将真机上的AppleAccount.framework框架导出,引入Xcode工程中,利用runtime或者直接使用该类就行。(细节补充:导出AppleAccount.framework后,进入AppleAccount.framework的根目录,新建Headers文件夹,然后将dump出的头文件放在Headers目录,就可以像引用第三方framework一样在项目中使用)

iOS获取设备ID总结相关推荐

  1. IOS获取设备 ID

    iOS获取设备 ID 命令行方式 $ xcrun simctl list 1 这行命令会列出你的所以模拟器信息,里面有类似 XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX 的 ...

  2. ios 设备获取idfa_iOS获取设备ID总结

    iOS获取设备ID总结 UDID 简介:UDID的全称是Unique Device Identifier,顾名思义,它就是苹果IOS设备的唯一识别码,它由40个字符的字母和数字组成.在很多需要限制一台 ...

  3. iOS获取设备的唯一标识的方法

    各种获取设备唯一标识的方法介绍 一.UDID(Unique Device Identifier) UDID的全称是Unique Device Identifier,它就是苹果iOS设备的唯一识别码,它 ...

  4. iOS获取设备UDID/IMEI信息

    标题iOS获取设备UDID/IMEI信息 通过Safari与mobileconfig获取iOS设备UDID UDID (Unique Device Identifier),唯一标示符,是iOS设备的一 ...

  5. iOS获取设备型号、设备类型等信息

    iOS获取设备型号.设备类型等信息 设备标识 关于设备标识,历史上盛行过很多英雄,比如UDID.Mac地址.OpenUDID等,然而他们都陆陆续续倒在了苹果的门下.苹果目前提供了2个方法供App获取设 ...

  6. iOS获取设备唯一标识的各种方法?IDFA、IDFV、UDID分别是什么含义?

    http://www.ithao123.cn/content-8688001.html iOS获取设备唯一标识的各种方法?IDFA.IDFV.UDID分别是什么含义? [摘要:1.UDID (Uniq ...

  7. Android 获取设备ID,手机厂商,运营商,联网方式,获取系统语言,获取时区

    权限 <uses-permission android:name="android.permission.READ_PHONE_STATE" /> 安卓6.0需动态获取 ...

  8. Android获取设备ID号

    Android获取设备ID号 Android有多种方式可以获取设备ID,但是每一种总会有一点限制,为此,整合几种方式在一起,这样就万无一失了 public class DeviceIdFactory ...

  9. 工具篇——DeviceIDUtil(获取设备ID)

    写代码的四点: 1.明确需求.要做什么? 2.分析思路.要怎么做?(1,2,3--) 3.确定步骤.每一个思路要用到哪些语句.方法和对象. 4.代码实现.用具体的语言代码将思路实现出来. 学习新技术的 ...

最新文章

  1. 奇淫异巧之 PHP 后门
  2. 根据用户的生命周期,实现个性化的运营策略
  3. Python函数Day1
  4. 机器学习导论(张志华):多元高斯分布及应用
  5. linux安装phpredis扩展
  6. 电路知识--认识原理图(三)
  7. 开启阿里云对象存储OSS防误删新功能,保护您珍贵的数据。
  8. Pandas知识点-合并操作combine
  9. 你不知道的《阿里巴巴Java开发手册》背后故事
  10. 微信开发者工具——支持less的插件
  11. 3ds max 2012 VRay 2.0-3ds max 效果图设计与制作-HDRI贴图的应用
  12. QT on Android的rtsp播放器demo
  13. SAP那些事-理论篇-18-如何做SAP售前
  14. xmind 7 pro破解补丁|xmind 7 pro注册机下载(附xmind7 pro序列号/注册码/激活码)
  15. POI 模板生成word PDF——牛X神器
  16. PHP爬虫微博某个话题的所有内容,GitHub - wansho/sina_weibo_crawl: 爬取新浪微博某一话题的数据,可以替代微博搜索接口...
  17. 为BIG网站建立历史记录页面
  18. 金山篡改浏览器主页问题(改成毒霸网址大全)
  19. 络腮胡子的男程序员们都在怎么刮胡子呢?应该用电推子来刮胡子
  20. 划水总结剑指offer 链表系列1

热门文章

  1. android 微信架构,微信App支付技术架构全解析
  2. MongoDB可视化工具之Studio 3T的使用
  3. xcode 软件˙∆集~
  4. 重学JavaWeb —— JSP,简单全面一发入魂
  5. re 正则表达式匹配中文
  6. D3D11_Chili_Tutorial(2):画一个三角形
  7. Flutter 仿滴滴出行App,2021最新华为Android校招面试题
  8. c#实现爬虫获取小说(.NET)
  9. 用Python批量把EXCEL表格中的数据提交到网页上
  10. Linux 8723be无线网卡,解决rtl8723be无线网卡驱动频繁断网问题