iOS获取设备机型

您所在的位置:网站首页 iphone10模拟器 iOS获取设备机型

iOS获取设备机型

2023-10-29 12:38| 来源: 网络整理| 查看: 265

对于收集设备信息来说分成两大块,第一当然是设备的一些私有和唯一的信息,第二就是App的信息,我们先从简单的App的信息来说。

第一部分:App的信息

关于App的信息,我们大概就需要获取App的版本号、App的build版本号、包名、App显示名称等等。

//DeviceUtils.m中实现 #pragma mark - About App Config Info Method /*获取当前App的版本号信息*/ + (NSString *)getAppVersion { NSBundle *currentBundle = [NSBundle mainBundle]; NSDictionary *infoDictionary = [currentBundle infoDictionary]; return [infoDictionary objectForKey:@"CFBundleShortVersionString"]; } /*获取当前App的build版本号信息*/ + (NSString *)getAppBuildVersion { NSBundle *currentBundle = [NSBundle mainBundle]; NSDictionary *infoDictionary = [currentBundle infoDictionary]; return [infoDictionary objectForKey:@"CFBundleVersion"]; } /*获取当前App的包名信息*/ + (NSString *)getAppBundleId { NSBundle *currentBundle = [NSBundle mainBundle]; NSDictionary *infoDictionary = [currentBundle infoDictionary]; return [infoDictionary objectForKey:@"CFBundleIdentifier"]; } /*获取当前App的名称信息*/ + (NSString *)getAppDisplayName { NSBundle *currentBundle = [NSBundle mainBundle]; NSDictionary *infoDictionary = [currentBundle infoDictionary]; return [infoDictionary objectForKey:@"CFBundleDisplayName"]; } 第二部分:设备的一些私有和唯一的信息

关于获取设备各种标识符,大概统计了一下。基本上有IDFA、IDFV、IMEI、IMSI、UUID、UDID、MAC地址等等。但随着对用户隐私信息的保护,苹果系统对信息的获取进行权限设置,譬如IMEI、IMSI等的获取都明确禁止了,除非你发布的App不通过苹果商店的渠道。不管获取权限,先来介绍下这些字段的含义。

1、IMEI、IMSI、UUID、UDID、MAC地址 IMEI:英文名称是:International Mobile Equipment Identity,是国际移动设备身份码的缩写,国际移动装备辨识码,是由15位数字组成的”电子串号”,它与每台手机一一对应,而且该码是全世界唯一的。每一部手机在组装完成后都将被赋予一个全球唯一的一组号码,这个号码从生产到交付使用都将被制造生产的厂商所记录。手机用户可以在手机中查到自己手机的IMEI码。因为隐私问题,苹果用户在iOS5以后不能再获取IMEI的值了。如果开发的App不上架苹果商店,又想获取IMEI值,可参考此链接,获取IMEI值。

IMSI:英文名称是:International Mobile Subscriber Identification Number,是国际移动用户识别码的缩写,IMSI分为两部分:一部分叫MCC(Mobile Country Code移动国家码),MCC的资源由国际电联(ITU)统一分配,唯一识别移动用户所属的国家,MCC共3位,中国地区的MCC为460;另一部分叫MNC(Mobile Network Code 移动网络号码),MNC用于识别移动客户所属的移动网络运营商。MNC由二到三个十进制数组成,例如中国移动MNC为00、02、07,中国联通的MNC为01、06、09,中国电信的MNC为03、05、11。

UUID:英文名称是:Universally Unique Identifier,翻译过来就是通用唯一标识符。UUID是指在一台机器上生成的数字,它保证对在同一时空中的所有机器都是唯一的。通常平台会提供生成的API,是一个32位的十六进制序列,使用小横线来连接:8-4-4-4-12。由于UUID的本身特性,它保证对在同一时空中的所有机器都是唯一的。所以,需要作为唯一标识码的话,你可以通过保存在keychain或者NSUserDefaults中。

