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

Flutter Android:如何指定固定AppCheck Debug Token避免重装丢失?

解决方案:固定Debug Token与真机App Check调试

一、为Android指定固定Debug Token

默认的DebugAppCheckProvider确实会随机生成token,但可以通过自定义Provider实现固定token的需求,甚至支持从环境变量注入:

  1. 自定义Debug Provider
    创建继承自DebugAppCheckProvider的类,重写getToken方法返回固定值:
public class FixedDebugAppCheckProvider extends DebugAppCheckProvider {
    private static final String FIXED_DEBUG_TOKEN = "你的固定Debug Token";

    public FixedDebugAppCheckProvider(@NonNull Context context) {
        super(context);
    }

    @NonNull
    @Override
    public Task<AppCheckToken> getToken() {
        return Tasks.forResult(new AppCheckToken(FIXED_DEBUG_TOKEN, System.currentTimeMillis() + 365L * 24 * 60 * 60 * 1000));
    }
}
  1. 注册自定义Provider
    在Application类或Firebase初始化逻辑中,替换默认的DebugProvider:
FirebaseAppCheck.getInstance().installAppCheckProviderFactory(
    new AppCheckProviderFactory() {
        @NonNull
        @Override
        public AppCheckProvider createProvider(@NonNull Context context) {
            if (BuildConfig.DEBUG) {
                return new FixedDebugAppCheckProvider(context);
            } else {
                return PlayIntegrityAppCheckProvider.getInstance();
            }
        }
    }
);
  1. 通过环境变量注入Token
    如果不想硬编码,可用Gradle传递环境变量:
  • 在local.properties中添加:
    APP_CHECK_DEBUG_TOKEN=你的固定Token
    
  • 在app/build.gradle中读取并注入BuildConfig:
    android {
        defaultConfig {
            buildConfigField "String", "APP_CHECK_DEBUG_TOKEN", "\"${getLocalProperty("APP_CHECK_DEBUG_TOKEN")}\""
        }
    }
    
    def getLocalProperty(String key) {
        Properties properties = new Properties()
        properties.load(new File(rootProject.rootDir, "local.properties").newDataInputStream())
        return properties.getProperty(key, "")
    }
    
  • 之后在自定义Provider中用BuildConfig.APP_CHECK_DEBUG_TOKEN替代硬编码值即可。

二、真机调试App Check的常规方式

  1. 使用Play Integrity的调试验证
    真机Debug构建无需依赖DebugProvider:
  • 执行./gradlew signingReport获取Debug构建的SHA-256指纹
  • 在Firebase控制台的App Check设置中,找到Play Integrity提供商,将该SHA-256指纹添加到允许列表
  • 配置完成后,Debug构建的真机可直接通过Play Integrity验证,无需Debug Token
  1. DebugProvider的优化用法
    文档提及模拟器是因为其无法运行Play Integrity/SafetyNet,但真机Debug也可使用DebugProvider。另外,Firebase控制台的Debug Token列表无需删除旧token,即使设备重装生成新token,旧token仍可正常使用(除非手动删除)。

三、其他替代方案

  • 持久化Debug Token:首次生成token时,将其保存到设备的SharedPreferences或外部存储,重装时读取复用(仅在Debug模式下使用)。
  • Flutter层注入Token:通过flutter run --dart-define=APP_CHECK_DEBUG_TOKEN=xxx传递token,再在Android原生代码中读取BuildConfig.APP_CHECK_DEBUG_TOKEN使用。

内容的提问来源于stack exchange,提问作者Bob

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 19:25:19