我有一个 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 Integrity 和 SafetyNet,并且我添加了 SHA-252,这是通过以下命令使用 Gradle 的签名报告获得的:
gradlew signingReport
我在这里做错了什么?
您将需要获取应用程序使用的所有签名密钥的 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。视频其余部分涉及数字资产链接,可以忽略。
只需添加应用程序包中的所有密钥即可。
例如,在 Play 商店上传应用程序包时,将涉及 3 个不同的 SHA-256 密钥,它们是