iOS获取设备型号、装置类型等信息
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获取设备型号、装置类型等信息的更多相关文章
- iOS获取设备型号、设备类型等信息
摘自 :http://www.mamicode.com/info-detail-1165460.html 设备标识 关于设备标识,历史上盛行过很多英雄,比如UDID.Mac地址.OpenUDID等,然 ...
- iOS获取设备型号和App版本号等信息(OC+Swift)
iOS获取设备型号和App版本号等信息(OC+Swift) 字数1687 阅读382 评论3 喜欢10 好久没有写过博客了,因为中间工作比较忙,然后有些个人事情所以耽误了.但是之前写的博客还一直有人来 ...
- iOS 获取设备型号以及IP地址
首先导入四个头文件 #include <sys/types.h> #include <sys/sysctl.h> #include <ifaddrs.h> #inc ...
- iOS获取设备型号
导入头文件 #include <sys/types.h> #include <sys/sysctl.h> 直接调用 //获得设备型号 + (NSString *)getCurr ...
- iOS 获取设备型号 ip6更新
//获得设备型号 + (NSString *)getCurrentDeviceModel:(UIViewController *)controller { ]; size_t len; char *m ...
- iOS获取设备型号的方法
1. [UIDevice currentDevice].model 自己写的看只抓到模拟器和iPhone.暂时不推荐. 2.自己写的找的方法再添加.直接 NSString * deviceMod ...
- (转)iOS获取设备型号
//获得设备型号 + (NSString *)getCurrentDeviceModel:(UIViewController *)controller { ]; size_t len; char *m ...
- iOS 获取设备信息,mac地址,IP地址,设备名称
#import "DeviceInfoUtil.h" #import "GlobleData.h" #import "sys/utsname.h&qu ...
- iOS获取设备唯一标识的8种方法
8种iOS获取设备唯一标识的方法,希望对大家有用. UDID UDID(Unique Device Identifier),iOS 设备的唯一识别码,是一个40位十六进制序列(越狱的设备通过某些工具可 ...
随机推荐
- Safari 前端开发调试 iOS 完美解决方案
转http://www.2cto.com/kf/201403/283404.html afari 前端开发调试 iOS 完美解决方案 2014-03-05 0个评论 来源:Safari ...
- Python UnicodeEncodeError: 'ascii' codec can't encode characters in position 0-4: ordinal not in range(128)
#!/usr/bin/python# -*- coding: utf-8 -*- 解决方法: 可以看到我的版本是2.6的,所以打开/usr/lib64/python2.6/site.py 红框里本来是 ...
- [Spring] - 动态设置properties
Spring的jar包用来做动态properties的getter/setter赋值方法: 1:需要的jar包: spring-beans-3.2.0.RC2.jar commons-logging- ...
- 北京VR视频外包团队:全景VR视频科普
近期很多用户资讯问关于全景视频,这里动点给大家介绍一下: 首先,全景360VR视频(全景视频使用VR设备控制)是一种特殊的视频形式,与普通视频的最大区别就是,全景视频的每一帧都是涵盖360度空间场景信 ...
- HAProxy安装配置详解
简介 HAProxy提供高可用性.负载均衡以及基于TCP和HTTP应用的代理,支持虚拟主机,它是免费.快速并且可靠的一种解决方案. HAProxy特别适用于那些负载特大的web站点,这些站点通常又需要 ...
- 报错:严重: Servlet.service() for servlet [jsp] in context with path [/20161116-Struts2-6] threw exception [/index.jsp (line: 13, column: 20) No tag "textfiled" defined in tag library imported with prefix
严重: Servlet.service() for servlet [jsp] in context with path [/20161116-Struts2-6] threw exception [ ...
- 利用WCF的双工通讯实现一个简单的心跳监控系统 z
利用WCF的双工通讯实现一个简单的心跳监控系统 http://www.cnblogs.com/zuowj/p/5761011.html 何为心跳监控系统? 故名思义,就是监控某个或某些个程序的运行状态 ...
- 实验室ip同步脚步
#!/bin/bash PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin hostname=`hostname` us ...
- FW开发代码规范---小任性(2)
三.空行 (1)在每个函数.结构体.枚举定义结束之后都要加空行. 在一个函数体内,逻辑密切相关的语句之间不加空行,其它地方应加空行分隔. struct st1 { - }; // 空行 enum { ...
- Linux6(5)安装Oracle Rac11g
1.创建用户组.以root身份运行以下命令:/usr/sbin/groupadd -g 501 oinstall /usr/sbin/groupadd -g 502 dba /usr/sbin/gro ...