You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Unity中Firebase次级实例调用GetAppCheckTokenAsync报空字符串解析错误

Firebase AppCheck次级实例获取令牌抛出"Cannot parse null string"异常排查

环境信息

  • 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的配置,导致次级实例无法找到匹配的参数。

遗漏步骤及修复方案

  1. 为次级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);
    
  2. 验证次级App的配置文件完整性
    确保次级项目的google-services.json已正确导入Unity项目,且_appOptionsStagingAndroid初始化时完整读取了文件中的所有字段(尤其是client.api_key.current_key、client.oauth_client.client_id等与Play Integrity相关的配置)。

  3. 检查Firebase控制台次级项目配置

    • 确认次级项目已启用Play Integrity作为AppCheck提供者
    • 配置的SHA-1指纹与当前Unity构建的应用一致
    • 项目的API密钥已启用Play Integrity API权限

内容的提问来源于stack exchange,提问作者Basa102

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.20 02:23:11