我一直在尝试将 AppCheck 与我的 Android 应用程序集成,但我似乎无法发出有效的请求。
至于测试目的,我一直在使用以下代码:
安卓代码
class Application : MultiDexApplication() {
override fun onCreate() {
FirebaseApp.initializeApp(this)
val appCheck = FirebaseAppCheck.getInstance()
if (BuildConfig.DEBUG) appCheck.installAppCheckProviderFactory(DebugAppCheckProviderFactory.getInstance(), true)
else appCheck.installAppCheckProviderFactory(SafetyNetAppCheckProviderFactory.getInstance(), true)
super.onCreate()
}
}
class TestActivity : Activity() {
override fun onCreate(savedInstanceState: Bundle?) {
val data = "This is a test!"
Firebase.functions.getHttpsCallable("test").call(data).addOnCompleteListener {
if (it.isSuccessful) {
val result = it.result.data
print(result)
}
else {
val exception = it.exception
print(exception)
}
}
}
}
功能码
const functions = require("firebase-functions")
exports.test = functions.https.onCall((data, context) => {
if (context.app == undefined) {
functions.logger.error("Test - Failed validating device integrity!")
throw new functions.https.HttpsError("failed-precondition", "The function must be called from an App Check verified app")
}
return data
})
我已将DebugAppCheckProviderFactory令牌添加到 Firebase 控制台,但无论我做什么,如果它是模拟器或物理设备,当我调用该函数时,总是会抛出失败的前置条件异常。
检查功能日志,我可以看到该应用程序丢失:
我已经多次阅读文档,并且似乎没有遗漏任何步骤。我是否遗漏了什么,或者我能做些什么来找到这个的根本原因?
感谢您的时间!
编辑:
至于 Martin 的建议,我创建了一个新的OnRequest函数并添加了X-Firebase-AppCheck标头。我正确收到了令牌,并且能够通过以下方式成功验证它:
firebaseAdmin.appCheck().verifyToken(appCheckToken)
所以,我的猜测是,Android 并没有像它应该的那样将X-Firebase-AppCheck自动添加到OnCall函数中。
我运行代码并通过代码设置了一些断点,并注意到以下内容。Firebase的调用方法是添加Firebase-Instance-ID-Token但我似乎无法在任何地方找到X-Firebase-AppCheck标头。也许我不应该看到这个值,或者我只是找不到它被添加的位置。或者它可能根本没有添加,因此我根本无法验证我的context.app。