教程说明
-
使用工具: iOS SDK
-
执行难度: 普通
-
操作时间: 15 到30分钟
设备数据的重要性
首先要明确一个问题:为什么我们需要访问设备数据?
如果在使用中遇到问题,移动应用用户往往会通过电子邮件将自己的遭遇或者求助信息发送给开发人员。在这种情况下,邮件内容越翔实、信息量越大、对于设备及系统环境的描述越具体,开发人员也就越容易给出科学的处理方案。举例来说,如果大家的应用程序需要接入互联网方能运行,而用户在徒步旅行途中发来邮件称应用无法正常工作,那么结论就变得非常清晰:用户无法通过热点接入互联网,因此应用没能顺利启动。另外,了解用户使用的iOS版本、应用程序版本以及国家、语言设定也很有帮助,这能让开发人员很快弄清使用者的设备状况,进而简化应用问题的诊断流程。
除了前面提到的bug诊断与问题追踪,通过UIDevice或者NSLocale访问信息还能有效改善应用程序的界面(例如根据用户所在地自动设定不同风格的界面)外观及实际表现。
了解UIDevice 类
大家与UIDevice类的初次会面可能来自移动设备的定向功能,不过除此之外,UIDevice还提供了多种其它属性、类函数及通告模式,帮助我们全方位了解设备状况。从检测电池电量到定位设备与用户面部的距离,UIDevice所做的工作就是为应用程序提供用户及设备的一切信息。UIDevice类还能够收集关于设备的各种具体细节,例如机型及iOS版本等。在接下来的教程中,大家会发现其中大部分属性都对开发工作具有积极的辅助作用。
了解 NSLocale 类
NSLocale类帮助我们的应用根据用户所在地的文化与语言习惯提供最令人满意的服务效果。通过及时调整货币类型、小数点分隔符、时间及日期格式等,应用程序能够为用户带来超出预期的智能工作效果,而这一切都是成功软件必须考虑的人文因素。另外,NSLocale还能够用于用户所在的地理位置,当用户联系开发者寻求帮助时,所在地也是很重要的支持信息之一。
获取设备信息
我们先从获取设备机型(检测iPhone、iPodTouch及iPad)与iOS版本入手。下列代码可通过UIDevice获取到设备的具体型号。
- UIDevice *currentDevice = [UIDevice currentDevice];
- NSString *model = [currentDevice model];
- NSString *systemVersion = [currentDevice systemVersion];
在第一行中,UIDevice会返回用户设备的实时运行状态实例。以此为基础,我们能够访问机型及系统版本等属性信息,进而掌握这类最关键的设备数据。
获取用户语言种类
接下来,我们尝试检索用户的语言种类及所在地设置信息。
- NSArray *languageArray = [NSLocale preferredLanguages];
- NSString *language = [languageArray objectAtIndex:0];
- NSLocale *locale = [NSLocale currentLocale];
- NSString *country = [locale localeIdentifier];
想获得用户的首选语言,我们需要使用NSLocale中的prefferedLanguages类函数,它能够返回用户当前语言设定中的信息。而用户的当前位置或者所在国家、地区信息则通过NSLocale对象获取。在实例中,类函数localeIdentifier会返回一条特定代码,其中包含用户所在国家/地区信息。
获取应用程序版本信息
最后,让我们看看用户正在使用的应用程序是哪个版本。
- NSString *appVersion = [[NSBundle mainBundle]
- objectForInfoDictionaryKey:(NSString *)kCFBundleVersionKey];
应用程序中的info.plist文件保存着当前应用版本信息,只要利用kCFBundleVersionKey对mainBundle进行访问,即可返回正确的应用程序版本结果。
记录设备数据
接下来,我们要将收集到的设备数据汇总并记录。
- NSString *deviceSpecs =
- [NSString stringWithFormat:@"%@ - %@ - %@ - %@ - %@",
- model, systemVersion, language, country, appVersion];
- NSLog(@"Device Specs --> %@",deviceSpecs);
在上述代码实例中,每一条信息都被打包成字符串,这样便于直接显示在控制台上。在实例应用中,大家可能希望这些信息以标题或文本内容的形式显示在反馈邮件中。
总结
在与应用程序用户的交流当中,开发人员掌握的设备信息越多、越具体,提出解决方案也就变得越容易。用户的技术水平参差不齐,因此常常难以准确表述自己所遇到的麻烦。通过详细了解他们的设备状况,开发人员能够更好地帮助他们解决问题,借而为用户提供更好的服务与产品使用乐趣。除了文章开头所谈到的理由,事实上访问设备数据也能帮助我们更好地协调同一套系统环境下多款应用之间的相互作用。大家有什么问题或者建议,不妨在评论栏中与其他读者朋友分享。
应用1: iOS开发判断是否第一次使用软件
对于软件来讲,在打开一个软件的时候我们都要有一个简单地引导页面或者欢迎界面,引导页面可以帮助用户清楚的了解出软件的使用,提高用户对软件的感观。
下面就是通过在appdelegate.m中实现的代码方法。图为plist文件内容
//此为找到plist文件中得版本号suo'dui所对应的键
NSString *key = (NSString *)kCFBundleVersionKey;
// 1.从plist中取出版本号
NSString *version = [NSBundle mainBundle].infoDictionary[key];
// 2.从沙盒中取出上次存储的版本号
NSString *saveVersion = [[NSUserDefaults standardUserDefaults] objectForKey:key];
if([version isEqualToString:saveVersion]) {
//不是第一次使用这个版本
//不显示状态
application.statusBarHidden =NO;
//去调用主界面的内容
self.window.rootViewController = [[MainController alloc] init];
}
}else{
//版本号不一样:第一次使用新版本
//将新版本号写入沙盒
[[NSUserDefaults standardUserDefaults] setObject:version forKey:key];
[[NSUserDefaults standardUserDefaults] synchronize];
//显示版本新特性界面
self.window.rootViewController = [[NewfeatureController alloc] init];
}