iOS Universal Link后台唤起异常:scene(_:continue:)方法未被调用
关于Universal Link后台唤起时scene(_:continue:)未触发的问题
我已按照Apple官方文档配置Universal Link,冷启动APP时,点击Universal Link可正常唤起APP,并在scene(_:willConnectTo:options:)方法中接收URL,代码如下:
func scene(_ scene: UIScene, willConnectTo session: UISceneSession, options connectionOptions: UIScene.ConnectionOptions) { Log("SceneDelegate.scene(_:willConnectTo:options:)") let userActivities: Set<NSUserActivity> = connectionOptions.userActivities for userActivity in userActivities { guard userActivity.activityType == NSUserActivityTypeBrowsingWeb, let universalLink = userActivity.webpageURL else { Log("Not launched via universal links!") return } Log(String(format: "userActivities = %@", String(describing: userActivity))) Log(String(format: "universalLink = %@", universalLink.absoluteString)) // Update UI } }
但当APP处于后台运行状态时,点击Universal Link唤起APP到前台,链接并未按照文档说明以NSUserActivity对象传递到scene(_:continue:)方法中,该方法未被调用,导致UI无法更新。参考相关方案后问题仍未解决,请问缺少哪些配置或步骤?
scene(_:continue:)方法代码如下:
func scene(_ scene: UIScene, continue userActivity: NSUserActivity) { Log("SceneDelegate.scene(_:continue:)") guard userActivity.activityType == NSUserActivityTypeBrowsingWeb, let universalLink = userActivity.webpageURL else { Log("Not launched via universal links!") return } Log(String(format: "userActivities = %@", String(describing: userActivity))) Log(String(format: "universalLink = %@", universalLink.absoluteString)) // Update UI }
可能的解决步骤:
- 确认SceneDelegate的代理配置:确保
SceneDelegate正确遵循UIWindowSceneDelegate协议,同时在Info.plist的Application Scene Manifest中,Delegate Class Name已正确指向你的SceneDelegate类(注意类名需包含完整模块路径)。 - 检查关联域名与配置文件:
- 苹果开发者后台和Xcode的
Signing & Capabilities中,Associated Domains的域名必须以applinks:开头,且与服务器上的apple-app-site-association文件域名完全一致。 - 验证
apple-app-site-association文件的paths规则,避免设置仅允许冷启动的路径(比如不要用NOT规则误排除后台唤起场景),同时确保appIDs字段包含你的APP的Team ID + Bundle ID组合。
- 苹果开发者后台和Xcode的
- 兜底处理其他回调方法:部分场景下,后台唤起的Universal Link会通过
scene(_:openURLContexts:)传递,可实现该方法进行兜底:func scene(_ scene: UIScene, openURLContexts URLContexts: Set<UIOpenURLContext>) { guard let url = URLContexts.first?.url else { return } // 复用你的Universal Link处理逻辑 handleUniversalLink(url: url) } - 清除缓存并重新安装:删除APP后重启设备,再重新安装,避免旧的关联配置缓存导致的异常。
- 排查第三方SDK或路由框架的拦截:检查APP内集成的第三方SDK(如社交、支付类)或自定义URL路由框架,是否拦截了Universal Link的传递,导致系统回调未触发。
- 验证系统版本适配:确保代码适配iOS 13及以上的Scene架构,避免因版本差异导致的回调逻辑不兼容。
内容的提问来源于stack exchange,提问作者NightFuryLxD
相关产品推荐
相关产品推荐

