App Programming Guide for iOS -> 期望的应用行为(二)

支持用户隐私

为用户的隐私进行设计是很重要的。大多数iOS设备包含了用户不想泄露的隐私数据。如果你的应用访问或者不正确的使用这些数据,用户有可能删除你的应用。

只有根据适用的法律获得了用户知情同意的情况下,才能访问用户或者设备的数据。此外,采取适当的步骤保护用户和设备的数据,并对清晰说明你如何使用它们。这里有一些你可以采用的最佳实践:

  • 审查政府或者行业来源的指南,包括以下文档:(这部分就不翻译了)
  • 这些报告为保护用户隐私提供了有用的建议。你应该和公司里的法律顾问一起审查这些文档。
  • 在你的应用需要用户或者设备的敏感数据(这些数据被iOS系统授权设置保护)时,你要进行请求访问它们。你必须在应用的Info.plis文件中提供目的字符串来解释应用为什么需要这些你正尝试访问的数据或资源。通过iOS授权设置保护的数据包括为止、通讯录、日历事件、提醒、照片、媒体、以及很多其他类型等等;详见表1-2。在用户未授权访问所请求的数据时,提供合理的的回退行为。
  • 用户明确的了解他们的数据将被如何使用。例如,当你要提交应用到App Store时,将你的隐私策略或说明的URL指定为iTunes Connect元数据的一部分。你也许还想在应用描述中总结这个策略或说明。更多关于在iTunes Connect中提供应用隐私策略的信息,参见 iTunes Connec中的Adding an App。
  • 让用户控制他们的用户或设备数据。提供设置,这样用户就可以根据需要禁用某些敏感类型信息的访问。
  • 请求最少量的用户或设备数据来完成给定任务。不要在没有明确原因、或者因为你觉得可能会有用的情况下访问或者搜集数据。
  • 采用合理的步骤来保护你从应用中搜集到的用户或者设备的数据。当本地存储这些信息时,尝试使用iOS数据保护功能(在Protecting Data Using On-Disk Encryption中描述)将其存储为加密格式。当通过网络发送用户或设备数据时,使用应用安全传输(App Transport Security, 在NSAppTransportSecurity中描述)。
  • 如果你的应用使用ASIdentifierManager类,你必须关注它的advertisingTrackingEnabled属性值。如果这个属性被用户设置为NO时,只能为有限广告用途(Limited Advertising Purposes)使用ASIdentifierManager类。在广告支持API文档中,“有限广告用途”是指频率上限、归因、转换事件、估算单一用户数量、广告欺诈检测、仅用于广告的调试、以及其他苹果认可的使用广告的方式。
  • 如果你还没有这样所,那就停止使用由UIDevice 类的uniqueIdentifier属性提供的唯一设备标识符(unique device identifier, UUID)。这个属性在iOS 5.0的时候被弃用,App Store不再接受使用这个标识的新应用或者应用的更新。取而代之,应用应该使用UIDevice类的identifierForVendor属性,或者是ASIdentifierManager类的advertisingIdentifier属性。
  • 如果应用支持音频输入,配置你的音频会话,仅在实际开始录制的时候进行录制。如果你不打算立刻录音,就不要在启动的时候配置音频会话进行录音。当应用为录音配置音频会话的时候,系统会给用户一个警告,并给用户一个禁用录音的选项。

表1-2罗列了iOS授权支持的资源和数据的类型。对于每个项,这表显示了目标字符串的键和用来检查授权状态的API。

重要:当你的应用试图使用一个被保护的项(item)时,系统会使用一个警告来提示用户,这个警告会询问是否允许访问。从iOS 10开始, Info.plist文件必须为每个这样的项包含目的字符串,显示在授权警告中。如果应用试图访问一个没有提供合适目的字符串的项时,应用退出。(此行为同样适用于iMessage 应用,它必须在访问设备的相机和麦克风之前包含表1-2罗列的相关键。)

对于受保护的数据和资源,iOS框架提供专门的API来检查并请求授权,如表1-2所描述的。

因为用户可以使用Setting(设置)应用来随时改变授权,所以要在访问这些项之前,检查授权状态。(一些功能,尤其是motion和HomeKit,没有提供专门的API来检查系统授权状态。详细内容参见表1-2。)

表1-2 通过系统授权设置保护数据和资源

