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

Expo托管工作流中Firebase Dynamic Links在iOS无法跳转深层链接

Expo Managed Workflow中Firebase动态链接iOS无法跳转深层链接的解决方案

1. 补充导航链接前缀配置

你的AppNavigation.js里的prefixes仅包含myapp.web.app域名,但Firebase动态链接使用的是myapp.page.link域名,iOS通过动态链接打开应用时,传递的初始链接属于该域名,必须将其加入前缀列表:

const linking = {
  prefixes: [
    prefix,
    'https://myapp.web.app',
    'https://*.myapp.web.app',
    'https://myapp.page.link', // 新增Firebase动态链接域名
    'https://*.myapp.page.link' // 新增通配符域名
  ],
  // 需配置路径解析规则,确保深层链接能映射到对应页面
  config: {
    screens: {
      // 示例:若深层链接为 /detail/:id,对应导航内的Detail页面
      Detail: 'detail/:id',
      // 根据你的页面结构补充其他映射规则
    }
  }
};

2. 检查Firebase动态链接域名的AASA配置

你目前仅在myapp.web.app部署了AASA文件,但myapp.page.link域名也需正确配置Universal Links:

  • 登录Firebase控制台,进入「动态链接」设置页,确认已关联你的iOS应用(Bundle ID和App Store ID需与配置一致)
  • 直接访问https://myapp.page.link/apple-app-site-association,检查返回的文件是否包含你的App ID:
{
  "applinks": {
    "apps": [],
    "details": [
      {
        "appID": "1234567890.com.my.app",
        "paths": ["*"]
      }
    ]
  }
}

若返回内容不符,需在Firebase控制台重新配置iOS应用关联。

3. 完善动态链接生成Payload

修正Payload中的字符串格式问题,并添加iosDeepLink明确指定iOS端跳转链接:

const payload = {
  dynamicLinkInfo: {
    domainUriPrefix: 'https://myapp.page.link',
    link: `https://myapp.web.app/${deepLink}`,
    androidInfo: {
      androidPackageName: 'com.my.app', // 补充字符串引号
    },
    iosInfo: {
      iosBundleId: 'com.my.app', // 补充字符串引号
      iosAppStoreId: '1234567890',
      iosDeepLink: `https://myapp.web.app/${deepLink}` // 明确指定iOS深层链接
    },
  }
};

4. 验证Universal Links有效性

  • 在iOS设备的Safari中打开动态链接,长按链接查看是否有「在[你的应用]中打开」选项,若无则说明Universal Links未生效
  • 确认app.config.js中的associatedDomains无拼写错误,修改后需重新执行EAS构建(该配置变更需重新打包生效)

5. 处理冷启动/后台启动的链接解析

在App组件中监听链接变化,确保冷启动和后台唤醒时都能正确解析深层链接:

import { Linking } from 'expo';
import { useNavigation } from '@react-navigation/native';

export default function App() {
  const navigation = useNavigation();

  useEffect(() => {
    // 处理冷启动时的初始链接
    Linking.getInitialURL().then(url => url && handleDeepLink(url));

    // 处理后台唤醒时的链接
    const subscription = Linking.addEventListener('url', ({ url }) => handleDeepLink(url));

    return () => subscription.remove();
  }, []);

  const handleDeepLink = (url) => {
    const path = new URL(url).pathname;
    // 根据路径映射导航到对应页面,示例:
    if (path.startsWith('/detail/')) {
      const id = path.split('/')[2];
      navigation.navigate('Detail', { id });
    }
  };

  // ... 其他组件代码
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 03:20:35