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

配置URL Scheme后,deeplink触发时application:openURL:options:未调用

排查iOS Deeplink未触发application:openURL:options:的问题

我来帮你一步步排查这个问题,这种情况我自己开发时也碰到过好几次,咱们从最基础的点开始检查:

1. 确认deeplink的调用格式是否正确

很多时候问题出在链接拼写:

  • 必须在Scheme后面加上://,也就是你要在Safari里输入的是 deeplink-test://,而不是只写deeplink-test(后者会被Safari当成搜索关键词)
  • 可以试试带路径的完整链接,比如deeplink-test://home,测试是否能唤起App

2. 验证Info.plist的配置是否生效

Xcode的缓存偶尔会导致配置不更新,先做这几步:

  • 执行Cmd+Shift+K clean工程,然后重新build到模拟器/真机
  • 检查Xcode的Build Phases -> Copy Bundle Resources,确认你的Info.plist在列表中
  • 确认URL identifier和App的Bundle ID完全一致,包括大小写(虽然Bundle ID不区分大小写,但严格一致能避免潜在问题)
  • 确认URL Schemes数组里只有deeplink-test,没有多余的空格或拼写错误

3. 检查代码实现是否适配iOS版本

从iOS 13开始,苹果引入了SceneDelegate,如果你的项目启用了多场景支持,AppDelegate的application:openURL:options:可能不会被触发,所有deeplink会走到SceneDelegate的方法里:

Objective-C示例

// AppDelegate.m(兼容iOS12及以下)
- (BOOL)application:(UIApplication *)app openURL:(NSURL *)url options:(NSDictionary<UIApplicationOpenURLOptionsKey,id> *)options {
    NSLog(@"Received deeplink in AppDelegate: %@", url);
    // 这里写你的deeplink处理逻辑
    return YES;
}

// SceneDelegate.m(iOS13+)
- (void)scene:(UIScene *)scene openURLContexts:(NSSet<UIOpenURLContext *> *)URLContexts {
    UIOpenURLContext *context = URLContexts.anyObject;
    NSURL *url = context.URL;
    NSLog(@"Received deeplink in SceneDelegate: %@", url);
    // 建议把处理逻辑抽成公共方法,让两个Delegate都调用
}

Swift示例

// AppDelegate.swift(兼容iOS12及以下)
func application(_ app: UIApplication, open url: URL, options: [UIApplication.OpenURLOptionsKey : Any] = [:]) -> Bool {
    print("Received deeplink in AppDelegate: \(url)")
    // 处理逻辑
    return true
}

// SceneDelegate.swift(iOS13+)
func scene(_ scene: UIScene, openURLContexts URLContexts: Set<UIOpenURLContext>) {
    guard let url = URLContexts.first?.url else { return }
    print("Received deeplink in SceneDelegate: \(url)")
    // 调用公共处理方法
}

4. 换一种测试方式

Safari直接输入链接有时会有异常,试试这些更可靠的测试方法:

  • 在Notes或Messages里输入deeplink-test://,然后点击这个链接
  • 用Xcode的Debug -> Open URL...功能,输入deeplink-test://,看是否能唤起App并打印日志
  • 针对模拟器,用终端命令:xcrun simctl openurl booted deeplink-test://

5. 排除其他潜在冲突

  • 检查Info.plist里的LSApplicationQueriesSchemes数组:这个是用来查询其他App的Scheme,不需要添加自己的Scheme,但如果里面有错误的配置,可能间接影响,不过概率很低
  • 确认App没有被系统限制:在设备的设置 -> 你的App里,检查是否有异常的权限限制(不过一般不会影响deeplink)

按照上面的步骤排查,大概率能找到问题所在,先从链接格式和SceneDelegate的适配开始检查,这两个是最常见的坑。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 10:24:08