React Native集成AppsFlyer场景下Universal Link唤起致continueUserActivity未触发
iOS端React Native应用Universal Link回调不触发的排查路径
已知复现特征
- 点击AppsFlyer OneLink形式的Universal Link可正常唤起应用,自定义URL Scheme唤起的全链路工作完全正常
- Debug模式下
willContinueUserActivityWithType方法可正常执行到NSUserActivityTypeBrowsingWeb分支并返回YES,但后续系统不会触发application:continueUserActivity:restorationHandler回调 - Release模式下
willContinueUserActivityWithType方法完全不触发 - 已排除AppsFlyer 6.2.41版本已知问题、React Native远程调试干扰、通用配置错误的影响
落地排查步骤
- 基础配置校验
- 核对关联域名权限:确认Xcode项目Associated Domains能力中已正确写入
applinks:对应OneLink域名条目,无拼写错误、多余空格,且打包所用的mobileprovision描述文件已包含该关联域名的权限 - 校验apple-app-site-association文件:确认文件托管在OneLink域名的HTTPS根路径下,无强制跳转、MIME类型错误,文件内的路径匹配规则没有排除当前测试使用的OneLink地址
- 核对关联域名权限:确认Xcode项目Associated Domains能力中已正确写入
- 方法链路冲突排查
- 检查方法签名匹配度:确认AppDelegate中实现的
application:continueUserActivity:restorationHandler:方法的参数列表、返回值类型与iOS系统API定义完全一致,无参数漏写、类型不匹配问题 - 排查分类方法Swizzle冲突:项目中RNAppsFlyer、React Native核心模块、其他归因/路由类SDK都存在对AppDelegate方法的交换逻辑,需要逐一核对各SDK的Swizzle实现,确认交换链路没有断裂、没有出现某层实现覆盖上层逻辑时未调用原方法的问题——这类问题最常见的表现就是第一个回调能正常执行,后续链路上的方法全部收不到事件
- 断点定位链路中断点:在
willContinueUserActivityWithType方法执行结束后,通过符号断点监控全局的continueUserActivity调用栈,定位是系统中断了回调传递,还是被某个第三方库拦截了userActivity对象
- 检查方法签名匹配度:确认AppDelegate中实现的
- Release模式异常专项排查
- 清理系统缓存影响:完全卸载测试设备上的旧版本应用,重启设备后重新安装Release包测试,避免系统缓存的旧Universal Link配置干扰唤起流程
- 检查裁剪规则:确认Release构建的符号裁剪、Bitcode设置没有把AppDelegate的相关方法符号剔除
- 校验包内权限:解压Release安装包,检查embedded.mobileprovision中是否包含Associated Domains对应的权限,排除开发环境正常但发布配置权限丢失的问题
- 临时绕开验证方案
在willContinueUserActivityWithType方法返回YES后,直接在方法内部保存当前userActivity的内容,在应用完成启动流程后手动调用AppsFlyer归因模块、React Native Linking模块的对应处理方法,先验证业务链路的连通性,缩小问题排查范围
内容的提问来源于stack exchange,提问作者Tom Oakley
相关产品推荐
相关产品推荐

