Android 12设备Firebase邮箱验证发送失效问题咨询
你之前查阅的App Links校验相关内容,对应的是「用户点击邮件内验证链接无法直接唤起App」的场景,和你遇到的Android 12设备上验证邮件发送异常的问题没有直接关联,按以下步骤排查修复即可:
1. 优先补全AndroidManifest必填配置(90%同类问题都是这个原因)
Android 12(API 31)起系统强制要求:所有声明了<intent-filter>的组件,必须显式指定android:exported属性,否则相关组件会被系统直接拦截无法正常注册。Firebase Auth旧版本SDK内部用于处理邮箱验证跳转的Activity默认没有适配这个规则,需要你手动在Manifest的<application>节点下补充声明:
<activity android:name="com.google.firebase.auth.internal.FederatedSignInActivity" android:exported="true" android:launchMode="singleTask" android:permission="com.google.android.c2dm.permission.SEND"> <intent-filter> <action android:name="android.intent.action.VIEW" /> <category android:name="android.intent.category.DEFAULT" /> <category android:name="android.intent.category.BROWSABLE" /> <data android:host="替换为你自己的Firebase项目ID.firebaseapp.com" android:scheme="https" /> </intent-filter> </activity>
补完之后检查你项目里其他自定义的、带intent-filter的Activity/Service/Receiver,全部按照实际业务需求补上android:exported属性:需要被外部应用唤起就设为true,仅内部使用就设为false。
如果不想手动写这段配置,直接把项目依赖的Firebase BoM升级到最新稳定版即可,新版SDK已经自带了上述适配配置。
2. 业务代码补全回调,定位具体异常
你之前调用mAuth.getCurrentUser().sendEmailVerification()的核心逻辑本身没有版本兼容问题,但建议补上完整的任务回调,先确认请求是否真的提交到Firebase后端:
mAuth.getCurrentUser().sendEmailVerification() .addOnCompleteListener(task -> { if (task.isSuccessful()) { // 走到这里代表发信请求已经被Firebase服务端接收,后续收不到邮件和客户端代码、系统版本无关 // 排查方向:Firebase控制台发信配额、邮箱垃圾邮件拦截、发信地址是否被收件服务商拉黑 } else { // 走到这里打印具体异常信息,常见触发原因: // 1. 设备Google Play服务版本过低 // 2. 应用未声明INTERNET网络权限 // 3. 短时间内发信请求过多触发频率限制 Exception e = task.getException(); Log.e("EmailVerify", "send verify email failed", e); } });
注意:sendEmailVerification()的发信动作完全由Firebase云端服务完成,不需要调起本地邮件客户端,不存在Android 12系统拦截本地邮件应用导致发信失败的情况。
3. 若需修复点击验证链接无法跳回App的问题
如果你后续要处理「用户点邮件里的链接直接打开App,不需要走浏览器中转」的需求(也就是你之前查阅的App Links场景),不需要手动编写站点关联文件,只需要做两步:
- 在Firebase控制台的邮箱验证配置页,正确填写你应用的包名、debug和release签名对应的SHA-256证书指纹
- 等待5-10分钟让Firebase自动完成域名关联校验即可
避坑提醒
- debug和release签名的SHA-256指纹不一致,两个都要加到Firebase控制台,否则对应包的App Links校验会失败
- 不要在测试时用同一个邮箱短时间内重复触发多次发信请求,Firebase默认有短时间频率限制,超限后会被临时拦截15-30分钟
- 不要手动修改Firebase自动托管的域名校验文件,否则会直接导致App Links校验失效
内容的提问来源于stack exchange,提问作者user16881253

