You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

求助:UIApplication.shared.open在画中画后台模式下失效

解决UIApplication.shared.open在画中画后台模式下失效的问题

问题原因

iOS系统对后台应用的权限有严格限制,UIApplication.shared.open(_:options:completionHandler:) 方法在应用处于后台(包括画中画模式)时,默认无法触发跳转到其他应用的URL Scheme操作。系统会阻止这类非用户主动触发的跨应用跳转,避免后台应用随意干扰用户当前操作。

可行解决方案

1. 利用后台任务延长活跃时间

在调用open方法前启动后台任务,让应用在后台短暂保持活跃状态,尝试执行跳转操作:

@objc func turnPage() {
    var backgroundTaskID: UIBackgroundTaskIdentifier = .invalid
    
    backgroundTaskID = UIApplication.shared.beginBackgroundTask(withName: "OpenURLTask") {
        UIApplication.shared.endBackgroundTask(backgroundTaskID)
        backgroundTaskID = .invalid
    }
    
    DispatchQueue.main.async {
        guard let url = URL(string: "forscore://action?type=nextpage") else {
            UIApplication.shared.endBackgroundTask(backgroundTaskID)
            backgroundTaskID = .invalid
            return
        }
        
        UIApplication.shared.open(url) { result in
            if result {
                print("turned page")
            }
            UIApplication.shared.endBackgroundTask(backgroundTaskID)
            backgroundTaskID = .invalid
        }
        print("This code runs every 5 seconds")
    }
}

注意:后台任务的时长有限(通常最多几分钟,具体取决于系统状态),且系统仍可能拒绝这类操作,这只是提升成功率的临时方案。

2. 通过用户主动交互触发跳转

如果你的画中画界面有控制按钮,让用户主动点击触发turnPage方法。iOS允许后台应用响应用户主动发起的交互操作,此时调用open方法会被系统允许。

3. 检查应用后台权限配置

确保你的应用已开启必要的后台模式:

  • 在Xcode项目设置中进入Signing & Capabilities
  • 添加Background Modes权限,勾选Audio, AirPlay, and Picture in Picture(如果你的应用是视频/音频类)
    不过这只能保证应用在画中画模式下保持活跃,无法直接解决open方法的限制。

关键说明

URL Scheme跳转属于跨应用交互,iOS系统在后台场景下对这类操作的限制非常严格,即使使用后台任务也无法保证100%成功。如果forscore应用支持其他交互方式(如App Groups共享数据、通知扩展等),可以优先考虑这些方案。

内容的提问来源于stack exchange,提问作者Mahmoud Khalifa

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.25 14:55:19