一尘不染

我们是否可以检测用户是否在不听darwin通知的情况下通过主页按钮或锁定按钮离开了?

swift

我最近向应用商店提交了一个新的二进制文件,并将其发送进行审查,但立即被以下消息拒绝。“不支持的操作-
不允许应用监听设备锁定通知。”。经过一番挖掘,我发现我们无法使用“ com.apple.springboard.lockstate”来找出锁定状态。

本质上,我的应用程序需要知道用户如何离开我的应用程序。是否按下主页按钮,锁定按钮,通过敲击另一个应用程序的通知离开应用程序等?是否有任何方法可以实现?我开始调查我的应用程序是否在后台运行,也许我们可以检查应用程序状态以弄清楚它。就我所知,我想知道是否有人对此有所了解


阅读 345

收藏
2020-07-07

共1个答案

一尘不染

在搜索了苹果公司的文档并挖掘了很多线程之后,我想我可能偶然发现了该解决方案。

据我所知,这是目前检测用户是否通过主页按钮或锁定按钮离开的唯一方法(我认为这在模拟器上不起作用,您必须在实际的电话上尝试一下)。

在此委托内部(并且仅在此委托中被调用时才起作用)

func applicationDidEnterBackground(_ application: UIApplication) {

}

您可以在此处调用此小片段:

func DidUserPressLockButton() -> Bool {
    let oldBrightness = UIScreen.main.brightness
    UIScreen.main.brightness = oldBrightness + (oldBrightness <= 0.01 ? (0.01) : (-0.01))
    return oldBrightness != UIScreen.main.brightness
}

用法:

func applicationDidEnterBackground(_ application: UIApplication) {
    if (DidUserPressLockButton()) {
        //User pressed lock button
    } else {
        //user pressed home button
    }
}

说明:

applicationDidEnterBackground用户离开锁定按钮(而不是主页按钮)时起,苹果似乎只能让您更改屏幕亮度。因此,其想法是以很小的量更改屏幕亮度,并检查是否可以更改它。这似乎有点怪异,但我
听说
这实际上按预期工作。就测试而言,它似乎在100%的时间内都有效。除了真正要更改屏幕亮度的用户外,我没有发现任何其他问题。我希望其他人可以找到一些不太骇人,更具体的东西。

2020-07-07