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

如何在Flutter应用中自动允许Firebase App Check调试令牌,无需手动更新Firebase控制台?

Flutter Firebase App Check调试令牌自动授权方案

方法一:固定调试令牌(最简便)

通过在Android/iOS配置文件中指定固定调试令牌,让应用每次调试时复用同一令牌,只需在Firebase控制台添加一次即可解决重装令牌变更的问题。

Android配置

在android/app/src/main/AndroidManifest.xml中添加meta-data:

<meta-data
    android:name="com.google.firebase.appcheck.debug_token"
    android:value="你的固定调试令牌字符串" />

iOS配置

在ios/Runner/Info.plist中添加键值对:

<key>FirebaseAppCheckDebugToken</key>
<string>你的固定调试令牌字符串</string>

完成配置后,在Firebase控制台的App Check设置里添加这个固定令牌到调试授权列表,后续重装应用都不会再变更令牌。

方法二:自动上传调试令牌到Firebase(团队自动化)

借助Firebase Admin SDK编写脚本,在应用启动时自动将当前调试令牌上传到Firebase控制台,无需手动操作。

  1. 获取Firebase服务账号密钥(JSON格式),存放在项目本地安全目录(禁止提交到版本控制)。
  2. 在Flutter项目中添加http包,用于调用Firebase Admin API。
  3. 调试模式下实现令牌获取与上传逻辑:
import 'package:flutter/foundation.dart';
import 'package:firebase_app_check/firebase_app_check.dart';
import 'package:http/http.dart' as http;
import 'dart:convert';
import 'package:root_access/root_access.dart';
import 'package:jsonwebtoken/jsonwebtoken.dart';

Future<String> generateJwt(Map<String, dynamic> serviceAccount) {
  final jwt = JWT(
    {
      'iss': serviceAccount['client_email'],
      'scope': 'https://www.googleapis.com/auth/firebase',
      'aud': 'https://www.googleapis.com/oauth2/v4/token',
      'exp': DateTime.now().add(const Duration(hours: 1)).millisecondsSinceEpoch ~/ 1000,
      'iat': DateTime.now().millisecondsSinceEpoch ~/ 1000,
    },
  );
  return jwt.sign(RSAPrivateKey(serviceAccount['private_key']));
}

Future<void> uploadDebugToken(String token, String projectId, String appId) async {
  final serviceAccountKey = json.decode(await rootBundle.loadString('assets/service-account-key.json'));
  final accessToken = await generateJwt(serviceAccountKey);

  final appCheckUrl = 'https://firebaseappcheck.googleapis.com/v1/projects/$projectId/apps/$appId/debugTokens';
  await http.post(
    Uri.parse(appCheckUrl),
    headers: {
      'Authorization': 'Bearer $accessToken',
      'Content-Type': 'application/json',
    },
    body: json.encode({
      'token': token,
      'displayName': '团队自动上传调试令牌',
    }),
  );
}

// 应用初始化时调用
void initAppCheck() async {
  if (kDebugMode) {
    await FirebaseAppCheck.instance.activate(
      androidProvider: AndroidProvider.debug,
      appleProvider: AppleProvider.debug,
    );
    final tokenResult = await FirebaseAppCheck.instance.getToken();
    if (tokenResult != null) {
      await uploadDebugToken(tokenResult.token, '你的Firebase项目ID', '你的应用ID');
    }
  }
}

注意:服务账号密钥需严格保密,仅在开发环境使用;JWT生成依赖jsonwebtoken包,需提前添加到pubspec.yaml。

方法三:使用Firebase本地模拟器(本地调试最优)

启用Firebase App Check模拟器,本地开发时直接跳过令牌验证,无需配置任何调试令牌。

import 'package:flutter/foundation.dart';
import 'package:firebase_app_check/firebase_app_check.dart';

void initAppCheck() async {
  if (kDebugMode) {
    // 启用调试提供者并连接模拟器
    FirebaseAppCheck.instance.setAppCheckProviderFactory(
      DebugAppCheckProviderFactory(debugToken: 'local-dev-token'),
    );
    await FirebaseAppCheck.instance.activate(
      androidProvider: AndroidProvider.debug,
      appleProvider: AppleProvider.debug,
    );
    // 连接到本地App Check模拟器(需先启动Firebase模拟器套件)
    FirebaseAppCheck.instance.useEmulator('localhost', 9093);
  } else {
    // 生产环境配置
    await FirebaseAppCheck.instance.activate(
      androidProvider: AndroidProvider.playIntegrity,
      appleProvider: AppleProvider.appAttest,
    );
  }
}

启动Firebase模拟器套件后,本地调试完全不受App Check令牌限制,开发效率最高。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.13 11:27:22