为什么 Firebase App Check 在应用发布时失败,但在调试模式下却失败?

问题描述 投票:0回答:2

我有一个 React-Native 应用程序,并且正在使用适用于 React-Native 的 firebase SDK。我刚刚为我的应用程序实现了应用程序检查,它在调试模式下工作正常,但在发布模式下失败。以下是

index.js
中的应用程序检查代码,应用程序初始化后会立即触发:

 try {
   firebase.appCheck().setTokenAutoRefreshEnabled(true);
   firebase.appCheck().activate('ignored', true);
   firebase.appCheck().getToken(true).then(res => {
      GLOBAL.app_check = JSON.stringify(res.token);
      console.log("app check success, appchecktoken: " + JSON.stringify(res.token));
   }).catch((error) => {
      GLOBAL.app_check = '';
      console.error("app check failed: " + error); 
      alert('App check failed: ' + JSON.stringify(error));
      return;
   });
} catch (e) {
   console.log("Failed to initialize appCheck:", e);
   logErrors('appCheck failed: ', e);
}

正如您在上面看到的,我使用警报来打印错误消息,但这里是它打印的内容:

**应用检查失败:{} **

..对象是空的。我怎样才能检查它出了什么问题?我正在使用 Play IntegritySafetyNet,并且我添加了 SHA-252,这是通过以下命令使用 Gradle 的签名报告获得的:

gradlew signingReport

我在这里做错了什么?

android firebase react-native react-native-firebase firebase-app-check
2个回答
1
投票

您将需要获取应用程序使用的所有签名密钥的 SHA-256。使用调试密钥,调用

gradlew signingReport
可以正常工作,因为它会转到默认签名密钥位置 (
~/.android/debug.keystore
),并针对此密钥库运行 java keytool,提供默认别名 (android) 和密码 (android)。

对于自行生成的发布密钥,您需要使用 java keytool,该工具通常可以在您的系统路径或 jdk 目录中找到。 如果您需要帮助设置 keytool,我会参考这个 stackoverflow 问题。 您可以使用现有的 keytool 的任何其他变体,但我会使用 jdk 附带的版本作为其普遍信任的版本。然后您想要使用 keytool 运行的命令是:

keytool -list -v -alias ${alias_of_keystore} -keystore ${location_of_keystore}

您可能希望使用您自己的值来子化别名和位置。使用默认的调试键值,该命令将如下所示:

keytool -list -v -alias android -keystore ~/.android/debug.keystore

该视频讨论了获取 SHA-256 的所有不同位置。例如,上传到 Google Play 商店后,如果您选择 Google Play 签名(我认为这是默认设置),您还需要从那里获取 SHA-256。视频其余部分涉及数字资产链接,可以忽略。


0
投票

只需添加应用程序包中的所有密钥即可。
例如,在 Play 商店上传应用程序包时,将涉及 3 个不同的 SHA-256 密钥,它们是

  1. 调试 SHA-256(通过 Gradle 从签名报告中获得)
  2. 发布SHA-256(通过Gradle从签名报告中获得)
  3. Play 商店的 SHA-256(从开发者 Play 控制台上的应用程序签名页面获取)
© www.soinside.com 2019 - 2024. All rights reserved.