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

iOS中App未在后台时Universal Links无法跳转指定页面问题咨询

解决方案

冷启动场景Universal Links参数获取逻辑

Universal Links原生完全支持冷启动场景下的参数传递与跳转,你遇到的无法获取链接的问题,是因为冷启动时不会触发scene(_ scene: UIScene, continue userActivity: NSUserActivity)方法,链接参数会通过Scene生命周期的启动入口传递。

具体处理步骤如下:

  1. 在SceneDelegate的scene(_:willConnectTo:options:)方法中获取链接参数
    该方法是App冷启动创建Scene时的入口,Universal Links对应的NSUserActivity会存放在connectionOptions的userActivities集合中,示例代码:
func scene(_ scene: UIScene, willConnectTo session: UISceneSession, options connectionOptions: UIScene.ConnectionOptions) {
    // 提取Universal Links对应的UserActivity
    guard let userActivity = connectionOptions.userActivities.first(where: { 
        $0.activityType == NSUserActivityTypeBrowsingWeb 
    }), let targetUrl = userActivity.webpageURL else {
        // 没有对应链接参数,走原有正常启动逻辑
        guard let _ = (scene as? UIWindowScene) else { return }
        return
    }
    // 拿到链接后执行跳转逻辑,建议封装公共方法和后台场景复用
    handleUniversalLinkJump(url: targetUrl)
    
    // 原有初始化逻辑
    guard let _ = (scene as? UIWindowScene) else { return }
}
  1. 复用跳转逻辑
    将跳转指定页面的逻辑封装为公共方法,比如handleUniversalLinkJump(url: URL),后台场景触发scene(_:continue:)时也调用该方法,保证两种场景下处理逻辑一致。

额外注意事项

  • 跳转逻辑需要保证App根控制器、首页栈初始化完成后再执行,避免因页面未加载完成导致跳转失效,可以根据业务场景选择加少量延迟,或者监听首页渲染完成的回调后再执行跳转
  • 如果需要兼容iOS 13以下没有SceneDelegate的系统版本,需要在AppDelegate的application(_:didFinishLaunchingWithOptions:)方法中,从launchOptions参数的UIApplication.LaunchOptionsKey.userActivityDictionary字段中提取对应的UserActivity处理
  • 如果需要同时支持URL Scheme类型的深度链接,冷启动时可以从connectionOptions.urlContexts中提取对应的Scheme链接进行处理

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 02:36:03