本文介绍了,App中需要用到的功能点以及其处理策略。
Privacy Strategies
通过硬盘加密(On-Disk Encryption)进行数据保护
数据保护在iOS系统上,是基于两种策略进行保护的:
- 设备的文件系统支持数据保护;
- 设备需要密码进行解锁。
基于以上策略,进行数据保护的文件API如下:
1 | 创建新文件时:[data writeToFile:@"Path" options:NSDataWritingFileProtectionNone error:nil] |
这里有四种保护方式:
Name | Key | Func |
---|---|---|
No protection | NSDataWritingFileProtectionNone(NSData) NSFileProtectionNone(NSFileManager) | 不保护,即使锁屏也可访问 |
Complete | NSDataWritingFileProtectionComplete(NSData) NSFileProtectionComplete(NSFileManager) | 完全保护,锁屏不可访问 |
Complete unless already open | NSDataWritingFileProtectionCompleteUnlessOpen(NSData) NSFileProtectionCompleteUnlessOpen(NSFileManager) | 部分保护,没有打开的文件,锁屏不可访问,对于已打开的文件,锁屏也可以继续访问 |
Complete until first login | NSDataWritingFileProtectionCompleteUntilFirstUserAuthentication(NSData) NSFileProtectionCompleteUntilFirstUserAuthentication(NSFileManager) | 部分保护,只有设备启动,并且用户解锁过一次,才能访问 |
对于文件的访问状态变化,可以通过以下方式获取:
1 | AppDelegate中的:applicationProtectedDataWillBecomeUnavailable:和applicationProtectedDataDidBecomeAvailable:两个回调; |
标识用户
标识用户的方式有以下几种:
- 标识用户与服务端的账号:App自定义登录页面;
- 标识用户与广告:使用ASIdentifierManager的advertisingIdentifier属性;
- 标识用户与设备:一台设备会生成一个对应的UUID,这个只能标识设备,一个用户可能有多台设备,方法如下:
1 | [[UIDevice currentDevice] identifierForVendor] |
Respecting Restrictions
iOS系统的用户可以对一些内容进行限制,例如父母可以限制儿童可以访问的内容,如果App播放或者修改一些被限制的多媒体文件,需要根据设置App中的设置进行判断,以及根据设置的变化而变化。
获取当前的某项设置,可以使用以下方法:
1 | [NSUserDefaults standardUserDefaults] objectForKey:> |
其中,Key包含:
Media rating key | Value |
---|---|
com.apple.content-rating.ExplicitBooksAllowed | Boolean.如果为NO,则详细的Books信息将不被允许访问 |
com.apple.content-rating.ExplicitMusicPodcastsAllowed | Boolean.如果为NO,则详细的Music、Movies和Podcasts信息将不被允许访问 |
com.apple.content-rating.AppRating | NSNumber.0到1000之间,高于这个值的App将不被允许访问 |
com.apple.content-rating.MovieRating | NSNumber.0到1000之间,高于这个值的Movie将不被允许访问 |
com.apple.content-rating.TVShowRating | NSNumber.0到1000之间,高于这个值的TV Show将不被允许访问 |
其中,App评级是所有地区通用的,对应关系如下:
Rating name | Numerical value |
---|---|
4+ | 100 |
9+ | 200 |
12+ | 300 |
17+ | 600 |
Movie和TV的评级是每个地区不同的,有些地区没有评级系统,需要App根据当地的律法自行判断。每个地图的评级定义可能不同,例如美国是用字符串“G”和数字100来表明最低的评级。
注意,可以通过监听NSUserDefaultsDidChangeNotification通知来获取用户是否改变Restrictions的设置。
Supporting Multiple Versions of iOS
由于iOS系统的升级,有些API可能不再可用了,所以,需要进行检查(Runtime Checks),下面是一些常用的检查方法:
判断Class是否存在
1 | if ([UIPrintInteractionController class]) { |
判断Method是否存在
1 | [TestClass instancesRespondToSelector:] |
判断一个C函数是否存在
1 | if (UIGraphicsBeginPDFPage != NULL) { |
Tips for Developing a VoIP App
VoIP(Voice over Internet Protocol),在iOS 8以上的系统,可以通过Apple Push Notification service(APNs)和PushKit Framework来创建服务,而不需要通过原来的建立Socket或者其他方式的长连接来监听来电。
VoIP服务需要注意以下几点:
- 设置后台运行:设置支持VoIP,建议设置支持后台音乐;
- 使用PushKit来接受和处理VoIP推送;
- 处理好音频焦点(Audio Session);
- 使用CoreTelephony处理好电话事件;
- 处理好网络变化情况;
- 需要VoIP的服务证书,来允许推送服务端连接到VoIP服务端。