无法使用 App Check 为 Firebase 存储生成调试令牌

Posted

技术标签:

【中文标题】无法使用 App Check 为 Firebase 存储生成调试令牌【英文标题】:Can not generate a debug token for Firebase Storage with App Check 【发布时间】:2021-09-18 19:34:49 【问题描述】:

我想在我的 android Flutter 应用中包含 Firebase App Check for Firebase Storage。 因此我关注了官方文档:https://firebase.flutter.dev/docs/app-check/usage.

这是我的 Kotlin MainActivity:

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());

我也将此添加到我的 app/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 正文:来自此 Android 客户端应用程序的请求是 被屏蔽了。

我在这里错过了什么吗?我正在使用带有 Flutter 调试版本的真实 Android 设备。

【问题讨论】:

我也有同样的问题,请问您解决了吗? 你是怎么解决这个问题的? 我没有解决这个问题 打印出来的日志信息都没有收到……文档很差 【参考方案1】:

尝试再次下载您的 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 fingerprint。 (还建议增加令牌的存活时间)

【讨论】:

感谢您的建议。我刚刚删除并添加了我的调试和发布 SHA-1 密钥到 firebase 并再次下载了 google-services.json,但是当我想调用 https 函数时会打印相同的问题:获取应用检查令牌时出错;而是使用占位符令牌。错误:com.google.firebase.FirebaseException:从 API 返回错误。代码:403 正文:应用认证失败。 感谢您的更新 1。我已删除所有 SHA-1 密钥并将我的发布和调试密钥添加到 firebase 项目。 2. 再次下载 google-service.json 并将其添加到我的项目中。 3. 我已将 SHA-256 密钥(发布和调试)添加到 SafetyNet。 4. 为什么建议增加token live time?您建议将其增加到什么? 5.我添加了对应用程序启动的firebae可调用函数的调用,它在我的真实设备上以调试模式工作。我现在将部署到生产环境,看看它是否有效。 :) 更新:好消息是我已经设法让它在 ios 上运行,但问题仍然存在于 Android 上。有趣的是,当我连接了一个真实设备时,即使没有注册调试令牌,它也可以工作。你知道我可以尝试什么吗? [已解决] 我确实从以下命令生成了 SHA-256 密钥,cd android && ./gradlew signingReport 然后查找带有变体 Debugappsigning 并复制了 SHA-256 字符串进入firebase控制台Project setting > app check并点击安全网并将字符串粘贴到其中【参考方案2】:

您必须在主要活动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)
    

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

【讨论】:

谢谢,但这对我也不起作用。但我感觉它与我的 MainActivity.kt 文件有关。当我向 Firebase Storage 发出请求时,没有 AppCheckToken 会打印到我的控制台。所以我认为这条线 firebaseAppCheck.installAppCheckProviderFactory(DebugAppCheckProviderFactory.getInstance()) 永远不会被执行来为我生成一个新的 Debug-Token。 请确保 .MainActivityAndroidManifest.xml 声明为您的主要活动名称:` ...

以上是关于无法使用 App Check 为 Firebase 存储生成调试令牌的主要内容,如果未能解决你的问题,请参考以下文章

Firebase App Check 是不是允许编译版本的 apk 文件?

iOS 上的 Firebase 应用检查在构建时崩溃

Firebase 受众无法正常工作?

未找到模块:错误:无法解析“@firebase/app”Ionic Firebase

带有Firebase的Google App Engine-无法添加依赖项

成功的 Firebase 身份验证后 React Native App 无法导航