获取iOS的设备和网络信息

Yeolar   2015-04-30 11:13  

用户所用设备的相关信息对于故障诊断、系统兼容和用户跟踪十分重要。得到的信息越详细具体,对于问题诊断和处理就越容易高效。因此,从设备上获取各类信息就很必要了。

获取设备信息

设备信息主要来自 UIDevice 类。大家与 UIDevice 类的初次会面可能来自移动设备的定向功能,不过除此之外, UIDevice 还提供了多种其它属性、类函数及通告模式,帮助我们全方位了解设备状况。从检测电池电量到定位设备与用户面部的距离, UIDevice 所做的工作就是为应用程序提供用户及设备的一切信息。 UIDevice 类还能够收集关于设备的各种具体细节,例如机型及iOS版本等。

UIDevice *currentDevice = [UIDevice currentDevice];
currentDevice.name;                             // 设备所有者的名称
currentDevice.model;                            // 设备的类别
currentDevice.localizedModel;                   // 设备的的本地化版本
currentDevice.systemName;                       // 设备运行的系统
currentDevice.systemVersion;                    // 当前系统的版本
currentDevice.identifierForVendor.UUIDString;   // 设备识别码

参考: ios获取设备系统信息

获取用户语言种类

NSLocale 类帮助我们的应用根据用户所在地的文化与语言习惯提供最令人满意的服务效果。通过及时调整货币类型、小数点分隔符、时间及日期格式等,应用程序能够为用户带来超出预期的智能工作效果,而这一切都是成功软件必须考虑的人文因素。另外, NSLocale 还能够用于用户所在的地理位置,当用户联系开发者寻求帮助时,所在地也是很重要的支持信息之一。

NSArray *languageArray = [NSLocale preferredLanguages];
NSString *language = [languageArray objectAtIndex:0];   // 用户首选语言
NSLocale *locale = [NSLocale currentLocale];
NSString *country = [locale localeIdentifier];          // 用户所在国家

获取应用的版本信息

应用程序中的info.plist文件保存着当前应用版本信息,只要利用 kCFBundleVersionKeymainBundle 进行访问,即可返回正确的应用程序版本结果。

NSString *appVersion = [[NSBundle mainBundle] objectForInfoDictionaryKey:(NSString *)kCFBundleVersionKey];

参考:

获取设备MAC地址

iOS7以后苹果对于 sysctlioctl 进行了技术处理,MAC地址返回的都是02:00:00:00:00:00。所以目前只能在iOS7以前版本获取MAC地址。

获取方法参考: iOS获取手机的Mac地址

获取运营商信息

运营商信息包括网络类型和运营商的代码。可以通过 CTTelephonyNetworkInfo 获取。

获取网络类型:

CTTelephonyNetworkInfo *telephonyInfo = [CTTelephonyNetworkInfo new];
NSLog(@"Current Radio Access Technology: %@", telephonyInfo.currentRadioAccessTechnology);
[NSNotificationCenter.defaultCenter addObserverForName:CTRadioAccessTechnologyDidChangeNotification
                                                object:nil
                                                 queue:nil
                                            usingBlock:^(NSNotification *note)
{
    NSLog(@"New Radio Access Technology: %@", telephonyInfo.currentRadioAccessTechnology);
}];

运营商代码还要用到 CTCarrierCTCarrier 类型代表着具体的运营商信息。调用 CTTelephonyNetworkInfosubscriberCellularProvider 方法来获取当前运营商信息,或者调用 subscriberCellularProviderDidUpdateNotifier 方法来觉察运营商变化。

mobileCountryCode (MCC) 和 mobileNetworkCode (MNC) 可以参考: http://en.wikipedia.org/wiki/Mobile_country_code

参考:

http://www.yeolar.com/note/2015/04/30/ios-device-and-network-info/

http://www.yeolar.com/note/2015/04/30/ios-device-and-network-info/