针对“共享 iPad”优化 App
借助“共享 iPad”功能,你可以在一台由多名用户共享的 iPad 上提供个性化的体验。遵循以下最佳做法,确保以基于云的方式有效管理用户相关数据。
由于切换用户或重新配置设备时本地数据可能会被清理,因此确保持久存储十分重要,具体取决于 App 架构以及用户相关数据的类型和数据量。
测试对“共享 iPad”的支持
如果你的 App 基于云或者不在本地储存数据,那么你的 App 可能已经支持“共享 iPad”。*你可以利用两台使用同一 Apple 账户登录的单用户 iPad 设备,来测试你的 App 是否支持“共享 iPad”,具体操作方法如下:
- 在 iPad 上使用你的 Apple 账户登录后,运行你的 App。
- 以用户身份进行交互,例如创建、更改或添加内容。
- 在这台 iPad 上退出登录你的 Apple 账户。
- 使用同一 Apple 账户登录另一台 iPad。
- 下载并运行你的 App。
如果你的 App 会显示你上次离开时的进度,则表示这个 App 支持“共享 iPad”。这还涉及一种很少发生的情况,即“共享 iPad”必须清除给定用户或 App 的数据。
指示可清除的本地存储
支持可清除的本地存储意味着,你没有持久的结果内容 (例如,计算器 App),或者你的 App 能够确保任何需要持久存在的内容均已存储在云端。在实施“数据管理”和“同步”最佳做法后,你可通过在项目的 info.plist 中将 NSSupportsPurgeableLocalStorage (英文) 键值设为“yes”,来表示支持“共享 iPad”。这样做表示你的 App 支持在用户退出登录时清除其本地数据。这将向使用 Apple 校园教务管理的用户表明,你的 App 支持“共享 iPad”。
数据管理最佳做法
将所有用户数据储存在云端。对于需要在 App 的使用间隙期间持续存在的数据,“共享 iPad”需要基于云的同步模型。你可以使用 NSURLSession 将数据发送到你自己的后台,也可以使用 iCloud 和 NSUbiquitousKeyValueStore,并将凭证储存在钥匙串中。
按需获取远程数据。用户未必需要无时无刻地使用所有与给定 App 关联的数据,因此请制定一个下载策略,确保仅在需要时或需要之前下载所需数据。考虑仅获取当前环境下所需的数据,而不是一次性调取在 App 中可能需要的所有已知用户内容。
在更改时同步数据。在获取数据时同步用户输入或创建的数据。确保至少在 applicationWillResignActive 期间进行同步,但应谨记,等待时间过长或者要同步的批次过大均会带来较差的用户体验,并且可能在极少数情况下会导致数据丢失。
将首次启动或进度旗标储存在云端。如果你的 App 根据当前储存在本地文件系统或 NSUserDefaults 中的旗标来确定首次启动体验所需的内容,则应先将上述针对每个用户的旗标移动到 NSUbiquitousKeyValueStore 并在其中进行检查,然后再呈现你的首次启动体验。
有关 NSUbiquitousKeyValueStore 的更多信息,请查看“NSUbiquitousKeyValueStore 类参考 (英文)”和 PrefsInCloud (英文) 示例项目。
限制后台任务断言要求。尽可能限制后台任务断言中处理的工作量,确保数据保持一致且同步即可,通常是通过调用 NSURLSession 或 iCloud API 来上传用户的数据。这些 API 为继续执行网络操作提供支持,且不会阻碍用户之间的切换。
在项目 PList 中指明支持可清除的本地存储。通过在项目的 Info.plist 中将 NSSupportsPurgeableLocalStorage (英文) 键值设为“yes”,来表明支持“共享 iPad”。这样做表示你的 App 支持在用户退出登录时清除其本地数据。
同步技术
使用 NSURLSession 进行同步。当 App 使用 NSURLSession 并具有相应的后台配置来推送用户特定的设置或数据时,可以确保在用户切换 App 后 (尤其是在当前用户在共享 iPad 上退出登录后),上传将会继续运行。
有关 NSURLSession 的更多信息,请观看 WWDC 视频“使用 NSURLSession 联网 (简体中文字幕)”并查看“NSURLSession 类参考 (英文)”。
通过钥匙串同步凭证。“共享 iPad”上的钥匙串提可以供自动同步功能,让使用同一 Apple 账户登录的设备之前保持同步。通过钥匙串服务 API,将凭证和其他轻量级信息储存在钥匙串中,确保无论用户在何处登录,这些信息都安全无虞并可供访问。
有关钥匙串实施的更多信息,请查看“钥匙串服务编程指南 (英文)”。
通过 iCloud 同步数据。实施 iCloud 文稿和“键值存储 API 支持,意味着你的用户内容将处于同步状态,而无需显式地实现这个同步过程。尽管 CloudKit 更加事务化并受在你的显式控制,但是 CloudKit 操作旨在确保即使退出 App 或用户退出登录,传输的数据仍能到达 iCloud 存储中。
请查看“iCloud 设计指南 (英文)”,了解哪个存储 API 最适合你的 App。