如何获取启动iOS App Clip的URL中的query parameters?
获取iOS App Clip启动URL中Query参数的可行方案
存在完全合规的官方技术方案,不需要依赖私有API,具体实现逻辑和注意事项如下:
- 前置配置检查
先确保App Clip的Target已经正确配置Associated Domains,添加对应唤起域名的appclips:your.domain.com条目,同时域名下的apple-app-site-association文件已经正确配置了App Clip的路径规则,这步没做对的话系统不会将唤起URL透传给你的App Clip进程,后续所有逻辑都不会触发。 - 冷启动场景实现(App Clip进程未运行时被URL唤起)
系统会将唤起时的URL封装在类型为NSUserActivityTypeBrowsingWeb的NSUserActivity对象中传入,你可以根据自己用的生命周期框架取对应回调:
如果是SwiftUI生命周期,直接在根视图上挂载onContinueUserActivity修饰符即可:
@main struct DemoAppClip: App { var body: some Scene { WindowGroup { ContentView() .onContinueUserActivity(NSUserActivityTypeBrowsingWeb) { activity in guard let url = activity.webpageURL, let urlComp = URLComponents(url: url, resolvingAgainstBaseURL: true), let queryParams = urlComp.queryItems else { return } // 直接读取参数即可,例如读取名为"productId"的参数 let productId = queryParams.first(where: { $0.name == "productId" })?.value // 后续参数处理逻辑 } } } }
如果是UIKit生命周期,实现UIApplicationDelegate的application(_:continue:restorationHandler:)代理方法,从入参的userActivity对象中取webpageURL,后续URL解析逻辑和SwiftUI版本完全一致。
- 热启动场景实现(App Clip在后台挂起时被URL唤起切回前台)
上述的NSUserActivity回调会自动触发,不需要额外注册通知或者添加其他监听逻辑,一套代码可以覆盖冷、热启动两种唤起场景。
注意不要尝试从
Bundle.main、ProcessInfo.processInfo.arguments里读取唤起URL,这些路径拿不到真实的唤起参数,所有通用链接(Universal Link)唤起的URL,系统只会通过NSUserActivity通道透传。
- 特殊场景说明
如果你是用自定义URL Scheme唤起App Clip,参数不会走上面的NSUserActivity通道,需要实现application(_:open:options:)代理方法,从入参的url对象中解析query参数即可。 - 测试提示
本地调试时不要直接启动App Clip后手动输入URL测试,建议把Xcode的Run Scheme设置为 Wait for the executable to be launched,安装App Clip到真机后,从Safari、备忘录或者iMessage里点击唤起链接触发App Clip启动,这样可以完整复现真实用户的唤起链路,避免因为调试环境问题误判参数传递逻辑失效。
内容的提问来源于stack exchange,提问作者Orfeas Magoulas
相关产品推荐
相关产品推荐

