交互学堂
专注分享专业知识

iOS 9人机界面指南(三):iOS 技术 (下)

iOS 9人机界面指南(三):iOS 技术 (下)

文章索引

  • 3.12 HealthKit
  • 3.13 应用内购买服务(In-App Purchase)
  • 3.14 游戏中心(Game Center)
  • 3.15 iAd富媒体广告(iAd Rich Media Ads)
  • 3.16 无线打印 (AirPrint)
  • 3.17 访问用户数据(Accessing User Data)
  • 3.18 快速查看(Quick Look)
  • 3.19 声音(Sound)
  • 3.19.1 理解用户期望(Understand User Expectations)
  • 3.19.2 定义应用的音频行为(Define the Audio Behavior of Your App)
  • 3.19.3 管理音频中断(Manage Audio Interruptions)
  • 3.19.4 适时处理媒体远程控制事件(Handle Media Remote Control Events, if Appropriate)
  • 3.20 VoiceOver
  • 3.21 路线选择(Routing)
  • 3.22 编辑菜单(Edit Menu)
  • 3.23 撤销与重做(Undo and Redo)
  • 3.24 键盘和输入页面(Keyboards and Input Views)

译者注:本 文译自苹果官方人机界面指南 iOS Human Interface Guidelines (2015年10 月21日),由腾讯ISUX设计师翻译整理,非发文者一人之作。译文首发于ISUX博客,如在阅读过程中发现错误与疏漏之处,欢迎不吝指出。后续章节会 陆续更新,敬请期待。

3.12 HealthKit

在iOS 8及之后的版本中,使用HealthKit构建的应用可以利用从健康应用中获取的数据为用户提供更强大、更完整的健康及健身服务。在用户允许的情况下,应用可以通过HealthKit来读写健康应用(用户健康相关数据的存储中心)中的数据。

举例来说,用户可以允许营养应用从健康应用中获取体重及活动数据,用于告诉他们为了达到既定目标一天应该消耗多少卡路里。这个营养应用还可以通过 HealthKit更新健康应用上实际消耗的卡路里数据,让用户能更容易地跟踪他们的健康计划的进展。想要了解如何将HealthKit整合进你的应用 中,请参阅HealthKit Framework Reference.

下面的指南能够帮助你设计出让人信任且喜爱的健康类应用:

当且仅当你有令人信服的理由时才去访问健康应用中的数据。HealthKit是为了专注于健康及健身服务的应用而设计的。如果一个应用请求获取与其不相关的健康信息,用户不太可能会放心地将个人数据提供给这个应用。因此,你需要确保用户能够理解你的应用需要获取他们某些具体的个人健康数据的原因,并告诉他们共享这些数据的好处。

避免在用户还不知道用途前就向他们请求访问私人健康数据。当用户能够看到当前的任务和你需要访问的数据的关联性 时,会更乐意给予你访问权限。举例来说,当用户在给一个减肥应用填写资料时,让他允许你访问健康应用中储存的体重数据是合理的。但如果那个减肥应用在启动 时就立即提出访问体重数据的请求,用户更可能会选择拒绝分享该个人数据。

使用系统提供的用户界面来请求访问用户的数据。当用户想要向应用授予访问他们的数据的权限时,一般会期望看到如下图所示的系统权限许可列表。为了确保给用户提供良好的用户体验,应避免在应用的其他页面中重复使用权限许可列表上的信息。而是应该在权限列表中添加些自定义信息来说明为什么你的应用需要访问特定的数据(参阅HKHealthStore Class Feference可获取更多信息)的原因。确保这些信息简洁且能清晰地说明你的应用是如何利用健康应用中的数据,以及收集这些数据的好处。

iOS 9人机界面指南(三):iOS 技术 (下)

注意:当用户决定停止与你的应用共享数据时,让他们可以在系统设置中即可完成变更,而不需要通过你的应用界面。

不要在你的应用界面中使用健康应用的图标、图片或者截图。和苹果所有的系统设计一样,这些图像都是受到版权保护的,不应该在你的应用中出现。

