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

设备标识

关于设备标识,历史上盛行过很多英雄,比如UDID、Mac地址、OpenUDID等,然而他们都陆陆续续倒在了苹果的门下。苹果目前提供了2个方法供App获取设备标识:idfa和idfv

idfa:全称advertisingIdentifier,官方解释是广告标识,适用于广告推广,这个建议不要轻易使用,如果用了,则App里必须提供广告功能,否则很有可能会在AppStore审核时被拒。而且idfa是可以被用户关闭的(设置-》隐私),一旦被关闭,就获取不到了。

idfv:全称identifierForVendor,按照字面意思理解,相同的Vendor应该有相同的identifier。Vendor是根据app的bundleid的前两位来界定的,比如对于com.abc.app1和com.abc.app2这2个bundleid的app来说,他们就属于同一个vendor。idfv是一定可以获取到的。需要注意的一点是,当用户将某个vendor下的所有app都卸载掉时,idfv就会被重置,再次安装时,获取到的idfv会跟之前的不一样。所以我用的方案是:idfv+keychain。当然如果用户选择恢复出厂设置,那么还是会出现不一样,这种情况就没法处理了。

 +(NSString *)identifier
{
NSString *key = @"com.app.keychain.uuid";
KeychainItemWrapper *keychainItem = [[KeychainItemWrapper alloc] initWithIdentifier:key accessGroup:nil]; NSString *strUUID = [keychainItem objectForKey:(__bridge id)kSecValueData]; if (strUUID.length <= ) {
strUUID = [[[UIDevice currentDevice] identifierForVendor] UUIDString]; [keychainItem setObject:@"uuid" forKey:(__bridge id)kSecAttrAccount];
[keychainItem setObject:strUUID forKey:(__bridge id)kSecValueData];
} return strUUID;
}

手机别名

 +(NSString *)phoneName
{
return [[UIDevice currentDevice] name];
}

手机系统版本

 /**
* 手机系统版本
*
* @return e.g. 8.0
*/
+(NSString *)phoneVersion{
return [[UIDevice currentDevice] systemVersion];
}

手机型号

这个方法只能获取到iPhone、iPad这种信息,无法获取到是iPhone 4、iPhpone5这种具体的型号。

 /**
* 手机型号
*
* @return e.g. iPhone
*/
+(NSString *)phoneModel{
return [[UIDevice currentDevice] model];
}

设备版本

这个代码可以获取到具体的设备版本(已更新到iPhone 6s、iPhone 6s Plus),缺点是:采用的硬编码。具体的对应关系可以参考:https://www.theiphonewiki.com/wiki/Models

