iOS中如何通过Universal Link获取其他App的返回值?
iOS通过Universal Link获取第三方App返回值的方案
一、核心实现逻辑与系统API
Universal Link本身是用于App间跳转的协议,要获取第三方App的返回值,本质是让第三方App在完成操作后,通过你的App的Universal Link跳转回来,并在链接中携带结果参数。iOS系统提供原生API处理这种跳转回调,不需要额外第三方库:
- 对于iOS 12及以下,在
UIApplicationDelegate中实现application(_:continue:restorationHandler:)方法,该方法会在第三方App跳转回你的App时被调用,你可以从传入的userActivity中提取跳转的Universal Link,解析其中的参数(比如支付状态、订单ID)。 - 对于iOS 13及以上的Scene架构,在
SceneDelegate中实现scene(_:continue:)方法,逻辑和上面一致,从userActivity中获取并解析链接。
示例代码片段:
// iOS 13+ SceneDelegate func scene(_ scene: UIScene, continue userActivity: NSUserActivity) { guard userActivity.activityType == NSUserActivityTypeBrowsingWeb, let url = userActivity.webpageURL else { return } // 解析Universal Link中的参数,比如支付结果 if url.path == "/pay-result" { let components = URLComponents(url: url, resolvingAgainstBaseURL: true) let status = components?.queryItems?.first(where: { $0.name == "status" })?.value let orderId = components?.queryItems?.first(where: { $0.name == "orderId" })?.value // 处理返回结果 print("支付状态:\(status ?? ""),订单ID:\(orderId ?? "")") } }
二、URL Launcher打开第三方App后的结果获取
不管用哪种URL Launcher(原生UIApplication.shared.open(_:options:completionHandler:)还是第三方封装的工具)打开第三方App,要获取返回值的前提是:
- 你的App已配置好Universal Link(或URL Scheme),并将该链接告知第三方App(比如支付平台的后台配置);
- 第三方App支持在操作完成后,通过你的Universal Link跳转回你的App,并在链接中携带结果参数。
当第三方App跳转回来时,你只需在上述的Delegate回调方法中解析链接参数即可拿到结果。
三、App Extension是否适合?
App Extension不是接收第三方App返回值的合适方案。Extension是独立于主App的进程,主要用于扩展系统功能(比如分享、快捷操作)或嵌入其他App的界面,无法直接和主App实时交互获取跳转返回的结果,而且第三方App也不会主动将操作结果发送到你的Extension中。这种场景下,还是通过Universal Link/URL Scheme的跳转回调来实现才是正确路径。
内容的提问来源于stack exchange,提问作者chris
相关产品推荐
相关产品推荐

