iOS IDFA等相关用户隐私信息获取方法介绍

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);

注:感谢我的同事坤的分享~

你可能感兴趣的:(iOS IDFA等相关用户隐私信息获取方法介绍)