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

升级React Native至0.72后Universal Links失效排查求助

React Native 0.72升级后Universal Links失效问题排查

问题背景

React Native应用在0.67版本时Universal Links功能正常,升级至0.72版本后该功能失效。已完成以下操作:

  • 按照官方文档将AppDelegate.m替换为AppDelegate.mm
  • 遵循Linking配置指南,添加Xcode头搜索路径中的LinkingIOS文件夹
  • 在新的AppDelegate.mm中实现openURL和continueUserActivity方法
  • 验证Web服务器上的AASA文件、关联域名授权文件配置正确(0.67版本分支测试正常)

现象

在iOS模拟器中点击Universal Links时,链接直接在浏览器打开,无法唤起应用(无论应用处于后台还是完全关闭状态);Xcode构建日志和Metro终端无报错,通过RCTLog()验证发现AppDelegate中的相关方法未被调用。

当前AppDelegate.mm代码

#import <Firebase.h>
#import "AppDelegate.h"
#import <React/RCTLinkingManager.h>
#import <React/RCTBundleURLProvider.h>

@implementation RNAppDelegate
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
  [FIRApp configure];
  
  // Following if statement is fix for https://quickbase.atlassian.net/browse/MB1-462
  // Code is taken from this thread: https://github.com/mCodex/react-native-sensitive-info/issues/303
  if ([[NSUserDefaults standardUserDefaults] boolForKey:@"HAS_RUN_BEFORE"] == NO) { 
    [[NSUserDefaults standardUserDefaults] setBool:YES forKey:@"HAS_RUN_BEFORE"]; 
    NSArray *secItemClasses = [NSArray arrayWithObjects: (__bridge id)kSecClassGenericPassword, (__bridge id)kSecClassInternetPassword, (__bridge id)kSecClassCertificate, (__bridge id)kSecClassKey, (__bridge id)kSecClassIdentity, nil]; 
    for (id secItemClass in secItemClasses) { 
      NSDictionary *spec = @{(__bridge id)kSecClass: secItemClass}; SecItemDelete((__bridge CFDictionaryRef)spec); 
    } 
  }
  
  self.moduleName = @"myAppName";
  // You can add your custom initial props in the dictionary below.
  // They will be passed down to the ViewController used by React Native.
  self.initialProps = @{};
  return [super application:application didFinishLaunchingWithOptions:launchOptions];
}
- (NSURL *)sourceURLForBridge:(RCTBridge *)bridge
{
#if DEBUG
  return [[RCTBundleURLProvider sharedSettings] jsBundleURLForBundleRoot:@"index"];
#else
  return [[NSBundle mainBundle] URLForResource:@"main" withExtension:@"jsbundle"];
#endif
}
// iOS 9.x or newer
- (BOOL)application:(UIApplication *)application
   openURL:(NSURL *)url
   options:(NSDictionary<UIApplicationOpenURLOptionsKey,id> *)options
{
  return [RCTLinkingManager application:application openURL:url options:options];
}
- (BOOL)application:(UIApplication *)application continueUserActivity:(nonnull NSUserActivity *)userActivity
 restorationHandler:(nonnull void (^)(NSArray<id<UIUserActivityRestoring>> * _Nullable))restorationHandler
{
 return [RCTLinkingManager application:application
                  continueUserActivity:userActivity
                    restorationHandler:restorationHandler];
}
@end

可能遗漏的配置项

  • 检查AppDelegate继承关系:确认AppDelegate.h中RNAppDelegate是否继承自RCTAppDelegate,如果继承错误,系统代理方法无法被正确转发。
  • 重新验证关联域名配置:打开Xcode项目的Signing & Capabilities面板,确认Associated Domains中已添加applinks:yourdomain.com(域名需与AASA文件中一致,无多余空格)。
  • 确认RCTLinking依赖:检查Podfile是否包含React-RCTLinking,执行pod install重新安装依赖,确保链接库被正确引入。
  • 重置模拟器缓存:删除模拟器上的应用,执行Hardware -> Erase All Content and Settings重置模拟器,重启Xcode和Metro后重新安装应用。
  • 检查方法签名准确性:对比官方continueUserActivity方法签名,确保参数修饰符、拼写完全一致,避免因签名不匹配导致方法未被调用。

额外调试方法

  • 监听系统通知:在didFinishLaunchingWithOptions中添加以下代码,监听用户活动通知,排查是否能接收到Universal Links触发的事件:
    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(handleUserActivity:) name:UIApplicationUserActivityUpdatedNotification object:nil];
    
    并实现对应的处理方法:
    - (void)handleUserActivity:(NSNotification *)notification {
        NSUserActivity *userActivity = notification.userInfo[UIApplicationUserActivityUpdatedNotificationUserActivityKey];
        NSLog(@"Received user activity: %@", userActivity.activityType);
    }
    
  • 使用终端命令测试:执行xcrun simctl openurl booted "你的Universal Links地址",观察是否能唤起应用,同时查看Xcode控制台输出。
  • 检查编译配置:确认Build Settings中的Other Linker Flags包含-ObjC,避免因链接器设置问题导致RCTLinkingManager方法无法调用。
  • 真机测试:模拟器可能存在缓存问题,在真机上测试Universal Links功能,排除模拟器环境干扰。
  • 查看AASA下载日志:打开Mac的Console应用,搜索swcd,查看AASA文件的下载状态和报错信息,确认文件是否被成功获取。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.09 17:46:07