不要在你的应用中使用“HealthKit”这个专用术语。HealthKit是代表能够获取健康应用中储存的数据的技术框架的专用技术术语。如果你需要向用户解释你的应用和健康应用中的数据的联系,请使用“健康应用”这个用语。例如,你可以说你的应用“将保存信息至健康应用中”或“所使用的数据是从健康应用中获取的”。

3.13 应用内购买服务(In-App Purchase)

应用内购买服务使得用户可以在你的应用中、你所设计的商店中购买到数字产品。

iOS 9人机界面指南(三):iOS 技术 (下)

例如,用户可以做这些事:

  • 将一个应用从基础版本升级到高级版本。
  • 每月订阅新内容。
  • 购买虚拟商品,比如游戏中的等级或道具。
  • 购买并下载新的书籍。

你可以使用StoreKit框架以嵌入的方式将商店添加到你的应用中,并且用来支持应用内购买服务。当用户进行购买时,StoreKit会连接到应用商店进行安全支付,然后再告知你的应用以便它可以提供用户已购买的商品。

重要:应用内购买服务只提供支付功能,其他功能由你自己提供,例如向用户展示商品,解锁内置功能,从你自己的服务器上下载内容等等。当然,你所提供的所有商品都必须在应用商店注册过。

想要了解关于在应用中添加商店的技术要求,请查看In-App Purchase Programming Guide.想要了解更多关于应用内购买的商业需求信息,请查看App Store Resource Center.当然,你还应该查看相关许可协议来确定你的应用可以出售哪些商品以及如何提供商品。

遵循以下几点规范,可以帮助你设计出用户喜欢的购买体验。

将商店的使用体验优雅地集成到你的应用中。在展示商品和处理交易时,给用户提供一种熟悉、一致的体验。你一定不希望用户在访问你的商店时感觉像是进入别的应用。

使用简单明了的标题和说明。最好能让用户在扫过一组项目时,可以快速发现感兴趣的内容。文案上不要截断隐晦,简单直白的语言和标题更容易让用户理解你所要展示的商品。

不要更改默认的确认对话框。当用户购买一个商品时,StoreKit会提供一个确认对话框(如上图所示)。这个确认对话框可以帮助用户避免买错东西,所以不要修改它。

3.14 游戏中心(Game Center)

游戏中心给用户提供玩游戏、组织多人在线游戏以及其他更多功能。玩家可以使用内置的游戏中心应用来注册账户、发现新游戏、添加好友、浏览玩家排名和战绩。

iOS 9人机界面指南(三):iOS 技术 (下)

作为一名游戏开发人员,你可以使用GameKit应用接口来发布分数和战绩到游戏中心的服务器上,在你的游戏页面中显示玩家排名,帮助用户找到其他玩家。想要了解如何将游戏中心集成到你的应用中,请查看Game Center Programming Guide.

遵循以下几点规范,有助于你的应用给用户提供好的游戏中心体验。

不要使用自定义的用户界面来提示用户登录到游戏中心。如果用户在未登录到游戏中心的情况下打开了一个需要启用游戏中心的应用,系统会自动提醒他们去登录。所以没必要自定义一个登录界面,而且有可能还会让用户感到困惑。

一般情况下,使用标准的游戏中心界面。在少数情况下,可能自定义游戏中心的界面是合理的,但是这样做会有让用户感到困惑的风险。标准的游戏中心界面对于iOS和OS X的用户是熟悉的,而且它会给用户一种置身于一个庞大游戏社区的感觉。

允许用户关闭语音聊天。有些用户可能不想在进入游戏时就自动开启语音聊天,而且大多数用户希望在特定情境下可以关闭语音聊天。

3.15 iAd富媒体广告(iAd Rich Media Ads)

如果你允许你的应用中出现广告,那么你可以通过用户浏览或者点击这些广告获得收益。(如图所示,这个底部预留位置就是用来放置iAd横幅广告。)

iOS 9人机界面指南(三):iOS 技术 (下)

