React Native iOS Universal Link配置异常:Android正常iOS无法生效
iOS Universal Link 无法生效排查请求
我已完成Universal Link的全部配置步骤,Android端功能正常,但iOS端无法生效,无法定位问题所在。此前使用Firebase动态链接实现深度链接,现在希望通过网站URL添加Universal Link。以下是相关配置信息:
配置详情
- .well-known/apple-app-site-association文件(Team ID取自Xcode签名证书详情):
{"applinks":{"apps":[],"details":[{"appID":"teamIDxxx.com.james.gastro.mobile","paths":["*"]}]}}
- AppDelegate.m代码:
#import "AppDelegate.h" #import <React/RCTBridge.h> #import <React/RCTBundleURLProvider.h> #import <React/RCTRootView.h> #import <React/RCTLinkingManager.h> #ifdef FB_SONARKIT_ENABLED #import <FlipperKit/FlipperClient.h> #import <FlipperKitLayoutPlugin/FlipperKitLayoutPlugin.h> #import <FlipperKitUserDefaultsPlugin/FKUserDefaultsPlugin.h> #import <FlipperKitNetworkPlugin/FlipperKitNetworkPlugin.h> #import <SKIOSNetworkPlugin/SKIOSNetworkAdapter.h> #import <FlipperKitReactPlugin/FlipperKitReactPlugin.h> static void InitializeFlipper(UIApplication *application) { FlipperClient *client = [FlipperClient sharedClient]; SKDescriptorMapper *layoutDescriptorMapper = [[SKDescriptorMapper alloc] initWithDefaults]; [client addPlugin:[[FlipperKitLayoutPlugin alloc] initWithRootNode:application withDescriptorMapper:layoutDescriptorMapper]]; [client addPlugin:[[FKUserDefaultsPlugin alloc] initWithSuiteName:nil]]; [client addPlugin:[FlipperKitReactPlugin new]]; [client addPlugin:[[FlipperKitNetworkPlugin alloc] initWithNetworkAdapter:[SKIOSNetworkAdapter new]]]; [client start]; } #endif @import UIKit; @import Firebase; @import GoogleMaps; #import <GoogleMaps/GoogleMaps.h> #import <FBSDKCoreKit/FBSDKCoreKit.h> #import <React/RCTLinkingManager.h> #import <RNGoogleSignin/RNGoogleSignin.h> @implementation AppDelegate - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { [GMSServices provideAPIKey:@"xxx"]; #ifdef FB_SONARKIT_ENABLED InitializeFlipper(application); #endif RCTBridge *bridge = [[RCTBridge alloc] initWithDelegate:self launchOptions:launchOptions]; RCTRootView *rootView = [[RCTRootView alloc] initWithBridge:bridge moduleName:@"JamesMobile" initialProperties:nil]; if (@available(iOS 13.0, *)) { rootView.backgroundColor = [UIColor systemBackgroundColor]; } else { rootView.backgroundColor = [UIColor whiteColor]; } self.window = [[UIWindow alloc] initWithFrame:[UIScreen mainScreen].bounds]; UIViewController *rootViewController = [UIViewController new]; rootViewController.view = rootView; self.window.rootViewController = rootViewController; [self.window makeKeyAndVisible]; [FIRApp configure]; return YES; } - (BOOL)application:(UIApplication *)application continueUserActivity:(nonnull NSUserActivity *)userActivity restorationHandler:(nonnull void (^)(NSArray<id<UIUserActivityRestoring>> * _Nullable))restorationHandler { return [RCTLinkingManager application:application continueUserActivity:userActivity restorationHandler:restorationHandler]; } - (BOOL)application:(UIApplication *)app openURL:(NSURL *)url options:(NSDictionary<UIApplicationOpenURLOptionsKey,id> *)options { if ([[FBSDKApplicationDelegate sharedInstance] application:app openURL:url options:options] || [RNGoogleSignin application:app openURL:url options:options]) { return YES; } return [RCTLinkingManager application:app openURL:url options:options]; return NO; } - (NSURL *)sourceURLForBridge:(RCTBridge *)bridge { #if DEBUG return [[RCTBundleURLProvider sharedSettings] jsBundleURLForBundleRoot:@"index" fallbackResource:nil]; #else return [[NSBundle mainBundle] URLForResource:@"main" withExtension:@"jsbundle"]; #endif } @end
- Header Search Paths:
"$(SRCROOT)/../node_modules/react-native/Libraries/LinkingIOS" (recursive)
- Associated Domains/Domains:
applinks:webapp.stage.gastrojames.ch
- Info/URL Types:

排查建议
1. 验证apple-app-site-association文件
- 确保文件通过HTTPS直接访问(无重定向),响应头
Content-Type必须为application/json,不能是text/plain - 校验appID格式:
TeamID.BundleID,确认Team ID与签名证书、Xcode配置完全一致,Bundle ID与项目CFBundleIdentifier完全匹配 - 用JSON校验工具确认文件格式无语法错误
2. 检查Xcode配置
- 确认Associated Domains已开启,域名格式正确(无https前缀)
- 登录Apple Developer后台,检查对应签名证书是否包含Associated Domains权限
- 确保Debug/Release环境的签名、Associated Domains配置一致
3. 调试AppDelegate逻辑
- 在
continueUserActivity方法中添加日志,确认该方法是否被调用:- (BOOL)application:(UIApplication *)application continueUserActivity:(nonnull NSUserActivity *)userActivity restorationHandler:(nonnull void (^)(NSArray<id<UIUserActivityRestoring>> * _Nullable))restorationHandler { NSLog(@"Received Universal Link: %@", userActivity.webpageURL); BOOL handled = [RCTLinkingManager application:application continueUserActivity:userActivity restorationHandler:restorationHandler]; NSLog(@"Link handled by RCTLinkingManager: %d", handled); return handled; } - 检查Firebase动态链接是否未完全移除,避免与Universal Link冲突
4. 测试方式修正
- 不要直接在Safari地址栏输入链接测试,改用短信/备忘录/第三方App分享后点击链接
- 卸载App后重新安装(清除缓存),使用Ad Hoc或TestFlight包测试(Debug包可能存在缓存问题)
- 重置Safari缓存:设置→Safari浏览器→清除历史记录与网站数据,或重启设备
内容的提问来源于stack exchange,提问作者Berke
相关产品推荐
相关产品推荐

