React Native iOS Universal App Links模拟器正常真机无法跳转指定页面
iOS 真机 Universal Links 跳转页面失败排查步骤
1. 优先修复路径匹配不一致问题
你当前的两份配置存在路径不匹配的错误:
- React Native 端
Linking.ts中订单页对应路径为orders,匹配的链接格式为https://getdad.co.uk/orders - AASA(apple-app-site-association)配置中允许的订单页路径为
/order
两者不一致会导致系统识别到合法链接但路由无法匹配到对应页面,统一两边的路径即可解决该类问题。
2. 验证 AASA 文件部署合规性
苹果系统会在APP安装/更新时拉取域名下的AASA文件,需满足以下要求:
- 文件必须可以通过
https://getdad.co.uk/.well-known/apple-app-site-association或https://getdad.co.uk/apple-app-site-association直接访问,不允许301/302等重定向 - 接口返回头的
Content-Type必须为application/json,不能包含任何额外的HTML、JS代码或签名(iOS13及以上版本无需对AASA文件签名) - 若你是在APP安装后才更新的AASA配置,需卸载真机上的APP后重新安装,触发系统重新拉取最新的AASA规则
3. 检查Xcode项目配置
- 打开项目的
Signing & Capabilities面板,确认已添加Associated Domains能力,且配置的域名格式为applinks:getdad.co.uk,不要带http/https前缀 - 确认项目的Bundle ID、Team ID与AASA中填写的
<TEAMID>.io.feastly.dad完全一致,无拼写错误
4. 校验RN端链接接收逻辑
- 若使用React Navigation,确认你导出的
linking配置已正确传入NavigationContainer组件的linking属性 - 需同时覆盖冷启动和后台唤醒两种场景的链接处理:
冷启动场景调用Linking.getInitialURL()获取首次打开APP的链接
后台唤醒场景监听url事件获取链接,参考代码:
import { Linking } from 'react-native'; // 组件挂载时监听链接事件 useEffect(() => { const handleUrl = (event) => { console.log('接收到的链接:', event.url) // 后续路由处理逻辑 } // 处理冷启动链接 Linking.getInitialURL().then(url => url && handleUrl({ url })) // 监听后台唤醒链接 const listener = Linking.addEventListener('url', handleUrl) return () => listener.remove() }, [])
5. 真机调试定位问题
连接真机运行Xcode调试模式,点击链接时查看控制台打印的接收到的url:
- 若没有打印url,说明AASA或Xcode配置存在问题,回到前两步排查
- 若能打印正确的url,说明是RN端路由匹配规则问题,检查linking配置的screen路径与实际路由栈的screen名称是否完全一致
内容的提问来源于stack exchange,提问作者DaraJ
相关产品推荐
相关产品推荐

