以编程方式将iOS应用程序锁定在单一应用程序模式下

20

注意:我不想将这个应用提交到应用商店。

我的目标:

我想创建一个简单的应用程序,有一个视图,包含两个按钮:锁定和解锁。

锁定 - 这个按钮将锁定设备。只有这个应用程序的屏幕会显示,即使重新启动也只会显示这个屏幕,主页按钮和手势都会像单一应用程序模式一样被禁用,无法使用其他功能。

解锁 - 这将解锁设备并切换到正常的设备行为。

iOS: 我希望支持iOS 4.3及以上版本。

我已经查看了以下解决方案,但它们都不符合我的要求:

  1. 配置文件

    锁定iPhone/iPod/iPad,使其只能运行一个应用程序

    但这是手动的(重新启动设备,打开您想要以单一应用程序模式运行的应用程序)。我想通过我的应用程序以编程方式实现它。

  2. 引导访问(iOS 6及以上版本)

    如何以编程方式将用户锁定为iOS 6中的单个应用程序模式?

    我希望在所有操作系统上以编程方式实现它。

有没有办法可以做到这一点?因为我不想将其提交给应用商店,是否有私有API,对于springboard的某些hack方法来实现这一点?

提前感谢!!

3个回答

23

据我所知,在iOS 7中有一个新功能,可以满足您的需求。然而,它仅适用于iOS 7(我认为仅适用于受监管的设备)。

1)您需要安装限制配置文件,并使用autonomousSingleAppModePermittedAppIDs键(请参见这里)。

这是一个一次性步骤,用户需要手动接受此配置文件。

还有另一种选择,可以使用MDM来静默安装它,但这可能对您来说过于繁琐。

2)您应该使用API:

UIAccessibilityRequestGuidedAccessSession (to lock/unlock)

这里进行了定义,请点击此处

3) 最美妙的部分是,所有内容都是官方文档。所以,您甚至可以将其提交到AppStore。

P.S. 您为什么要关心4.3或5?它们现在的市场份额很小。很可能甚至iOS 6的市场份额已经低于20%。

更新1

有可能尝试使用API发送点击和键盘信号(在iPhone-privateapi标记中搜索GSEvent)。也许使用这些API,您可以三次点击Home键来切换辅助功能开关。

如果这样能够解决问题,我认为您应该能够覆盖iOS 6。但我不确定在此之前是否都可用这个API和三次Home键点击功能。

看起来在iOS 7中无法再使用此私有API。所以,您可能可以忽略这个想法。


1
autonomousSingleAppModePermittedAppIDs需要设备受监管,据我所知,这需要使用Apple Configurator对设备进行物理设置,并且不允许设备与任何其他计算机同步。有没有什么办法可以解决这个问题? - Ben Dowling
@VictorRonin,我尝试使用旧的GSEvent技术来模拟主页按钮的单击、双击和三连击,但在iOS 7中似乎不再起作用了。 - Nate
@Nate:是的,没错。那时我不知道GSEvent存在问题。我现在会更新我的答案。 - Victor Ronin
1
@VictorRonin 我认为步骤1+2并不是100%准确的。从文档UIAccessibilityIsGuidedAccessEnabled中可以看到,...只有使用移动设备管理(MDM)监管的设备才支持进入单应用程序模式..应用程序本身必须由MDM启用。 话虽如此,我仍然遇到了问题 - Sandeep Phadke
1
@Rushi,我记得你需要注册企业开发者计划,这将允许你成为MDM供应商,并且你将能够通过MDM安装这些配置。然而,如何编写这样的应用程序是一个远超出StackOverflow讨论范围的话题。 - Victor Ronin
显示剩余9条评论

3
我想写一下这个旧问题的解决方案,因为我需要实现类似的解决方案并且已经实现了。我的步骤如下,需要注意的是,这涉及到MDM和其他特定步骤。
我的要求如下:不同位置的每个iPad都安装了一组应用程序。为了方便,让我们假设每个部门都有自己的应用程序。参与者打开与其部门相关的应用程序进行测试,该应用程序会自动将iPad锁定到单一应用程序模式,测试结束后,它将自动解锁。
  1. 使用Apple Configurator监管iPad/iPhone。
  2. 安装与MDM相关的文件(每个MDM都有自己的一套说明,通常涉及下载配置文件)。
  3. 每个MDM都有单一应用程序模式或多个应用程序模式选项。选择第二个选项并将应用程序ID添加到列表中。(单一应用程序模式在MDM中运行得非常好,但我不想让应用程序一直被锁定在一个应用程序上)。
  4. 我使用了UIAccessibilityRequestGuidedAccessSession api来从单一应用程序模式下锁定/解锁设备。
http://bobxcode.blogspot.com/2015/12/programmatically-implement-single-app.html 谢谢, Bob

你能告诉我如何以编程方式监控设备吗?实际上,我需要制作一个类似于Screen Timer的应用程序,你能指导我吗? - Abhishek Joshi
对于 MultipleAppMode,有没有办法禁用睡眠/锁定按钮? - Adam

1
在MDM配置中,有一个选项
  • autonomousSingleAppModePermittedAppIDs

    可选。仅受监管的设备。如果存在,则允许列在数组中的束ID标识的应用程序自主进入单一应用程序模式。 可用性:仅适用于iOS 7.0及更高版本。

    但这需要监管设备模式。


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