iOS获取设备型号、设备类型等信息
2016-03-02 10:40
573 查看
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 <=
0) {
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;
}
设备标识
关于设备标识,历史上盛行过很多英雄,比如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 <=
0) {
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;
}
相关文章推荐
- 峰回路转,Firefox 浏览器即将重返 iOS 平台
- 峰回路转,Firefox 浏览器即将重返 iOS 平台
- 不可修补的 iOS 漏洞可能导致 iPhone 4s 到 iPhone X 永久越狱
- iOS 12.4 系统遭黑客破解,漏洞危及数百万用户
- 每日安全资讯:NSO,一家专业入侵 iPhone 的神秘公司
- [转][源代码]Comex公布JailbreakMe 3.0源代码
- 讲解iOS开发中基本的定位功能实现
- iOS中定位当前位置坐标及转换为火星坐标的方法
- js判断客户端是iOS还是Android等移动终端的方法
- iOS应用中UISearchDisplayController搜索效果的用法
- IOS开发环境windows化攻略
- 浅析iOS应用开发中线程间的通信与线程安全问题
- 检测iOS设备是否越狱的方法
- .net平台推送ios消息的实现方法
- 探讨Android与iOS,我们将何去何从?
- Android、iOS和Windows Phone中的推送技术详解
- iOS推送的那些事
- IOS 改变键盘颜色代码
- 微信支付终于成功了(安卓、iOS)在此分享