数据或资源 目标字符串,Info.plist键 系统授权API
蓝牙外设 NSBluetoothPeripheralUsageDescription 使用这个CBCentralManager类的state属性来为蓝牙外设检查系统的授权状态。
日历数据 NSCalendarsUsageDescription 使用EKEventStore类的authorizationStatusForEntityType:方法来检查访问日历数据的系统授权状态。
相机 NSCameraUsageDescription 使用AVCaptureDeviceInput类的deviceInputWithDevice:error:方法来检查使用设备相机的系统授权状态。
通讯录 NSContactsUsageDescription 使用CNContactStore类的authorizationStatusForEntityType:方法来检查访问通讯录数据的系统授权状态。
健康分享 NSHealthShareUsageDescription 使用HKHealthStore类的authorizationStatusForType:方法来检查访问健康数据的系统授权状态。
使用requestAuthorizationToShareTypes:readTypes:completion:来请求许可。
健康更新 NSHealthUpdateUsageDescription 使用HKHealthStore 类的authorizationStatusForType:方法来检查访问健康数据的系统授权状态。
使用requestAuthorizationToShareTypes:readTypes:completion:方法来请求授权。
HomeKit NSHomeKitUsageDescription 当你的应用第一次试图访问HMHomeManager类的属性时,系统为用户呈现授权请求。
位置 NSLocationAlwaysUsageDescription, NSLocationWhenInUseUsageDescription 使用CLLocationManager类的authorizationStatus 方法来检查访问位置数据的系统授权状态。
使用requestWhenInUseAuthorization或requestAlwaysAuthorization方法来请求授权。
麦克风 NSMicrophoneUsageDescription 使用AVAudioSession 类的recordPermission方法来检查使用设备麦克风的系统授权状态。
使用requestRecordPermission:方法请求授权。
运动 NSMotionUsageDescription 检查来自CMMotionActivityManager类的queryActivityStartingFromDate:toDate:toQueue:withHandler:方法的CMErrorNotAuthorized错误,用来检查访问加速计的系统授权状态。
音乐和媒体库 NSAppleMusicUsageDescription 使用ALAssetsLibrary 类的authorizationStatus 方法来检查访问媒体资源的系统授权状态。
照片 NSPhotoLibraryUsageDescription 使用PHPhotoLibrary 类的authorizationStatus 方法来检查访问照片库的系统授权状态。
提醒 NSRemindersUsageDescription 使用EKEventStore 类的authorizationStatusForEntityType: 方法来检查访问提醒数据的系统授权状态。
Siri NSSiriUsageDescription 使用INPreferences 类的siriAuthorizationStatus 方法来检查使用Siri的系统授权状态。
使用requestSiriAuthorization:方法来为应用请求使用SiriKit的授权。
语音识别 NSSpeechRecognitionUsageDescription 使用SFSpeechRecognizer 类的 authorizationStatus方法来检查使用语音识别的系统授权状态。
使用requestAuthorization方法,来为应用使用语音识别请求授权。
TV提供商 NSVideoSubscriberAccountUsageDescription 使用 VSAccountManager 类的 checkAccessStatusWithOptions:completionHandler:方法来检查访问用户视频服务订购信息的系统授权状态。
使用enqueueResourceAuthorizationRequest:completionHandler:方法请求授权。

查看表1-2是了解应用隐私行为的起点,而不是一个全面的清单。这个表会随着iOS的升级而变化。

国际化你的应用

因为iOS应用会在很多国家发布,本地化你的应用内容能够帮助你得到更多的客户。和用户更喜欢使用用他们国家的语言进行了本地化的应用。当你的将用户界面内容视为资源文件的时候,本地化这些内容是相对简单的过程。

在你能够本地化你的内容之前,你必须使你的应用国际化,以便本地化的过程。国际化应用需要将任何用户界面内容分解为本地化资源文件,并提供用于存储的特定语言项目(.lproj)目录。它也意味着当使用特定语言和特定本地化内容的时候要使用合适的技术。

对于完全国际化应用,本地化过程创建新的一组特定语言资源文件,用来添加到你的项目中。一个典型的iOS应用需要有以下类型的资源文件的本地化版本:

  • Storyboard文件(或nib文件)——Storyboard能包含text label和其他需要本地化的内容。你或许还需要调整界面位置以适应文本长度的改变。(类似的,nib文件可以包含需要本地化的文本或者需要更新的布局)。
  • 字符串文件——字符串文件(由于它们的.strings扩展名而得名)包含应用显示的静态文本的本地化版本。
  • 图片文件——你应该避免本地化图片除非图片包含特定文化内容。你应该尽可能的避免在image文件中直接存储文本。对于你在应用中加载和使用的图片,将文本存储在字符串文件中,并在运行时将该文本于基于图片的内容合并。
  • 视频和音频文件——你应该避免本地化多媒体文件除非它们包含特定语言或者特定文化的内容。例如,你会想本地化包含跟踪音轨的视频文件。

关于国际化和本地化过程的信息,参见Internationalization and Localization Guide。关于在应用中使用资源文件的正确方式的信息,参见Resource Programming Guide。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 201,784评论 5 474
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 84,745评论 2 378
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 148,702评论 0 335
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,229评论 1 272
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,245评论 5 363
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,376评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,798评论 3 393
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,471评论 0 256
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,655评论 1 295
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,485评论 2 318
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,535评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,235评论 3 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,793评论 3 304
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,863评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,096评论 1 258
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,654评论 2 348
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,233评论 2 341

推荐阅读更多精彩内容