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

Unity 2022.3.11调用Firebase云函数遇FunctionsException: INTERNAL错误

问题分析与解决

核心错误原因

你遇到的FunctionsException: INTERNAL本质是云函数错误混用了onCall和onRequest模式:

  • Firebase的onCall是专为客户端SDK(比如Unity)设计的Callable函数,自带请求解析、身份验证处理和标准化响应格式,完全不需要依赖Express框架构建路由。
  • 你当前把Express的app作为onCall的参数,完全不符合onCall的要求,直接打乱了请求处理流程,触发内部错误。

另外还有两处细节错误:

  1. onCall的函数参数不是Express的req对象,而是包含data(客户端传入参数)和auth(用户身份信息)的结构体,req.data.idToken写法完全错误。
  2. 错误捕获时直接拼接error + 'xxx'会丢失错误的详细堆栈信息,不利于后续排查。

修正后的云函数代码

import functions from 'firebase-functions';
import admin from 'firebase-admin';

// 全局初始化Admin SDK(若项目未初始化过)
admin.initializeApp();

const functions_address = functions.region('asia-northeast1');

// 正确的onCall函数写法
export const createSessionCookie = functions_address.https.onCall(async (data, context) => {
    // 从客户端传入的data中获取idToken
    const idToken = data.idToken;
    const expiresIn = 60 * 5 * 1000; 

    try {
        const sessionCookie = await admin.auth().createSessionCookie(idToken, { expiresIn });
        // 返回标准化响应,Unity客户端可直接解析
        return { sessionCookie };
    } catch (error) {
        // 抛出Firebase标准化错误,客户端能捕获对应错误类型与详情
        throw new functions.https.HttpsError('internal', '生成SessionCookie失败', error);
    }
});

Unity端代码优化提示

你的Unity代码中await嵌套ContinueWith的写法可以简化,避免回调嵌套:

// Firebase初始化简化写法
var dependencyStatus = await FirebaseApp.CheckAndFixDependenciesAsync();
if (dependencyStatus == DependencyStatus.Available)
{
    auth = FirebaseAuth.DefaultInstance;
    reference = FirebaseDatabase.DefaultInstance.RootReference;
    func = FirebaseFunctions.GetInstance(FirebaseApp.DefaultInstance, "asia-northeast1");
}
else
{
    Debug.LogError($"Firebase依赖错误: {dependencyStatus}");
}

// 云函数调用简化写法
try
{
    var callable = func.GetHttpsCallable("createSessionCookie");
    // 注意传入匿名对象匹配云函数接收的data结构
    var result = await callable.CallAsync(new { idToken = idToken });
    return result.Data.ToString();
}
catch (FunctionsException ex)
{
    Debug.LogError($"云函数调用失败: {ex.Message}");
    return "";
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.08 03:50:20