通过iAd网络你可以在你的用户界面中以特定的视图投放一则广告。最初,这种视图可以用来承载目标横幅广告,起到引导用户进入查看全面广告详情的作 用。当用户点击该横幅广告时,广告就会执行预先设定的动作,例如播放一段影片、展示可交互的内容,或者启动Safari打开目标网页。该动作所展示的内容 可以遮挡住你当前的用户界面,或者使你的应用转换到后台运行。

有三种类型的横幅广告供你在应用中使用:标准(standard)、中等矩形(medium rectangle) 和全屏(full screen)。所有类型的横幅虽然在外观和行为上存在差异,但都提供同样的功能,就是引导用户进入广告。

标准横幅(standard banner)占用屏幕较少的空间,通常从始至终都可见。你可以选择在应用的哪些页面展示标准横幅,并在给这些页面设计布局时预留出空间。

iOS 9人机界面指南(三):iOS 技术 (下)所有的iOS应用都可以展示标准横幅。你可以使用ADBannerView类中的广告视图来显示标准横幅广告。

中等矩形横幅 (medium rectangle banner) 的行为同标准横幅类似,同样也可以选择展示中等矩形横幅的位置。

iOS 9人机界面指南(三):iOS 技术 (下)

中等矩形横幅只能在iPad的应用中使用。你可以使用ADBannerView类中的广告视图来显示中等矩形横幅广告。

全屏横幅 (full screen banner) 会占用屏幕的大部分甚至是全屏空间,并且通常只在应用程序流的特定时间或特定位置显示。你可以选择使用模态视图来显示横幅广告,或者用独立页来展示可滚动的广告内容。(在下面的示例中,应用提供了一种杂志阅读的体验,通过翻页离开或回到全屏广告页面。)

iOS 9人机界面指南(三):iOS 技术 (下)

你可以使用ADInterstitialAd类中的广告视图在你的应用中显示全屏横幅广告。

iAd框架包含了所有类型的横幅广告,并且会在右下角显示iAd的标识。iAd框架的设计固定在屏幕底部时看起来效果最佳。

为了保证广告无缝植入,并且要提供最好的用户体验,可以遵循以下几点规范。

将标准横幅广告视图尽量放置在屏幕底部或底部附近。这个位置的差别取决于屏幕底部是否包含栏(bar)以及是什么样的栏。

iOS 9人机界面指南(三):iOS 技术 (下)

当用户体验存在中断时请使用模态视图来展示全屏横幅广告。如果你的应用中有自然中断或情景转换,用模态样式来展示会更合适。当你使用模态样式来展示全屏横幅时(通过用presentFromViewController实现),用户要么进入广告,要么关闭它。出于这个原因,当用户有做出转变的预期时 (比如完成了一个任务后) 用模态视图的形式来展示比较好。将中等矩形横幅广告视图放置在不会干扰内容的地方。和标准横幅一样,中等矩形横幅也最好放置在屏幕底部或底部附近。放在底部附近也能减少干扰用户的可能性。

应用的界面视图进行转场切换时不要使用模态样式展示全屏横幅。如果用户在使用你的应用时会频繁的进行屏幕切换操作,例如杂志翻页或翻阅一些画册图片合集,此时使用非模态的形式会更合适。当你使用非模态来显示全屏横幅时(通过使用presentInView实现),可以在用户界面中保留栏 (bar) 使得用户可以通过应用中的控件进入或退出广告。同其他横幅广告一样,点击全屏横幅广告也会触发iAd体验,但是如果条件允许的话,你的应用也可以对横幅广告区域支持其他手势操作 (比如拖动或滑动)。

确保使用合适的动画效果来显示和隐藏非模态的全屏横幅视图。例如,杂志阅读应用可以用和杂志翻页一样的动画效果。

确保横幅广告在应用中出现的时间和位置是合理的。用户只有在不觉得广告会打扰他们正常的工作流程时才有可能去体验iAd.这点对于游戏这样的沉浸式应用尤其重要:你肯定不想将横幅放置在影响用户玩游戏的位置。

