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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 23:15:50