Flutter Firebase邮箱链接登录失效:仅获取到短动态链接
问题
我在Flutter项目中添加Email Link认证功能,发送邮件的代码如下:
Future signInWithEmailandLink(userEmail) async{ var _userEmail= userEmail; return await _auth.sendSignInLinkToEmail( email: _userEmail, actionCodeSettings: ActionCodeSettings( url: "https://mydomain.page.link/authentication", handleCodeInApp: true, androidPackageName:"com.abc.def", androidMinimumVersion: "1", ) ).then((value){ print("email sent"); }); }
处理动态链接的代码如下:
void _handleLink() async { // Check if you received the link via `getInitialLink` first final PendingDynamicLinkData? initialLink = await FirebaseDynamicLinks.instance.getInitialLink(); if (initialLink != null) { final Uri deepLink = initialLink.link; // Example of using the dynamic link to push the user to a different screen _handleSignInLink(initialLink); print("DeepLink received! $deepLink"); } FirebaseDynamicLinks.instance.onLink.listen( (pendingDynamicLinkData) { // Set up the `onLink` event listener next as it may be received here if (pendingDynamicLinkData != null) { final Uri deepLink = pendingDynamicLinkData.link; // Example of using the dynamic link to push the user to a different screen _handleSignInLink(pendingDynamicLinkData); print("DeepLink received! $deepLink"); } }, ); }
邮件发送功能正常,但调用FirebaseAuth.instance.isSignInWithEmailLink(emailLink)始终返回false,因为获取到的emailLink(深度链接)仅为https://mydomain.page.link。手动复制邮件中的完整链接到代码中可正常登录,但无法在Flutter应用内获取完整链接,请问遗漏了什么配置或步骤?
解决方案
检查Firebase动态链接域名配置
确保Firebase控制台中配置的动态链接域名mydomain.page.link已正确关联项目,且转发规则未遗漏路径或参数,保证短链接能解析到带认证参数的完整长链接。完善ActionCodeSettings配置
在ActionCodeSettings的url参数后添加占位参数,比如https://mydomain.page.link/authentication?email={email},让Firebase自动填充认证相关参数,避免参数丢失。验证动态链接解析逻辑
在_handleSignInLink方法中,确认提取的是pendingDynamicLinkData.link的完整URI,而非仅域名。打印pendingDynamicLinkData完整内容,检查是否所有参数都被正确接收,排除代码截断参数的可能。检查平台深层链接配置
- Android:确认
AndroidManifest.xml中的intent-filter正确处理动态链接,android:scheme和android:host配置无误,未过滤链接参数。 - iOS:确认
Info.plist中的CFBundleURLSchemes和关联域名配置正确,保证动态链接参数能完整传递到应用内。
- Android:确认
确认动态链接参数传递规则
发送邮件时Firebase会在url基础上追加oobCode、apiKey等认证参数,需在Firebase控制台动态链接设置中确保未移除这些必要参数。
内容的提问来源于stack exchange,提问作者moritzstammel