这个方法可以通过AppStore的审核,放心用吧。

 /**
* 设备版本
*
* @return e.g. iPhone 5S
*/
+ (NSString*)deviceVersion
{
// 需要#import "sys/utsname.h"
struct utsname systemInfo;
uname(&systemInfo);
NSString *deviceString = [NSString stringWithCString:systemInfo.machine encoding:NSUTF8StringEncoding]; //iPhone
if ([deviceString isEqualToString:@"iPhone1,1"]) return @"iPhone 1G";
if ([deviceString isEqualToString:@"iPhone1,2"]) return @"iPhone 3G";
if ([deviceString isEqualToString:@"iPhone2,1"]) return @"iPhone 3GS";
if ([deviceString isEqualToString:@"iPhone3,1"]) return @"iPhone 4";
if ([deviceString isEqualToString:@"iPhone3,2"]) return @"Verizon iPhone 4";
if ([deviceString isEqualToString:@"iPhone4,1"]) return @"iPhone 4S";
if ([deviceString isEqualToString:@"iPhone5,1"]) return @"iPhone 5";
if ([deviceString isEqualToString:@"iPhone5,2"]) return @"iPhone 5";
if ([deviceString isEqualToString:@"iPhone5,3"]) return @"iPhone 5C";
if ([deviceString isEqualToString:@"iPhone5,4"]) return @"iPhone 5C";
if ([deviceString isEqualToString:@"iPhone6,1"]) return @"iPhone 5S";
if ([deviceString isEqualToString:@"iPhone6,2"]) return @"iPhone 5S";
if ([deviceString isEqualToString:@"iPhone7,1"]) return @"iPhone 6 Plus";
if ([deviceString isEqualToString:@"iPhone7,2"]) return @"iPhone 6";
if ([deviceString isEqualToString:@"iPhone8,1"]) return @"iPhone 6s";
if ([deviceString isEqualToString:@"iPhone8,2"]) return @"iPhone 6s Plus"; //iPod
if ([deviceString isEqualToString:@"iPod1,1"]) return @"iPod Touch 1G";
if ([deviceString isEqualToString:@"iPod2,1"]) return @"iPod Touch 2G";
if ([deviceString isEqualToString:@"iPod3,1"]) return @"iPod Touch 3G";
if ([deviceString isEqualToString:@"iPod4,1"]) return @"iPod Touch 4G";
if ([deviceString isEqualToString:@"iPod5,1"]) return @"iPod Touch 5G"; //iPad
if ([deviceString isEqualToString:@"iPad1,1"]) return @"iPad";
if ([deviceString isEqualToString:@"iPad2,1"]) return @"iPad 2 (WiFi)";
if ([deviceString isEqualToString:@"iPad2,2"]) return @"iPad 2 (GSM)";
if ([deviceString isEqualToString:@"iPad2,3"]) return @"iPad 2 (CDMA)";
if ([deviceString isEqualToString:@"iPad2,4"]) return @"iPad 2 (32nm)";
if ([deviceString isEqualToString:@"iPad2,5"]) return @"iPad mini (WiFi)";
if ([deviceString isEqualToString:@"iPad2,6"]) return @"iPad mini (GSM)";
if ([deviceString isEqualToString:@"iPad2,7"]) return @"iPad mini (CDMA)"; if ([deviceString isEqualToString:@"iPad3,1"]) return @"iPad 3(WiFi)";
if ([deviceString isEqualToString:@"iPad3,2"]) return @"iPad 3(CDMA)";
if ([deviceString isEqualToString:@"iPad3,3"]) return @"iPad 3(4G)";
if ([deviceString isEqualToString:@"iPad3,4"]) return @"iPad 4 (WiFi)";
if ([deviceString isEqualToString:@"iPad3,5"]) return @"iPad 4 (4G)";
if ([deviceString isEqualToString:@"iPad3,6"]) return @"iPad 4 (CDMA)"; if ([deviceString isEqualToString:@"iPad4,1"]) return @"iPad Air";
if ([deviceString isEqualToString:@"iPad4,2"]) return @"iPad Air";
if ([deviceString isEqualToString:@"iPad4,3"]) return @"iPad Air";
if ([deviceString isEqualToString:@"iPad5,3"]) return @"iPad Air 2";
if ([deviceString isEqualToString:@"iPad5,4"]) return @"iPad Air 2";
if ([deviceString isEqualToString:@"i386"]) return @"Simulator";
if ([deviceString isEqualToString:@"x86_64"]) return @"Simulator"; if ([deviceString isEqualToString:@"iPad4,4"]
||[deviceString isEqualToString:@"iPad4,5"]
||[deviceString isEqualToString:@"iPad4,6"]) return @"iPad mini 2"; if ([deviceString isEqualToString:@"iPad4,7"]
||[deviceString isEqualToString:@"iPad4,8"]
||[deviceString isEqualToString:@"iPad4,9"]) return @"iPad mini 3"; return deviceString;
}