避免将横幅放置在用户只会一扫而过的页面。最好不要将横幅广告放置在用户会快速略过的页面,比如用户正要深入挖掘或前往他们所关注的内容。通常用户在一个页面停留至少1、2秒后才有可能会点击广告。

尽可能的支持双向展示横幅广告。最好让用户在使用应用时不必旋转设备就能浏览广告。当然,支持双向也能给你的广告提供更大的展示区域。想要了解如何确保转换方向时横幅广告能正常响应,请查看iAd Programming Guide.

不要让标准或中等矩形横幅广告滚出屏幕。如果你的应用需要滚动来展示更多内容,确保横幅广告一直固定在它的位置上。

当用户浏览或与广告进行交互时,暂停那些吸引用户注意力或需要操作的活动。当用户选择浏览广告时,他们不想因此错过应用中正发生的事件,也同样不想让应用打断广告体验。一个好的经验方法是像应用程序转入后台运行那样暂停当前活动。

除非有特殊情况,否则不要中断广告。一般情况下,当用户浏览并与广告进行交互时,应用还是会继续运行并接收事 件,所以也有可能突然出现一个事件需要获得用户的注意力。然而,需要打断广告的场景其实非常少。有一种情景是有的应用会提供互联网语音协议服务 (VoIP).在这种应用中,有电话接入时可能会取消正在运行的广告。

注意:取消广告可能会对应用能接受的广告类型以及能获取的收益有不好的影响。

3.16 无线打印 (AirPrint)

用户可以通过AirPrint无线打印应用中的内容,还可以使用打印中心应用检查打印任务。

iOS 9人机界面指南(三):iOS 技术 (下)

你可以利用内置的支持程序来打印图片和PDF文件,或者可以使用特定的打印程序接口来完成自定义的格式设置和渲染设置。iOS可以处理打印机的发现、任务排序以及在指定打印机上执行打印任务。

通常来讲,用户想要打印文件的时候,只需要点击应用中的标准动作按钮(Action button)。当他们在界面视图中选择了要打印的项目后,可以接着选择打印机,设置打印属性,最后点击打印按钮开始打印。

打印中心应用是一个只有在处理打印任务时才可见的后台系统应用,用户可以用它来查看打印任务。用户可以在打印中心浏览当前打印队列,查看某个打印任务的详情,还可以取消某个任务。

只需添加少量代码就可以支持基本打印功能 (想要了解在代码中添加打印功能,请查看Drawing and Printing Guide for iOS).想要确保好的打印体验,可以遵循以下几点规范:

使用系统提供的动作按钮。用户对系统提供的按钮的含义和行为都很熟悉,所以尽可能的使用系统动作按钮。如果你的应用没有工具栏或导航栏,那就要另当别论了。在这种情况下,你就需要自己设计一个可以出现在应用主界面的打印按钮,因为动作按钮只能在工具栏和导航栏中使用。

在当前情境下打印操作是基本功能时才显示打印项(Print item).如果当前情境并不适合打印,或者用户并不想打印,就不要在由动作按钮显示的视图中将打印项显示出来。

合适的话,给用户提供更多打印选项。例如,让用户设置打印页码范围或打印份数。

如果用户不能打印,则不要显示特定的打印用户界面。在向用户展示有打印项的界面前,确保用户的设备是支持打印的。想要了解如何在代码中实现,请查看UIPrintInteractionController Class Reference.

3.17 访问用户数据(Accessing User Data)

位置服务允许应用获取用户当前大致的地理位置,设备指向的方向以及用户移动的方向。其他系统服务,例如通讯录、日历、备忘录和相册等,同样也允许应用访问用户存储在里面的数据。

iOS 9人机界面指南(三):iOS 技术 (下)

虽然获取了用户数据的应用能带来一定的方便,但还是需要为用户提供维持信息私密性的功能。例如,用户喜欢应用自动给内容加上位置标签,或者可以找到附近的好友,但用户也需要能在不想分享位置的时候关闭这些功能。(想要学习如何给应用增加获取位置功能,请参阅Location and Maps Programming Guide.)