UDID:所谓UDID指的是设备的唯一设备识别符,移动广告商和游戏网络运营商往往需要通过UDID用来识别玩家用户,并对用户活动进行跟踪。UDID 在iOS5.0 的时候已经被抛弃使用了。因为隐私问题,苹果宣称如果第三方应用开发者继续分享或者使用iPhone、Mac、AppleWatch的UDID的话,那么他们的应用将会禁止上架。比如我开发了5款App,很多用户都下载了这5款App并使用。如果我能轻易的获取这些用户的UDID,其实我能拼凑出用户的很多信息。由于UDID本身的隐私属性,之前常常用来做第三方统计和其他的目的。苹果就推出了一个UDID的替代品identifierForVendor的属性,关于IDFV的详细内容在下一点中查看。UDID目前主要用于配置真机调试证书。

MAC地址:Mac地址是唯一的,unix有系统调用可以获取Mac地址。iPhone可能有多个Mac地址,wifi的地址、以及SIM卡的地址。一般来讲,我们取en0的地址,因为它是iPhone的wifi的地址,是肯定存在的(例外情况依然有:市面上依然存在一部分联通的阉割版无wifi的iPhone)。Mac地址涉及到隐私,不应该胡乱将用户的Mac地址传播,所以我们需要将Mac地址进行hash之后再去使用。同样因为隐私问题,在iOS7以后,苹果禁止获取MAC地址,系统现在只会返回02:00:00:00:00:00虚拟的地址。

2、IDFA、IDFV IDFA:广告标示符,iOS6及以后使用。用户可以在设置中控制IDFA是否允许获取以及重置,虽然一般用户都不知道有这个权限设置,所以IDFA是不能拿来当做设备唯一标识(UUID)的替代品。

关闭IDFA获取权限操作:设置 → 隐私 → 广告 → 选择禁止获取IDFA值 重新生成IDFA操作: 操作一:设置程序 → 通用 → 还原 → 还原位置与隐私 操作二:设置程序 → 通用 → 关于本机 → 广告 → 还原广告标示符

具体获取UUID和MAC值得方法: 获取UUID: NSString *idfv = [[[UIDevice currentDevice] identifierForVendor] UUIDString]; 获取MAC 地址

在开发中,我们经常需要获取设备的型号(如 iPhone X,iPhone 8 Plus 等)以进行数据统计,或者做不同的适>配。但苹果并没有提供相应的系统 API 让我们直接取得当前设备的型号。其中,UIDevice 有一个属性 model 只是用于获取 iOS 设备的类型,如 iPhone,iPod touch,iPad 等;而其另一个属性name表示当前设备的名称,由用户在设置》通用》关于》名称中设定,如 My iPhone,xxx的iPhone等。然而,我们无法根据这两个值获得具体的型号。 不过,每一种 iOS 设备型号都有对应的一个或多个硬件编码/标识符,称为 device model 或者叫 machine name,之前的小集介绍过,我们可以通过代码来获取:

