Create accessible Single App Mode experiences
System & Services 进阶 20m

创建无障碍的单 App 模式体验

Create accessible Single App Mode experiences

2022年6月6日

在 Apple 官方观看视频

一句话判断

如果你的 App 会用于自助点餐、医疗登记、考试等单设备锁定场景,这场 Session 详细讲解了 Guided Access 和三种 Single App Mode 的适用场景与无障碍适配方案。

这场 Session 讲了什么

Apple 无障碍团队的 Drew Haas 系统介绍了 iOS/iPadOS 上限制设备到单个 App 的所有模式,以及如何确保这些模式下无障碍功能仍然可用。

内容分三部分:Guided Access(用户主动发起的辅助功能锁定,适合认知障碍用户和儿童使用场景);三种程序化 Single App Mode(Single App Mode、Autonomous Single App Mode、Persistent System Banner Mode,适合自助终端、考试、医疗场景);以及 Single App Mode 下的无障碍 API 使用方式。

值得深挖的点

你的 App 可能已经在 Guided Access 下运行了。 即便你没有写任何相关代码,用户可以在系统设置里开启 Guided Access,然后三击侧键将任何 App 锁定。你应该测试你的 App 在 Guided Access 下的表现。

认知无障碍的设计原则。 宽容错误(操作前警告而非操作后不可逆)、减少对时机的依赖(不用定时器自动执行操作)、付款前始终确认(包括一键购买场景)。这些原则不只适用于 Guided Access,应该贯彻在所有 UI 设计中。

三种 Single App Mode 的精确选择。 最基础的 Single App Mode 适合永久固定设备(如餐厅自助点餐屏,需要 Supervised);Autonomous Single App Mode 允许 App 自主控制锁定/解锁时机(如考试 App,不需要 Supervised);Persistent System Banner Mode 最温和,只在顶部显示持续横幅(如医疗信息展示)。

代码片段

// Guided Access 自定义限制
class AppDelegate: UIResponder, UIApplicationDelegate,
                    UIGuidedAccessRestrictionDelegate {

    // 声明限制标识符
    func guidedAccessRestrictionIdentifiers() -> [String] {
        return ["lockAccountSettings"]
    }

    // 限制的用户可见标题和描述
    func guidedAccessRestriction(withIdentifier restrictionIdentifier: String) ->
        (String, String?) {
        switch restrictionIdentifier {
        case "lockAccountSettings":
            return ("锁定账户设置", "防止用户修改账户信息")
        default:
            return ("", nil)
        }
    }

    // 限制状态变更回调
    func guidedAccessRestriction(withIdentifier restrictionIdentifier: String,
                                  didChange newState: UIGuidedAccessRestrictionState) {
        if restrictionIdentifier == "lockAccountSettings" {
            accountSettingsButton.isUserInteractionEnabled = (newState == .allow)
        }
    }
}
// 随时检查限制状态
let state = UIAccessibility.guidedAccessRestrictionState(
    forIdentifier: "lockAccountSettings"
)
if state == .deny {
    // 限制已启用,禁用相关功能
}

最佳实践

  • 为 Guided Access 设计自定义限制。 锁定容易让用户迷路的功能入口(如账户设置、支付信息),让核心功能保持可用。
  • 认知无障碍原则要贯穿始终。 宽容错误、减少定时依赖、付款前确认——这些对所有用户都有益。
  • Single App Mode 下确保无障碍功能可用。 VoiceOver、切换控制等辅助功能不能因为锁定模式而失效。
  • 选择合适的 Single App Mode 级别。 不要过度限制——考试场景用 Autonomous,信息展示场景用 Persistent Banner 就够了。

还有什么值得关注

  • Guided Access 位于系统设置 > 辅助功能,开发者连接 Xcode 后可启用开发者诊断工具
  • Autonomous Single App Mode 不需要设备被监管(Supervised),适合 BYOD 考试场景
  • Persistent System Banner Mode 是三种中最轻量的限制,用户仍然可以有限地访问其他 App
  • 自助终端场景推荐配合 MDM 方案批量部署
WWDC 2022