Flutter应用Android模拟器调试Firebase AppCheck请求全未验证如何解决
问题原因
你的DebugAppCheckProvider没有被正确加载,AppCheck仍然在尝试使用SafetyNet提供商发起校验,所以才会出现exchangeSafetyNetToken的403请求,这个问题和模拟器本身无关,调试模式下完全可以完成AppCheck校验。
修复步骤
- 修正MainActivity.kt的onCreate执行顺序,必须先调用
super.onCreate再安装AppCheck提供商,否则Flutter初始化逻辑会覆盖你提前设置的提供商配置,修改后代码如下:
import io.flutter.embedding.android.FlutterActivity import android.os.Bundle import android.util.Log import com.google.firebase.FirebaseApp import com.google.firebase.appcheck.FirebaseAppCheck import com.google.firebase.appcheck.debug.DebugAppCheckProviderFactory class MainActivity: FlutterActivity() { // For Debug Only. Do not do this for Production override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) // 移到方法最开头 FirebaseApp.initializeApp(this) Log.e("MainActivity", "onCreate") val firebaseAppCheck = FirebaseAppCheck.getInstance() firebaseAppCheck.installAppCheckProviderFactory(DebugAppCheckProviderFactory.getInstance()) } }
- 修正Flutter侧的AppCheck激活配置,显式指定安卓端使用debug提供商,避免插件默认使用SafetyNet/Play Integrity提供商:
// Initialize AppCheck await FirebaseAppCheck.instance.activate( // 调试环境下指定debug提供商,生产环境替换为对应的正式提供商即可 androidProvider: AndroidAppCheckProvider.debug, );
- 卸载模拟器上的现有应用后重新安装运行,获取logcat中新输出的调试令牌,确认已经添加到Firebase控制台对应安卓应用的调试令牌白名单中。
- 确认你测试访问的是正确Firebase项目的Realtime Database,不存在项目配置串扰的问题。
完成以上配置后再发起数据库请求,AppCheck就会使用调试模式完成校验,控制台会显示验证通过的请求,不需要切换到真机发布模式。
内容的提问来源于stack exchange,提问作者acsc001
相关产品推荐
相关产品推荐

