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

React Native实现App间Deep Link:iOS测试失败问题求助

嘿,看到你Android端测试成功但iOS在Safari里打不开Deep Link的问题,我帮你梳理下最可能的几个遗漏点和解决步骤:

1. 先检查Info.plist的URL Scheme注册(最容易漏的一步)

iOS要求必须在Info.plist里注册你要用的URL Scheme,只改AppDelegate是不够的。你需要打开项目的Info.plist文件,添加如下配置:

<key>CFBundleURLTypes</key>
<array>
  <dict>
    <key>CFBundleURLSchemes</key>
    <array>
      <string>testlink</string> <!-- 这里填你的Scheme名称 -->
    </array>
    <key>CFBundleURLName</key>
    <string>com.yourcompany.yourapp</string> <!-- 建议填唯一的标识符,比如你的App Bundle ID -->
  </dict>
</array>

如果你用的是Xcode的可视化界面编辑Info.plist,可以找到「URL Types」选项,点击+号添加,然后在「URL Schemes」里填入testlink,「Identifier」填你的Bundle ID。

2. 确认AppDelegate.m的代码实现是否完整

你提到已经在AppDelegate.m里加了#import,但要确保对应的Deep Link处理方法也正确实现了。完整的代码应该是这样的:

#import <React/RCTLinkingManager.h>

// iOS 10及以上版本的处理方法
- (BOOL)application:(UIApplication *)app openURL:(NSURL *)url options:(NSDictionary<UIApplicationOpenURLOptionsKey,id> *)options
{
  return [RCTLinkingManager application:app openURL:url options:options];
}

// 兼容iOS 9及以下版本
- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation
{
  return [RCTLinkingManager application:application openURL:url sourceApplication:sourceApplication annotation:annotation];
}

如果你用的是iOS 13及以上版本,并且项目启用了SceneDelegate(React Native新版本默认会启用),还需要在SceneDelegate.m里添加对应的处理代码:

#import <React/RCTLinkingManager.h>

- (void)scene:(UIScene *)scene openURLContexts:(NSSet<UIOpenURLContext *> *)URLContexts
{
  if (URLContexts.count > 0) {
    NSURL *url = URLContexts.allObjects.firstObject.URL;
    [RCTLinkingManager application:[UIApplication sharedApplication] openURL:url options:@{}];
  }
}

3. 换一种测试方式(Safari直接输URL可能有坑)

有时候在Safari地址栏直接输入testlink://会被Safari拦截或者识别为无效地址,试试用下面两种方式测试:

  • 创建一个简单的HTML文件,内容如下,然后用Safari打开这个文件,点击链接:
    <a href="testlink://">点击打开我的App</a>
    
  • 在iPhone的备忘录里输入testlink://,长按后选择「打开链接」。

4. 清理缓存并重启

Xcode的缓存有时候会导致配置不生效,建议:

  • 按下Command + Shift + K清理Build Folder
  • 重启模拟器/真机
  • 重新编译运行你的App

5. 检查URL Scheme的唯一性

如果其他App也注册了testlink这个Scheme,会导致冲突,建议换成更独特的Scheme,比如com-yourcompany-yourapp(对应URL就是com-yourcompany-yourapp://),避免和其他App撞车。

按照上面的步骤一步步排查,应该就能解决Safari打不开Deep Link的问题了!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 06:53:20