Firebase突然无法发送验证/密码重置邮件 提示设备异常流量拦截
问题原因
你遇到的核心拦截触发标识就是报错提示 "we have stopped all traffic from this device due to unsual activity",这是Firebase内置的反滥用风控机制生效,和你写的基础业务逻辑无关,常见触发原因有三类:
- 短时间内请求频率过高:测试阶段反复点击重发验证按钮、批量注册测试账号、短时间多次触发密码重置请求,撞了Firebase Auth的默认限流规则:单IP/单设备每小时发信请求超过阈值、单邮箱短时间收信次数超限,都会被直接标记为异常流量,拦截所有相关请求
- App Check未正确配置:如果你的项目开启了App Check强制校验,但客户端没集成对应SDK、调试环境没配置合法调试令牌,所有从该设备发出的Auth请求都会被判定为非法来源直接拦截
- 项目级发信权限临时受限:如果近期有用户把Firebase发出的验证/重置邮件标记为垃圾邮件,Firebase会临时限制项目的默认发信通道权限,导致所有邮件都发不出去
另外你贴的密码重置代码里有个小bug:两个Toast都没调用.show()方法,就算请求成功/失败你也看不到提示,但这不是邮件发不出去的核心原因。
修复步骤
按优先级依次操作:
- 先解除临时风控封禁
切换当前设备的网络(比如从WiFi切到手机热点更换出口IP),清除应用缓存/数据后重新打开,两次发信请求的间隔至少控制在60秒以上,不要连续点击按钮。临时设备/IP封禁一般会在24小时内自动解除,反复触发请求只会延长封禁时长。 - 正确配置App Check
进入Firebase控制台的App Check栏目,给你的安卓应用配置对应校验规则:- 调试/开发环境:生成专属调试令牌,配置到本地开发环境的客户端代码中,测试时的请求就会被判定为合法来源
- 生产环境:接入Play Integrity校验提供者,上线后所有正版应用发出的请求都会自动通过校验
配置完成后就不会再出现异常流量拦截的报错。
- 校验项目发信配置
进入Firebase控制台的Authentication -> Templates页面,选择任意邮件模板发送测试邮件到你的邮箱,如果测试邮件也收不到,说明是项目发信通道被限制,检查项目绑定的管理员邮箱有没有收到Firebase的发信限制通知,等限制自动解除即可,也可以配置自定义发件域名提升发信稳定性。 - 修复代码问题并加防抖
首先补上密码重置逻辑里缺失的.show()调用,修正后的代码如下:
另外给重发验证邮件的按钮加60秒防抖:点击触发请求后立刻把按钮置灰、显示倒计时,倒计时结束后再允许点击,从根源上避免用户连续点击触发限流。auth.sendPasswordResetEmail(email.getText().toString()).addOnSuccessListener(new OnSuccessListener<Void>() { @Override public void onSuccess(Void unused) { Toast.makeText(LoginActivity.this, "Reset email sent", Toast.LENGTH_SHORT).show(); } }).addOnFailureListener(new OnFailureListener() { @Override public void onFailure(@NonNull Exception e) { Toast.makeText(LoginActivity.this, e.getMessage(), Toast.LENGTH_SHORT).show(); } });
注意事项
- Firebase Auth默认发信限额:单IP每小时最多发送100封验证类邮件,单邮箱地址每小时最多接收5封同类型邮件,测试阶段不要反复触发请求
- 尽量不要用安卓模拟器做大量注册、发信测试,模拟器的设备特征极易被Firebase风控标记为异常设备,导致整个模拟器环境的请求都被拦截
内容的提问来源于stack exchange,提问作者Yassine
相关产品推荐
相关产品推荐