iOS获取设备型号、装置类型等信息的更多相关文章

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

    摘自 :http://www.mamicode.com/info-detail-1165460.html 设备标识 关于设备标识,历史上盛行过很多英雄,比如UDID.Mac地址.OpenUDID等,然 ...

  2. iOS获取设备型号和App版本号等信息(OC+Swift)

    iOS获取设备型号和App版本号等信息(OC+Swift) 字数1687 阅读382 评论3 喜欢10 好久没有写过博客了,因为中间工作比较忙,然后有些个人事情所以耽误了.但是之前写的博客还一直有人来 ...

  3. iOS 获取设备型号以及IP地址

    首先导入四个头文件 #include <sys/types.h> #include <sys/sysctl.h> #include <ifaddrs.h> #inc ...

  4. iOS获取设备型号

    导入头文件 #include <sys/types.h> #include <sys/sysctl.h> 直接调用 //获得设备型号 + (NSString *)getCurr ...

  5. iOS 获取设备型号 ip6更新

    //获得设备型号 + (NSString *)getCurrentDeviceModel:(UIViewController *)controller { ]; size_t len; char *m ...

  6. iOS获取设备型号的方法

    1. [UIDevice currentDevice].model   自己写的看只抓到模拟器和iPhone.暂时不推荐. 2.自己写的找的方法再添加.直接  NSString * deviceMod ...

  7. (转)iOS获取设备型号

    //获得设备型号 + (NSString *)getCurrentDeviceModel:(UIViewController *)controller { ]; size_t len; char *m ...

  8. iOS 获取设备信息,mac地址,IP地址,设备名称

    #import "DeviceInfoUtil.h" #import "GlobleData.h" #import "sys/utsname.h&qu ...

  9. iOS获取设备唯一标识的8种方法

    8种iOS获取设备唯一标识的方法,希望对大家有用. UDID UDID(Unique Device Identifier),iOS 设备的唯一识别码,是一个40位十六进制序列(越狱的设备通过某些工具可 ...

随机推荐

  1. 关于斐波拉契数列(Fibonacci)

    斐波那契数列指的是这样一个数列 0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233,377,610,987,1597,2584,4181,6765,10 ...

  2. UltraEdit 所有快捷键 说明

    快捷键              命令                      说明                              -------------------+------- ...

  3. AsyncTask 轻量级的异步类

    初步:http://www.cnblogs.com/devinzhang/archive/2012/02/13/2350070.html 详细:http://blog.csdn.net/liuhe68 ...

  4. 异步等待(ManualResetEvent

    ManualResetEvent实现异步等待,超过时间 不做处理,继续往下执行代码 (ManualResetEvent 涉及一个线程在其他线程进行之前必须完成的任务) ManualResetEvent ...

  5. JS获取当前日期时间及JS日期格式化

    Js获取当前日期时间: var myDate = new Date(); myDate.getYear(); //获取当前年份(2位) myDate.getFullYear(); //获取完整的年份( ...

  6. Win7 远程桌面 错误代码:5 异常处理(您的远程桌面会话即将结束 此计算机的虚拟内存可能不足。请关闭其他程序,然后重试连接远程计算机。如果问题仍然存在,请联系网络管理员或技术支持。)

    问题表现: 在用windows7 远程桌面连接其他电脑时,出现错误提示对话框—-标题为“严重错误(错误代码:5)”,内容为“您的远程桌面会话即将结束 此计算机的虚拟内存可能不足.请关闭其他程序,然后重 ...

  7. 如何修改SVN已提交项目的message log

    直接在TortoiseSVN中修改过往日志,会提示: DAV request failed;it's possible that the repository's pre-revprop-change ...

  8. Unity2D多分辨率屏幕适配方案(转载)

    一下内容转自:http://imgtec.eetrend.com/forum/3992 此文将阐述一种简单有效的Unity2D多分辨率屏幕适配方案,该方案适用于基于原生开发的Unity2D游戏,即没有 ...

  9. [Tex学习]WinEdit 常用软件快捷键

    WinEdit 常用软件快捷键 编辑: Alt+C:在剪贴板原有复制文本后增加新的被选择的文本. Ctrl+Shift+Alt+Right/Left:对选中文本增加或者删除Comment标记. Ctr ...

  10. Python正则表达式指南

    1. 正则表达式基础 1.1. 简单介绍 正则表达式并不是Python的一部分.正则表达式是用于处理字符串的强大工具,拥有自己独特的语法以及一个独立的处理引擎,效率上可能不如str自带的方法,但功能十 ...