以下几点可以帮助您以用户不反感的方式获取用户数据。

确保使用户理解分享私人数据的原因。如果没有明显的需要,用户自然会对私人信息的请求感到怀疑。为了避免用户反感,确保在用户使用明显需要个人信息的功能时再进行提醒。例如,即使没有打开位置服务用户也可以使用地图,但是在用户使用定位或导航功能时就会有提醒。

应用需要个人信息的原因不明显时向用户做出解释。你可以在提醒框中给出文字性的描述,例如“这个应用需要访问你的通讯录”或者“是否允许应用获取你的地理位置?”。这些文案最好明确且有礼貌以让用户无压力的理解为什么需要访问他们的信息。

讲述原因的文案应该遵循以下原则:

  • 不要包含你的应用名称,因为系统提供的提醒框已经包含了。
  • 清楚地描述你的应用为什么需要这些数据。如果可以的话,你也可以解释不会用这些数据做什么。
  • 使用以用户为中心的术语并且进行本地化。
  • 在易于理解的情况下越短越好。尽可能避免超过一句话。
  • 使用句式大小写(sentence-style capitalization).(句式大小写指的是第一个单词大写,除了专有名词和专有形容词以外的词都小写。)

只有当你的应用没有用户数据就无法提供基础服务时,才在一开始就征求用户的许可。如果你的应用在知道了用户私人信息后才能提供主要功能是显而易见的话,用户不会因此觉得烦扰。

避免在用户选择需要数据的功能之前调用触发提醒框的程序。这样,就可以避免用户疑惑为什么在使用不需要私人数据的功能时有请求提醒。(注意,检查用户位置服务的设置并不会触发提醒。)

检查位置服务的设置来避免触发没必要的提醒。你可以使用核心位置的程序接口来实现(想要学习如何做,请参阅Core Location Framework Reference).使用这些知识,可以尽可能地在使用需要位置信息的功能时才进行提醒,或者完全避免提醒。

3.18 快速查看(Quick Look)

通过使用Quick Look,用户可以在你的应用内预览文件,即使你的应用是打不开这个文件的。举例来说,你可以允许用户预览一些从网站上下载或从其他来源获得的文件。

iOS 9人机界面指南(三):iOS 技术 (下)

想要学习如何在应用中加入Quick Look文件预览功能,请参阅Document Interaction Programming Topics for iOS.

在你的应用内预览文件之前,用户可在你定制的视图中查看该文件的信息。例如,用户从一封邮件中下载了附件之后,邮件应用(Mail)会在邮件中使用定制的视图展示文件的图标、标题和大小。用户可以通过点击它来预览文件。

iOS 9人机界面指南(三):iOS 技术 (下)

你可以在应用中用一个新的视图来展示文件预览,或者使用全屏模态视图。展示的形式取决于你的应用运行在什么设备上。

在iPad上使用模态视图来显示文件预览。iPad的大屏幕适合在一个方便用户离开的沉浸式环境中展示文件预览。缩放操作(zoom transition)很适合展示预览。

在iPhone上使用专用的视图,最好是导航视图来显示文件预览。这样可以使用户在应用情境中通过导航进入文件预览,不至于迷失。虽然也可以在iPhone应用中使用模态显示,但不推荐这样做。(注意缩放操作在iPhone上并不适用。)

另外要注意的是,在导航视图中显示文件预览意味着允许Quick Look在导航栏上放置特定的预览控件。(如果你的视图中包含工具栏,Quick Look会将预览控件放在工具栏上。)

3.19 声音(Sound)

无论声音在你的应用中是主要体验的一环,还是锦上添花的元素,你都需要知道用户对声音表现的期望以及与如何满足这些期望。

3.19.1 理解用户期望(Understand User Expectations)

人们可以使用设备控件来调整声音,他们还可能使用有线或无线的耳机和听筒。人们也会对于他们的行为如何作用于他们听到的声音有各种各样的期望。虽然你可能会发现有一些期望很让人意外,但它们都会遵循用户控制的原则,即应是用户而非设备掌控听到声音的时机。

