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

Unity中Steamworks.net调用GetAuthTicketForWebApi无回调问题

Unity中Steamworks.net调用GetAuthTicketForWebApi无回调问题排查

问题描述

我想在Unity游戏客户端通过Steamworks.net调用SteamUser.GetAuthTicketForWebApi完成身份验证,对接我的Node.js服务器,但这个函数始终无法触发回调——代码里的Debug.Log("callback")完全没输出。其他Steam相关函数比如SteamUser.GetSteamID()、SteamFriends.GetPersonaName()都能正常工作,唯独这个函数不行。

我已经在新项目里做了以下操作,有没有遗漏的步骤?

  • 创建新项目
  • 在包管理器中添加Authentication包
  • 在Authentication项目设置中配置App Id和Key
  • 在包管理器中添加steamworks.net
  • 在steam_appid.txt中配置我的应用ID
  • 在场景中添加挂载SteamManager.cs的游戏对象
  • 添加挂载以下代码的游戏对象:
using Steamworks;
using System;
using System.Collections;
using System.Collections.Generic;
using Unity.Services.Authentication;
using Unity.Services.Core;
using UnityEngine;

public class SteamUtility : MonoBehaviour
{
    Callback<GetTicketForWebApiResponse_t> m_AuthTicketForWebApiResponseCallback;
    string m_SessionTicket;
    string identity = "unityauthenticationservice";

    private void Start()
    {
        SignInWithSteam();
    }

    void SignInWithSteam()
    {
        // It's not necessary to add event handlers if they are 
        // already hooked up.
        // Callback.Create return value must be assigned to a 
        // member variable to prevent the GC from cleaning it up.
        // Create the callback to receive events when the session ticket
        // is ready to use in the web API.
        // See GetAuthSessionTicket document for details.
        m_AuthTicketForWebApiResponseCallback = Callback<GetTicketForWebApiResponse_t>.Create(OnAuthCallback);
        
        SteamUser.GetAuthTicketForWebApi(identity);
        Debug.Log("login");
    }

    void OnAuthCallback(GetTicketForWebApiResponse_t callback)
    {
        Debug.Log("callback");
        m_SessionTicket = BitConverter.ToString(callback.m_rgubTicket).Replace("-", string.Empty);
        m_AuthTicketForWebApiResponseCallback.Dispose();
        m_AuthTicketForWebApiResponseCallback = null;
        Debug.Log("Steam Login success. Session Ticket: " + m_SessionTicket);
        // Call Unity Authentication SDK to sign in or link with Steam, displayed in the following examples, using the same identity string and the m_SessionTicket.
    }
}

可能遗漏的排查点&解决办法

  1. 版本兼容性检查
    不同版本的Steamworks.net和Unity Authentication包可能存在适配冲突,建议使用Steamworks.net的稳定LTS版本,同时将Unity Authentication包更新到最新兼容版本,避免版本不匹配导致回调注册失败。

  2. 身份标识(identity)验证
    代码中使用的identity = "unityauthenticationservice"是自定义标识,需确保它不为空且无特殊字符。可以先换成简单字符串(比如"my_server")测试,排除标识格式问题。

  3. Steam回调核心机制检查
    Steam所有异步回调都依赖SteamAPI.RunCallbacks()的执行,检查SteamManager.cs的Update方法是否正确调用了这个方法——如果没执行,所有回调都不会触发。

  4. Steam后台权限配置
    登录Steam开发者后台:

    • 确认应用已启用Web API访问权限,且配置了正确的API密钥;
    • 确保测试账号已添加到应用的测试账号列表中,非测试账号无法获取AuthTicket。
  5. 回调对象防GC回收确认
    虽然代码中已将回调对象赋值给成员变量,但可以尝试在Awake方法中提前初始化回调,避免Start方法中创建时可能出现的回收问题:

    private void Awake()
    {
        m_AuthTicketForWebApiResponseCallback = Callback<GetTicketForWebApiResponse_t>.Create(OnAuthCallback);
    }
    
  6. 添加错误日志排查
    修改代码,增加错误检查:

    • 调用GetAuthTicketForWebApi后立即验证返回的句柄:
      HAuthTicket ticketHandle = SteamUser.GetAuthTicketForWebApi(identity);
      Debug.Log($"Ticket Handle: {ticketHandle}");
      if (ticketHandle == HAuthTicket.Invalid)
      {
          Debug.LogError("获取Auth Ticket句柄失败!");
      }
      
    • 在回调中检查返回结果:
      void OnAuthCallback(GetTicketForWebApiResponse_t callback)
      {
          Debug.Log("callback triggered");
          if (callback.m_eResult != EResult.k_EResultOK)
          {
              Debug.LogError($"Steam Auth错误: {callback.m_eResult}");
              return;
          }
          // 后续逻辑
      }
      
  7. 测试环境验证

    • 必须在Steam客户端登录测试账号,且Steam处于在线状态(不能离线);
    • steam_appid.txt需放在Unity项目根目录(与Assets文件夹同级);
    • 尝试构建独立包测试,编辑器环境下可能存在Steamworks.net兼容性问题。
  8. Unity Services初始化
    如果后续要使用Unity Authentication的Steam登录功能,需先初始化Unity Services,可修改Start方法:

    private async void Start()
    {
        await UnityServices.InitializeAsync();
        SignInWithSteam();
    }
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.04 22:50:41