我正在设计一个 Watch 应用程序,它使用 PIN 码来创建令牌会话。目标是检测手表何时被锁定/从用户手臂上取下,以便知道何时使令牌失效,并在用户想要使用该应用程序时提示再次输入 PIN 码。如果手表在拥有有效令牌时保持开启状态,则不会要求他们输入 PIN 码。 我想知道是否有一种方法可以检测用户是否锁定/摘下手表来执行此操作?任何帮助/建议都会很棒!
不幸的是,Apple 的手腕检测 API 不向公众开放,这意味着您的应用程序无法通知手表是否在手腕上。出于安全和隐私原因,这是最合理的,因为无论手表是否戴在手腕上,公共信息都可能会产生恶意应用程序。
尽管如此,根据您的应用程序的工作方式,我建议您研究跟踪手臂运动并使用该数据来锁定应用程序,因为加速度计和陀螺仪值可供使用。
我会参考以下内容 检测iPhone/Apple Watch的物理运动用于检测手部运动
Apple 在 watchOS 9 中为我们提供了 API。 https://developer.apple.com/documentation/localauthentication/lapolicy/deviceownerauthenticationwithwristdetection
var error: NSError?
let context = LAContext()
guard #available(watchOS 9.0, *), context.canEvaluatePolicy(.deviceOwnerWithWristDetection, error: &error) else {
// Can't evaluate the policy, either it's unsupported or a passcode isn't set.
// See `error` for details and fall back to legacy authentication.
}
do {
try await context.evaluatePolicy(.deviceOwnerWithWristDetection, localizedReason: "Approve a sensitive operation")
// The user's watch is on their wrist and they entered the correct passcode.
} catch {
// Watch isn't on the wrist or the user hasn't entered the correct passcode.
// See `error` for details and fall back to legacy authentication.
}