// 需要#import "sys/utsname.h" + (NSString *)getDeviceIdentifier { struct utsname systemInfo; uname(&systemInfo); // 获取设备标识Identifier NSString *platform = [NSString stringWithCString:systemInfo.machine encoding:NSUTF8StringEncoding]; // iPhone if ([platform isEqualToString:@"iPhone1,1"]) return @"iPhone 2G"; if ([platform isEqualToString:@"iPhone1,2"]) return @"iPhone 3G"; if ([platform isEqualToString:@"iPhone2,1"]) return @"iPhone 3GS"; if ([platform isEqualToString:@"iPhone3,1"]) return @"iPhone 4"; if ([platform isEqualToString:@"iPhone3,2"]) return @"iPhone 4"; if ([platform isEqualToString:@"iPhone3,3"]) return @"iPhone 4"; if ([platform isEqualToString:@"iPhone4,1"]) return @"iPhone 4S"; if ([platform isEqualToString:@"iPhone5,1"]) return @"iPhone 5"; if ([platform isEqualToString:@"iPhone5,2"]) return @"iPhone 5"; if ([platform isEqualToString:@"iPhone5,3"]) return @"iPhone 5c"; if ([platform isEqualToString:@"iPhone5,4"]) return @"iPhone 5c"; if ([platform isEqualToString:@"iPhone6,1"]) return @"iPhone 5s"; if ([platform isEqualToString:@"iPhone6,2"]) return @"iPhone 5s"; if ([platform isEqualToString:@"iPhone7,1"]) return @"iPhone 6 Plus"; if ([platform isEqualToString:@"iPhone7,2"]) return @"iPhone 6"; if ([platform isEqualToString:@"iPhone8,1"]) return @"iPhone 6s"; if ([platform isEqualToString:@"iPhone8,2"]) return @"iPhone 6s Plus"; if ([platform isEqualToString:@"iPhone8,4"]) return @"iPhone SE"; if ([platform isEqualToString:@"iPhone9,1"]) return @"iPhone 7"; if ([platform isEqualToString:@"iPhone9,2"]) return @"iPhone 7 Plus"; if ([platform isEqualToString:@"iPhone10,1"]) return @"iPhone 8"; if ([platform isEqualToString:@"iPhone10,4"]) return @"iPhone 8"; if ([platform isEqualToString:@"iPhone10,2"]) return @"iPhone 8 Plus"; if ([platform isEqualToString:@"iPhone10,5"]) return @"iPhone 8 Plus"; if ([platform isEqualToString:@"iPhone10,3"]) return @"iPhone X"; if ([platform isEqualToString:@"iPhone10,6"]) return @"iPhone X"; if ([platform isEqualToString:@"iPhone11,2"]) return @"iPhone XS"; if ([platform isEqualToString:@"iPhone11,6"]) return @"iPhone XS MAX"; if ([platform isEqualToString:@"iPhone11,8"]) return @"iPhone XR"; if ([platform isEqualToString:@"iPhone12,1"]) return @"iPhone 11"; if ([platform isEqualToString:@"iPhone12,3"]) return @"iPhone 11 Pro"; if ([platform isEqualToString:@"iPhone12,5"]) return @"iPhone 11 Pro Max"; if ([platform isEqualToString:@"iPhone12,8"]) return @"iPhone SE (2nd generation)"; if ([platform isEqualToString:@"iPhone13,1"]) return @"iPhone 12 mini"; if ([platform isEqualToString:@"iPhone13,2"]) return @"iPhone 12"; if ([platform isEqualToString:@"iPhone13,3"]) return @"iPhone 12 Pro"; if ([platform isEqualToString:@"iPhone13,4"]) return @"iPhone 12 Pro Max"; // iPod if ([platform isEqualToString:@"iPod1,1"]) return @"iPod Touch 1"; if ([platform isEqualToString:@"iPod2,1"]) return @"iPod Touch 2"; if ([platform isEqualToString:@"iPod3,1"]) return @"iPod Touch 3"; if ([platform isEqualToString:@"iPod4,1"]) return @"iPod Touch 4"; if ([platform isEqualToString:@"iPod5,1"]) return @"iPod Touch 5"; if ([platform isEqualToString:@"iPod7,1"]) return @"iPod Touch 6"; if ([platform isEqualToString:@"iPod9,1"]) return @"iPod Touch 7"; // iPad if ([platform isEqualToString:@"iPad1,1"]) return @"iPad 1"; if ([platform isEqualToString:@"iPad2,1"]) return @"iPad 2"; if ([platform isEqualToString:@"iPad2,2"]) return @"iPad 2"; if ([platform isEqualToString:@"iPad2,3"]) return @"iPad 2"; if ([platform isEqualToString:@"iPad2,4"]) return @"iPad 2"; if ([platform isEqualToString:@"iPad2,5"]) return @"iPad Mini 1"; if ([platform isEqualToString:@"iPad2,6"]) return @"iPad Mini 1"; if ([platform isEqualToString:@"iPad2,7"]) return @"iPad Mini 1"; if ([platform isEqualToString:@"iPad3,1"]) return @"iPad 3"; if ([platform isEqualToString:@"iPad3,2"]) return @"iPad 3"; if ([platform isEqualToString:@"iPad3,3"]) return @"iPad 3"; if ([platform isEqualToString:@"iPad3,4"]) return @"iPad 4"; if ([platform isEqualToString:@"iPad3,5"]) return @"iPad 4"; if ([platform isEqualToString:@"iPad3,6"]) return @"iPad 4"; if ([platform isEqualToString:@"iPad4,1"]) return @"iPad Air"; if ([platform isEqualToString:@"iPad4,2"]) return @"iPad Air"; if ([platform isEqualToString:@"iPad4,3"]) return @"iPad Air"; if ([platform isEqualToString:@"iPad4,4"]) return @"iPad Mini 2"; if ([platform isEqualToString:@"iPad4,5"]) return @"iPad Mini 2"; if ([platform isEqualToString:@"iPad4,6"]) return @"iPad Mini 2"; if ([platform isEqualToString:@"iPad4,7"]) return @"iPad mini 3"; if ([platform isEqualToString:@"iPad4,8"]) return @"iPad mini 3"; if ([platform isEqualToString:@"iPad4,9"]) return @"iPad mini 3"; if ([platform isEqualToString:@"iPad5,1"]) return @"iPad mini 4"; if ([platform isEqualToString:@"iPad5,2"]) return @"iPad mini 4"; if ([platform isEqualToString:@"iPad5,3"]) return @"iPad Air 2"; if ([platform isEqualToString:@"iPad5,4"]) return @"iPad Air 2"; if ([platform isEqualToString:@"iPad6,3"]) return @"iPad Pro (9.7-inch)"; if ([platform isEqualToString:@"iPad6,4"]) return @"iPad Pro (9.7-inch)"; if ([platform isEqualToString:@"iPad6,7"]) return @"iPad Pro (12.9-inch)"; if ([platform isEqualToString:@"iPad6,8"]) return @"iPad Pro (12.9-inch)"; if ([platform isEqualToString:@"iPad6,11"]) return @"iPad 5"; if ([platform isEqualToString:@"iPad6,12"]) return @"iPad 5"; if ([platform isEqualToString:@"iPad7,1"]) return @"iPad Pro 2(12.9-inch)"; if ([platform isEqualToString:@"iPad7,2"]) return @"iPad Pro 2(12.9-inch)"; if ([platform isEqualToString:@"iPad7,3"]) return @"iPad Pro (10.5-inch)"; if ([platform isEqualToString:@"iPad7,4"]) return @"iPad Pro (10.5-inch)"; if ([platform isEqualToString:@"iPad7,5"]) return @"iPad 6"; if ([platform isEqualToString:@"iPad7,6"]) return @"iPad 6"; if ([platform isEqualToString:@"iPad7,11"]) return @"iPad 7"; if ([platform isEqualToString:@"iPad7,12"]) return @"iPad 7"; if ([platform isEqualToString:@"iPad8,1"]) return @"iPad Pro (11-inch) "; if ([platform isEqualToString:@"iPad8,2"]) return @"iPad Pro (11-inch) "; if ([platform isEqualToString:@"iPad8,3"]) return @"iPad Pro (11-inch) "; if ([platform isEqualToString:@"iPad8,4"]) return @"iPad Pro (11-inch) "; if ([platform isEqualToString:@"iPad8,5"]) return @"iPad Pro 3 (12.9-inch) "; if ([platform isEqualToString:@"iPad8,6"]) return @"iPad Pro 3 (12.9-inch) "; if ([platform isEqualToString:@"iPad8,7"]) return @"iPad Pro 3 (12.9-inch) "; if ([platform isEqualToString:@"iPad8,8"]) return @"iPad Pro 3 (12.9-inch) "; if ([platform isEqualToString:@"iPad11,1"]) return @"iPad mini 5"; if ([platform isEqualToString:@"iPad11,2"]) return @"iPad mini 5"; if ([platform isEqualToString:@"iPad11,3"]) return @"iPad Air 3"; if ([platform isEqualToString:@"iPad11,4"]) return @"iPad Air 3"; // 其他 if ([platform isEqualToString:@"i386"]) return @"iPhone Simulator"; if ([platform isEqualToString:@"x86_64"]) return @"iPhone Simulator"; return platform; }

完整的 device mode 数据参考 Wiki:



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3