React Native iOS端Firebase动态链接失效问题求助
I ran into nearly identical issues with Firebase Dynamic Links on iOS a few months back, and looking at your configuration files, there are a couple of key issues causing this behavior. Here's what worked for me:
First, Let's Recap Your Symptoms to Confirm Alignment
- No code changes made, but Firebase Dynamic Links stopped working on iOS
- Xcode throws:
-[RNFirebaseLinks application:continueUserActivity:restorationHandler:]_block_invoke [Line 83] Failed to handle universal link: https://XXX.page.link/XXX - App opens, but
dispatchUrlcallback doesn't fire; links only work once after reinstall, then fail Linking.getInitialURL()works, butLinking.addEventListener('url')doesn't catch links when the app is running
Step 1: Fix Version Mismatch Between RNFirebase and Firebase Pods
Your react-native-firebase version is 5.2.1, but your Podfile specifies Firebase 5.14.0—this major version gap is causing compatibility issues with deep link handling. Update RNFirebase to a 5.x release that matches your Firebase Pod version:
npm install react-native-firebase@5.6.0 --save
Then navigate to your iOS directory and run:
pod install --repo-update
Step 2: Correct the continueUserActivity Logic in AppDelegate.m
Right now, your app only tries to handle universal links via RNFirebaseLinks, with no fallback if that fails. This is why Linking.addEventListener doesn't trigger. Modify the method to include a fallback to RCTLinkingManager:
-(BOOL)application:(UIApplication *)application continueUserActivity:(NSUserActivity *)userActivity restorationHandler:(void (^)(NSArray<id<UIUserActivityRestoring>> * _Nullable))restorationHandler { BOOL handled = [[RNFirebaseLinks instance] application:application continueUserActivity:userActivity restorationHandler:restorationHandler]; // Fall back to React Native's Linking module if Firebase can't handle the link if (!handled) { handled = [RCTLinkingManager application:application continueUserActivity:userActivity restorationHandler:restorationHandler]; } return handled; }
Step 3: Clear iOS Universal Links Cache
iOS aggressively caches universal link associations, which explains why links only work once after reinstall. Reset the cache with these steps:
- For simulators:
xcrun simctl openurl booted "about:blank" xcrun simctl privacy booted reset all - For physical devices: Go to Settings > General > Transfer or Reset iPhone > Reset > Reset Location & Privacy (this won't delete your app data)
You can also regenerate the Dynamic Links configuration file in Firebase Console and reimport it into your Xcode project to ensure fresh association data.
Step 4: Validate Your Linking Event Listeners
Make sure your code is correctly listening for both Firebase and React Native Linking events. Here's a robust example:
import React, { Component } from 'react'; import { Linking } from 'react-native'; import firebase from 'react-native-firebase'; class App extends Component { componentDidMount() { // Listen for Firebase Dynamic Links this.firebaseLinkListener = firebase.links().onLink((url) => { this.handleDeepLink(url); }); // Listen for React Native Linking events this.linkingListener = Linking.addEventListener('url', ({ url }) => { this.handleDeepLink(url); }); // Check for initial link on app launch Linking.getInitialURL().then(url => { if (url) this.handleDeepLink(url); }); } componentWillUnmount() { // Clean up listeners this.firebaseLinkListener(); this.linkingListener.remove(); } handleDeepLink = (url) => { console.log('Received deep link:', url); // Add your navigation/processing logic here } // ... rest of your component }
Additional Checks to Rule Out Edge Cases
- Verify your Xcode project's Associated Domains includes
applinks:XXX.page.link(replace XXX with your actual domain) - Double-check Firebase Console's Dynamic Links settings to ensure your Bundle ID and Team ID match exactly what's in Xcode
- Use Apple's official App Search Validation Tool to confirm your universal links are properly configured
内容的提问来源于stack exchange,提问作者Matthias Samsel

