Unity中Firebase次级实例调用GetAppCheckTokenAsync报空字符串解析错误
环境信息
- Unity版本:2022.3.20f1
- Firebase AppCheck版本:12.1.0
- 目标平台:Android
问题描述
已按官方文档配置Firebase次级App实例,且主、次级项目均在Firebase控制台完成AppCheck设置。但调用次级实例的appCheck.GetAppCheckTokenAsync(false)时,抛出如下异常:
One or more errors occurred. (Provider returned an Exception: System.AggregateException: One or more errors occurred. (Cannot parse null string) ---> Firebase.FirebaseException: Cannot parse null string
代码流程
FirebaseAppCheck.SetAppCheckProviderFactory(PlayIntegrityProviderFactory.Instance); FirebaseApp.Create(_appOptionsStagingAndroid, "SecondaryApp"); var instance = Firebase.FirebaseApp.GetInstance("SecondaryApp"); var appCheck = FirebaseAppCheck.GetInstance(instance); var appCheckToken = await appCheck.GetAppCheckTokenAsync(false);
完整异常堆栈
One or more errors occurred. (Provider returned an Exception: System.AggregateException: One or more errors occurred. (Cannot parse null string) ---> Firebase.FirebaseException: Cannot parse null string 08-02 15:23:05.567 31914 31984 E Unity : --- End of inner exception stack trace --- 08-02 15:23:05.567 31914 31984 E Unity : ---> (Inner Exception #0) Firebase.FirebaseException: Cannot parse null string<--- 08-02 15:23:05.567 31914 31984 E Unity : ) 08-02 15:23:05.567 31914 31984 E Unity : at Firebase.AppCheck.FirebaseAppCheck+<>c.<GetAppCheckTokenAsync>b__13_0 (System.Threading.Tasks.Task`1[TResult] task) [0x00000] in <00000000000000000000000000000000>:0 08-02 15:23:05.567 31914 31984 E Unity : at System.Threading.Tasks.ContinuationResultTaskFromResultTask`2[TAntecedentResult,TResult].InnerInvoke () [0x00000] in <00000000000000000000000000000000>:0 08-02 15:23:05.567 31914 31984 E Unity : at System.Threading.Tasks.Task.Execute () [0x00000] in <00000000000000000000000000000000>:0 08-02 15:23:05.567 31914 31984 E Unity : at System.Threading.ExecutionContext.RunInternal (System.Threading.ExecutionContext executionContext, System.Threading.ContextCallback callback, System.Object state, System.Boolean preserveSync
已排查内容
- 检查所有步骤对象空值并添加异常捕获,错误仍固定出现在
GetAppCheckTokenAsync调用处 - 使用
FirebaseAppCheck.DefaultInstance(主实例)可正常获取令牌 - 次级实例的apiKey、appId、projectId均不为空
异常含义解析
"Cannot parse null string"表示Firebase AppCheck在解析某个核心配置字符串时拿到了空值。结合次级实例的场景,本质是Play Integrity Provider所需的专属配置未正确关联到次级App实例,默认情况下Provider会复用主App的配置,导致次级实例无法找到匹配的参数。
遗漏步骤及修复方案
为次级App单独指定Play Integrity配置
初始化次级App的AppCheck实例时,需要传入专属的PlayIntegrityProviderOptions,避免复用主App参数:FirebaseAppCheck.SetAppCheckProviderFactory(PlayIntegrityProviderFactory.Instance); FirebaseApp.Create(_appOptionsStagingAndroid, "SecondaryApp"); var instance = Firebase.FirebaseApp.GetInstance("SecondaryApp"); // 为次级App创建专属的Play Integrity配置 var playIntegrityOptions = new PlayIntegrityProviderOptions(_appOptionsStagingAndroid.ApiKey); // 传入专属配置获取AppCheck实例 var appCheck = FirebaseAppCheck.GetInstance(instance, playIntegrityOptions); var appCheckToken = await appCheck.GetAppCheckTokenAsync(false);验证次级App的配置文件完整性
确保次级项目的google-services.json已正确导入Unity项目,且_appOptionsStagingAndroid初始化时完整读取了文件中的所有字段(尤其是client.api_key.current_key、client.oauth_client.client_id等与Play Integrity相关的配置)。检查Firebase控制台次级项目配置
- 确认次级项目已启用Play Integrity作为AppCheck提供者
- 配置的SHA-1指纹与当前Unity构建的应用一致
- 项目的API密钥已启用Play Integrity API权限
内容的提问来源于stack exchange,提问作者Basa102

