如何通过编程在 iPhone 上启用“指导访问”(Kiosk mode)?

21

问题

如何自动化 iPhone 上的 引导访问 模式?我需要自动化启用和删除此功能。

背景 爱荷华州政府的这个应用 使用 iOS 应用程序显示您的驾照。 问题在于,将手机交给当局后,他们可以完全访问该设备。

如果我有这个或类似应用程序的源代码,如何在退出临时“展览模式”时要求密码,以便照片、电子邮件或短信既不可用于手机,也不可通过 USB 访问(理想情况下)。

我找到了类似的Android 解决方案,但现在正在寻找 iOS 解决方案


@AaronBrager 已修复 - 谢谢! - makerofthings7
5个回答

54
您可以在应用程序内部进入和退出“指导访问”模式。但是,要这样做,设备必须受到管理,并安装了一个MDM配置文件,该配置文件中的应用程序捆绑标识符在可以请求“指导访问”模式的应用程序列表中(关键字为autonomousSingleAppModePermittedAppIDs)。
完成后,要进入指导访问模式,请执行以下操作:
UIAccessibility.requestGuidedAccessSession(true){
    success in
    print("Request guided access success \(success)")
}

4
谢谢纠正。我以为我了解所有的无障碍API! :) - Aaron Brager
直到最近的一个项目中,我的同事告诉我这个东西,我才第一次听说它。由于所有受监管的设备和MDM等技术,它有点晦涩难懂... - jrturton
@jrturon:监管限制防止公司在BYOD上滥用此功能。苹果不希望任何人都能在他们不拥有和管理的设备上这样做。 - Nobosi
@Nobosi 当然可以 - 我只是想说,由于所有这些限制(我们绝对需要!),它并不是一种受欢迎的技术。 - jrturton
可以通过编程的方式输入密码吗? - NuWin
1
@NuWin 不需要密码,但是使用受监督的设备,您可以离开引导访问模式。 - jrturton

9

在iOS 7以下版本中,您无法通过编程方式将iOS设备置于Kiosk模式,也不能通过应用程序使其成为Kiosk应用程序(无法通过编程方式禁用主页按钮事件并在应用程序中获取事件)。

要使设备在Kiosk模式下工作,可以使用苹果的Guided Access。但是您无法通过编程方式启用它。有关更多信息,请访问这里


iOS 7及以上版本:

您可以使用:

void UIAccessibilityRequestGuidedAccessSession(BOOL enable, void(^completionHandler)(BOOL didSucceed))

参考UIAccessibilityRequestGuidedAccessSession

UIAccessibilityRequestGuidedAccessSession

异步地将应用程序转换到或从单个应用程序模式。

声明

Swift

func UIAccessibilityRequestGuidedAccessSession(_ enable: Bool, _ completionHandler: ((Bool) -> Void)!)

Objective-C

void UIAccessibilityRequestGuidedAccessSession ( BOOL enable, void (^completionHandler)(BOOL didSucceed) ); 参数enable

指定为YES以将设备置于此应用程序的单个应用程序模式中,或指定为NO以退出单个应用程序模式。

completionHandler

该块通知您的应用程序操作的成功或失败。该块采用以下参数:didSucceed

如果为YES,则应用程序成功地转换到或从单个应用程序模式。 如果为NO,则应用程序或设备不符合单个应用程序模式的要求,或存在其他错误。 讨论

您可以使用此方法锁定您的应用程序进入单个应用程序模式,并稍后释放它。 例如,一个考试应用程序可能在测试开始时进入此模式,并在用户完成测试后退出此模式。 仅支持对使用移动设备管理(MDM)进行监督的设备进入单个应用程序模式,并且必须通过MDM启用此模式的应用程序本身。 您必须平衡每次进入单个应用程序模式的调用,并使用调用退出该模式。

因为进入或退出单个应用程序模式可能需要一些时间,所以此方法异步执行,并使用completionHandler块通知您结果。 导入语句

import UIKit 可用性

iOS 7.0及更高版本可用。

您还可以使用UIAccessibilityIsGuidedAccessEnabled来检查是否启用了引导访问。


你可以通过编程来实现这个。请看我的回答。 - jrturton
@jrturton: :) 感激不尽。 - Midhun MP

5
根据文档,启用iOS应用程序以运行kiosk模式有两种方法。 配置文件:通过移动设备管理(MDM)的帮助,我们可以创建企业配置文件,并使用任何MDM将其推送到设备上,例如MobileIron等或使用任何iPhone配置实用程序。安装此配置文件后,重新启动设备时启动的第一个应用程序将是唯一运行的应用程序,直到再次重新启动设备。 引导访问(iOS 6及以上版本):自iOS 6以来,我们可以使用两种方法来实现这一点,即Guide Access和Supervised Access。这两种方法都涉及辅助功能控制功能,如允许用户对其设备进行受限访问。只有在完全访问设备的情况下才能实现这一点。 我们可以通过UIKit方法UIAccessibilityRequestGuidedAccessSession在iOS 7中以编程方式实现在iOS应用程序中设置Kiosk模式。根据苹果开发者文档,“UIAccessibilityRequestGuidedAccessSession会异步地将应用程序转换为或从单个应用程序模式转换”。 如苹果开发者文档所示:
UIAccessibilityRequestGuidedAccessSession

异步地将应用程序转换到或从单应用程序模式转换。

void UIAccessibilityRequestGuidedAccessSession(BOOL enable, void(^completionHandler)(BOOL didSucceed))

参数

enable

将设备置于此应用的单一应用模式中,请指定YES,或者退出单一应用模式,请指定NO。

completionHandler

通知您的应用程序操作成功或失败的块。此块使用以下参数:

didSucceed

如果是“YES”,则应用程序成功地转换到或从单应用程序模式。如果是“NO”,则该应用程序或设备不符合单应用程序模式的要求,或者发生了其他错误。 讨论 您可以使用此方法将您的应用程序锁定到单个应用程序模式,并稍后释放它。例如,一个考试应用程序可能在测试开始时进入此模式,并在用户完成测试时退出此模式。只有使用移动设备管理(MDM)监管的设备才支持进入单个应用程序模式,并且必须通过MDM启用此模式的应用程序本身。您必须平衡每次进入单个应用程序模式的调用与退出该模式的调用。 由于进入或退出单个应用程序模式可能需要一些时间,因此此方法异步执行,并使用completionHandlerblock通知结果。
Availability
Available in iOS 7.0 and later.

参见

UIAccessibilityIsGuidedAccessEnabled

声明于
UIAccessibility.h

0
据我所知,这不能通过编程完成。在一个非越狱设备上,您需要创建一个作为监听器运行的守护程序。
最接近的方法是在您的设备上设置“引导访问”,并将其链接到三次按下主页按钮。
有关引导访问的更多信息可以在此处找到。

谢谢。我更新了问题,专注于编程解决方案,也许通过自动化引导访问来实现。 - makerofthings7

-4

1
可以的。请看我的答案。 - jrturton

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接