Flutter集成Firebase邮箱链接认证点击链接无法正常唤起App
问题根因
核心错误出在ActionCodeSettings的url参数配置:该字段要求传入已在Firebase控制台完成校验的动态链接域名下的地址,你当前填入的https://example.com/auth/widget不属于你配置的动态链接域to.example.com,Firebase生成认证邮件链接时无法正确绑定应用唤起规则,直接导致双端跳转异常。
修复步骤
- 修正ActionCodeSettings配置
将url字段替换为自有动态链接域名下的地址,必须和控制台配置的动态链接域名完全匹配,不能使用未做动态链接关联的普通域名。修正后的代码如下:
var acs = ActionCodeSettings( url: 'https://to.example.com/auth/widget', androidPackageName: 'com.example', iOSBundleId: 'com.example', handleCodeInApp: true, androidInstallApp: true, androidMinimumVersion: '12', );
重新调用sendSignInLinkToEmail后,新发出的认证邮件内链接的continueUrl字段会自动替换为你填入的动态链接地址,这是配置生效的核心判断标志。
补全iOS端关联配置校验
打开Xcode,在项目Signing & Capabilities页的Associated Domains项中,添加规则applinks:to.example.com。如果之前修改过Firebase侧的动态链接配置,直接卸载重装App即可拉取最新的AASA关联文件,避免系统缓存旧规则导致跳转Safari。补全链接解析与认证逻辑
现有监听代码仅打印动态链接对象,未提取内层Firebase认证链接,即使成功唤起App也无法完成登录流程。需要在监听回调中提取深层链接,校验是否为邮箱认证链接后再调用登录方法,参考代码如下:
// 发认证邮件时需要本地缓存用户输入的邮箱,供后续登录使用 String? cachedUserEmail = emailAuth; FirebaseDynamicLinks.instance.onLink.listen((dynamicLinkData) { final Uri? deepLink = dynamicLinkData.link; if (deepLink != null && FirebaseAuth.instance.isSignInWithEmailLink(deepLink.toString())) { try { final UserCredential userCred = await FirebaseAuth.instance.signInWithEmailLink( email: cachedUserEmail!, emailLink: deepLink.toString(), ); // 此处编写登录成功后的业务跳转逻辑 } catch (e) { // 此处编写认证失败的错误提示逻辑 } } }).onError((error) { print('动态链接监听异常: $error'); });
- Android端配置校验
确认AndroidManifest.xml中MainActivity的intent-filter已经添加了to.example.com的applinks规则,和你之前测试可正常唤起App的动态链接配置保持一致即可。如果改完配置后仍出现加载后无响应的问题,清空系统对该链接的默认打开方式缓存,重新点击链接即可。
效果验证
配置生效后点击认证邮件链接:
- iOS端不会跳转浏览器,直接唤起目标App
- Android端不会停留在加载动画页,直接唤起App并触发认证流程
内容的提问来源于stack exchange,提问作者hansaplast
相关产品推荐
相关产品推荐

