【问题标题】:Enable/disable features in the keybaord depending on the running app根据正在运行的应用程序启用/禁用键盘中的功能
【发布时间】:2017-03-09 19:10:09
【问题描述】:

我正在为聊天应用开发自定义键盘。这个应用程序也有贴纸和 GIF。自定义键盘可以在系统范围内使用。但贴纸和 gif 仅在我的聊天应用程序中。

有没有办法检测正在运行的应用程序,以便我可以在键盘中打开和关闭贴纸/GIF?我做了一些挖掘,在 SO 上找到了这个 answer。但这对我不起作用。

override public func viewWillAppear(animated: Bool) {
    super.viewWillAppear(animated)
    if let parentViewController = self.parentViewController {
        var hostBundleID = parentViewController.valueForKey("_hostBundleID")
        println(hostBundleID)
    }
}

viewWillAppear 函数甚至不会触发。然后,当您使用 hack-ish 变通方法时,应用程序可能会被 Apple 拒绝。

有没有更好的方法来做到这一点?

【问题讨论】:

    标签: ios swift keyboard ios-app-extension custom-keyboard


    【解决方案1】:

    我认为不允许应用扩展了解当前正在运行的应用或调用它们的应用。

    您可以做的是在聊天应用程序中嵌入键盘扩展,并使用扩展程序和主机应用程序之间的数据共享机制来检测主机应用程序何时运行(您可以在 here >与包含的应用程序共享数据部分)。

    基本上,您可以在打开聊天应用程序时在共享的NSUserDefaults 中写入一个值,并在应用程序处于后台或关闭时写入不同的值,然后检查键盘扩展中的值。

    现在,如果主机应用程序崩溃,那么您的 NSUserDefaults 值不再准确(它显示主机应用程序正在运行,而实际上它不是)但是您可以实现某种心跳 - 每 30 秒从主机写入一个时间戳如果时间戳足够新鲜,可以假设主机仍在运行,请检查应用扩展。

    从复杂且容易失败的意义上说,它仍然是一个(大而多毛的)hack,但至少从 App Store 的角度来看是合法的。

    【讨论】:

      猜你喜欢
      • 2023-03-16
      • 2020-04-23
      • 1970-01-01
      • 1970-01-01
      • 2012-07-28
      • 2023-03-16
      • 2022-10-17
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多