无法使用应用程序检查为Firebase Storage生成调试令牌



我想在我的Android Flutter应用程序中包括Firebase应用程序检查Firebase存储。因此,我遵循官方文件:https://firebase.flutter.dev/docs/app-check/usage.

这是我的Kotlin主要活动:

import android.os.Bundle
import com.google.firebase.FirebaseApp
import com.google.firebase.appcheck.FirebaseAppCheck
import com.google.firebase.appcheck.debug.DebugAppCheckProviderFactory
import io.flutter.embedding.android.FlutterActivity

class MainActivity : FlutterActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
FirebaseApp.initializeApp(/*context=*/ this);
val firebaseAppCheck = FirebaseAppCheck.getInstance()
firebaseAppCheck.installAppCheckProviderFactory(
DebugAppCheckProviderFactory.getInstance())
super.onCreate(savedInstanceState)
}
}

这是我的main((:

void main() async {
WidgetsFlutterBinding.ensureInitialized();
await Firebase.initializeApp();
await FirebaseAppCheck.instance.activate();
runApp(MyApp());
}

我还将此添加到我的应用程序/build.gradle 中

dependencies {
implementation 'com.google.firebase:firebase-appcheck-debug:16.0.0-beta01'
}

当我请求firebase存储时,我希望在我的控制台中出现这样的东西:

D DebugAppCheckProvider:在允许列表中输入此调试机密在项目的Firebase控制台中:123a4567-b89c-12d3-e456-789012345678

相反,我得到了一个错误:

获取应用程序检查令牌时出错;而是使用占位符令牌。错误:com.google.firebase.FirebaseException:API返回错误。代码:403 body:来自此Android客户端应用程序的请求被阻止。

我错过了什么吗?我使用的是一个真正的安卓设备,带有flutter调试版本。

再次尝试下载您的google-services.json。

如果这没有帮助,可能需要添加/重新添加您的debug key's SHA-1 certificate,然后获取新的google-services.json

显然,firebase是blocked意味着您的API密钥配置不正确。

如果你得到这个错误:

Error: com.google.firebase.FirebaseException: Error returned from API. code: 403 body: App attestation failed. 

请在Project Settings > App Check中查看您的SafetyNet提供商。您需要提供应用程序签名证书的SHA-256指纹。(也建议增加代币的实时性(

[可能的解决方案]对于像我这样刚到Koltin寻找解决方案的人来说,当你运行flutter项目时,日志不会出现在Run选项卡上,你需要打开android studio的Log Cat并键入AppCheck来获取日志。此外,请确保遵循为kotlin安装Appcheck的文档。

*注意:我使用的是模拟器。*注意,如果您找不到标签Log Cat,请访问Enable Log Cat Flutter

查看它应该如何看起来像

我在一个Android应用程序的项目中遇到了完全相同的问题。我找到了解决方案,我相信这也是一个适用于flutter应用程序的解决方案。

如果已正确完成所有步骤以设置应用程序检查,则在调试模式下安装应用程序。

在应用程序的日志中,您将找到秘密调试密钥。您应该在调试令牌管理器的"应用程序检查"选项卡中的firebase项目中输入此密钥。

注意只要您在应用程序检查设置中进行了设置,此密钥就一直有效。

你得等几分钟。

现在,在您的项目中,您应该删除生成调试密钥的代码,并将其替换为普通代码。

删除此

firebaseAppCheck.installAppCheckProviderFactory(
DebugAppCheckProviderFactory.getInstance()
)

添加此

firebaseAppCheck.installAppCheckProviderFactory(
PlayIntegrityAppCheckProviderFactory.getInstance()
)

现在一切都应该正常了!

问题很简单!如果保留生成新密钥的代码,则会生成一个新密钥,从而使前一个密钥无效。

我希望我能帮上忙!

脚注

我花了两天两夜的时间来寻找解决方案,有一次我认为我是愚蠢的

您必须在主活动onCreate完成之前初始化DebugAppCheckProviderFactory。这对我有用。

class MainActivity : FlutterActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
FirebaseApp.initializeApp(/*context=*/ this);
val firebaseAppCheck = FirebaseAppCheck.getInstance()
firebaseAppCheck.installAppCheckProviderFactory(
DebugAppCheckProviderFactory.getInstance())
super.onCreate(savedInstanceState)
}
}

请注意,此代码应仅处于调试模式。您可能希望将其从发布版本中排除。