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

Unity 2017中AWS Cognito用户认证实现遇阻求助

Unity 2017 AWS Cognito认证:LoginUser方法触发ArgumentNullException的解决思路

我之前在Unity 2017里对接AWS Cognito用户认证时也踩过类似的坑,结合你遇到的情况,咱们来一步步排查这个ArgumentNullException的问题:

1. 先排查核心参数的空值问题

这个异常最直接的原因就是某个必填参数没有赋值就传入了LoginUser方法,你可以先做以下检查:

  • 确认调用LoginUser时传入的用户名、密码完全不为空或空白字符串
  • 检查Cognito的关键配置项:用户池ID、客户端ID、区域信息这些有没有正确初始化,有没有在代码里被误设为null
  • 建议在调用LoginUser前加日志输出,快速验证参数有效性:
    Debug.Log($"准备登录 - 用户名: {username}, 客户端ID: {clientId}, 区域: {region}");
    

2. 适配Unity 2017的SDK兼容性限制

你提到官方AWS SDK在Unity 2017有局限,第三方代码可能没做完全适配,这里要重点检查:

  • 看代码里的AmazonCognitoIdentityProviderClient初始化逻辑,有没有因为Unity 2017默认的.NET 3.5版本导致客户端实例初始化失败为null
  • 尝试手动指定RegionEndpoint,不要依赖自动识别,比如:
    var client = new AmazonCognitoIdentityProviderClient(new AnonymousAWSCredentials(), RegionEndpoint.USWest2);
    

3. 修复代码的潜在空值漏洞

仔细看LoginUser的实现,确保请求对象的所有必填属性都被正确赋值:

  • 比如InitiateAuthRequest必须明确设置AuthFlow为USER_PASSWORD_AUTH,同时AuthParameters字典里必须包含USERNAME和PASSWORD两个键值对,不能遗漏
  • 可以给LoginUser方法加前置校验,提前拦截空值:
    public async Task LoginUser(string username, string password)
    {
        if (string.IsNullOrWhiteSpace(username))
            throw new ArgumentNullException(nameof(username));
        if (string.IsNullOrWhiteSpace(password))
            throw new ArgumentNullException(nameof(password));
        if (string.IsNullOrWhiteSpace(_clientId))
            throw new InvalidOperationException("Cognito客户端ID未初始化");
    
        // 后续请求逻辑...
    }
    

4. Unity 2017的特殊配置检查

  • 确保PlayerSettings里开启了网络权限(比如Android的INTERNET权限),否则请求无法发送可能导致内部返回空值
  • 如果项目允许,尝试把Unity的.NET版本切换为.NET 4.x Equivalent(在PlayerSettings > Other Settings里),这能解决不少老版本Unity的序列化和依赖兼容问题

按照这个流程排查,应该能快速定位到哪个参数或对象为空,进而解决这个异常。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 08:36:28