用户会依据需要将设备静音:

  • 避免被突兀的音效打断,比如手机铃声和信息接收音等
  • 避免听到用户操作所产生的副产品的声音,比如键盘或其他反馈音、偶然的声音或应用启动的声音
  • 避免听到那些在玩游戏时非必要出现的声音,如音效和配乐

例如,在剧院中,用户将他们的设备调至静音以避免打扰剧院中的其他人。在这一情境下,用户仍然希望能在他们的设备上使用应用,但他们不希望被无预期或突兀的声音所打断,如手机铃声或新消息音。

当用户操作的明确目的就是听到声音时,铃音/静音开关(或静音开关)不会屏蔽这些操作所产生的声音。例如:

  • 在仅有媒体播放功能的应用中的进行媒体播放是不会被静音的,因为播放媒体是用户明确期望的。
  • 闹钟不能被静音,因为闹钟是用户明确设定使用的。
  • 语言学习应用中的音效素材不能被静音,因为用户进行了明确的操作希望听到它。
  • 音频对话应用中的对话不被静音,因为用户打开这个应用的唯一目的就是进行音频对话。

用户使用设备音量调节按键可调节他们的设备所能发出的所有声音的音量,包括歌曲、应用音效和设备声音。不管铃声/静音(或静音)的开关在什么位置,用户都能使用音量调节按键屏蔽所有声音,使用音量调节按键调节应用当前所播放的音频时同样调整了全局系统的音量,铃声音量除外。

对于iPhone:当没有音频播放时使用音量键可以调整铃声音量。

用户使用耳机的目的在于能够私密地收听声音以及解放他们的双手。不管这些配件是有线的还是无线的,用户对这个体验都有特定的期待。

当用户插入耳机或连接无线音频设备时,他们期望能以私密的状态继续收听当前播放的音频。因此,他们希望应用能够不中断地继续播放当前正在播放的音频。

当用户拔出耳机或断开与无线设备的连接时(抑或设备超出范围或关闭时),他们不希望他们刚刚收听的内容被自动地与他人分享。因此,他们希望正在播放音频的应用暂停播放,让他们能够在自己想要继续播放的时候再开启。

3.19.2 定义应用的音频行为(Define the Audio Behavior of Your App)

如果必要的话,你可以通过调整相关的、独立的音量水平以在你的应用中制造最好的混音输出效果。但最终音效输出的音量也应该能由系统音量控制,可以通过音量键或音量滑块进行调节。这意味着应用的音频输出的控制权仍然归属在用户手中。

确保你的应用能适时地显示音频路径选择。(音频路径(audio route)是指音频信号的电子通路,例如从设备到耳机或是从设备到扬声器。)即使人们没有物理性的插入或拔出音频设备,他们也仍希望能选择其他不同的音频路径。为了实现这一诉求,iOS能自动显示可让用户选择输出音频路径的控件(使用MPVolumeView类能允许这个控件显示在你的应用中)。由于选择不同的音频路径是用户主动的行为,用户期望当前播放的音频能继续不中断。

如果你需要显示音量滑块,在使用MPVolumeView类时,确保使用的是系统提供的可用的音量滑块。注意,当正在使用的音频输出设备不支持音量控制时,音量滑块会被合适的设备名称所替代。

如果你的应用只产生一些与其功能无必要关系的界面音效时,(尽量)使用系统音效服务(System Sound Services)。系 统音效服务是一种能产生警示音、界面音效和发出振动的iOS技术;它不适合任何其他用途。当你使用系统音效服务(System Sound Services)来产生音效时,你不能干涉你的音频与设备的音频的交互方式,也不能干涉它处理干扰和设备配置变化的方式。想了解如何使用这一技术,请参 阅Audio UI Sounds (SysSound)中的范例项目。

如果音效在你的应用中扮演重要的角色,使用音频会话服务(Audio Session Services)或是AVAudioSession类。这些程序接口不产生音效;相