UDID
UDID (Unique Device Identifier) :设备唯一标识符
UDID是一个40位十六进制序列,1326ee2662389aa5424e72875bf99211
获取方法:
[UIDevice currentDevice] uniqueIdentifier]
iOS5之后失效,现在可以使用iTunes和Xcode来获取这个值
UUID
UUID (Universally Unique Identifier):通用唯一标识符,当前这一刻全世界唯一,每次生成都是一个不一样的值
UUID是一个32位的十六进制序列(8-4-4-4-12), 37B326DB-0D51-4EC9-A93D-8A3AB37C411E
获取方法:
NSString *uuid = [NSUUID UUID].UUIDString;
iOS6之后可以使用
IDFA
IDFA (Identifier For Advertising):广告标识符,设备唯一,可以用来不同App之间共享数据
IDFA是一个32位的十六进制序列(8-4-4-4-12), 372BED65-EC7E-4F4F-B70B-5C5430078AEB
获取方法:
ASIdentifierManager *asIM = [[ASIdentifierManager alloc] init];
NSString *idfa = [asIM.advertisingIdentifier UUIDString];
iOS6之后可以使用,如果用户将限制广告跟踪的开关打开,返回00000000-0000-0000-000000000000,再次关闭会重新生成一个,还原也会重新生成
审核注意事项:https://blog.csdn.net/qq_29284809/article/details/52053833
IDFV
IDFV (Identifier For Vendor ):开发商标识符,和Bundle Identifier绑定,同一前缀的id下的应用获取的值相同,可以用来相同开发商下不同App之间共享数据
IDFV是一个32位的十六进制序列(8-4-4-4-12), 896A7040-F380-4885-A093-D8892C54F5F1
获取方法:
[[UIDevice currentDevice] identifierForVendor].UUIDString;
iOS6之后可以使用
IMEI
IMEI (International Mobile Equipment Identity):国际移动设备识别码,由15位数字组成的”电子串号”,它与每台手机一一对应,而且该码是全世界唯一的。每一部手机在组装完成后都将被赋予一个全球唯一的一组号码,这个号码从生产到交付使用都将被制造生产的厂商所记录。手机用户可以在手机中查到自己手机的IMEI码。
iOS5可以使用,之后失效
IMSI
IMSI (International Mobile Subscriber Identification Number):国际移动用户识别码
IMSI分为两部分:
一部分叫MCC(Mobile Country Code 移动国家码),MCC的资源由国际电联(ITU)统一分配,唯一识别移动用户所属的国家,MCC共3位,中国地区的MCC为460
另一部分叫MNC(Mobile Network Code 移动网络号码),用于识别移动客户所属的移动网络运营商。MNC由二到三个十进制数组成,例如中国移动MNC为00、02、07,中国联通的MNC为01、06、09,中国电信的MNC为03、05、11
CTTelephonyNetworkInfo *info = [[CTTelephonyNetworkInfo alloc] init];
CTCarrier *carrier = [info subscriberCellularProvider];
NSString *mcc = [carrier mobileCountryCode];
NSString *mnc = [carrier mobileNetworkCode];
NSString *imsi = [NSString stringWithFormat:@"%@%@", mcc, mnc];
iOS4以后可以使用
MAC地址
应用在iOS6及以下时,可以正确取道Mac地址,在iOS7上,会返回固定值
02:00:00:00:00:00
IP地址
NSString *address = @"";
struct ifaddrs *interfaces = NULL;
struct ifaddrs *temp_addr = NULL;
int success = 0;
success = getifaddrs(&interfaces);
if (success == 0) { // 0 表示获取成功
temp_addr = interfaces;
while (temp_addr != NULL) {
if( temp_addr->ifa_addr->sa_family == AF_INET) {
// Check if interface is en0 which is the wifi connection on the iPhone
if ([[NSString [stringWithUTF8String:temp_addr-](http://stringwithutf8stringtemp_addr-/)>ifa_name] isEqualToString:@"en0"]) {
// Get NSString from C String
address = [NSString [stringWithUTF8String:inet_ntoa](http://stringwithutf8stringinet_ntoa/)(((struct sockaddr_in *)temp_addr->ifa_addr)->sin_addr)];
}
}
temp_addr = temp_addr->ifa_next;
}
}
freeifaddrs(interfaces);
NSLog(@"%@", address);
注:感谢我的同事坤的分享~