Unity桌面端调用Google Drive API出现400 redirect_uri_mismatch错误求助
解决方法
1. 固定Unity侧重定向URI端口
你遇到的随机端口问题是因为UnityGoogleDrive包桌面端OAuth默认采用动态环回端口配置,修改方法如下:
- 打开Unity编辑器,进入
Edit > Project Settings > UnityGoogleDrive配置界面 - 找到Loopback Port配置项,将默认值
0(代表随机分配端口)修改为你指定的固定端口,比如54201 - 修改后,Unity侧的重定向URI会固定为
http://localhost:你设置的端口号,注意末尾不要加斜杠
2. 调整Google Cloud凭证配置
你可以选择两种适配方案,二选一即可:
方案A(推荐):使用桌面应用类型凭证
Google官方针对桌面端应用的OAuth流不需要手动配置重定向URI,操作如下:
- 进入Google Cloud控制台「API和服务 > 凭证」页面
- 点击「创建凭证 > OAuth客户端ID」,应用类型选择「桌面应用」,填写自定义名称后创建
- 下载新生成的JSON凭证文件,替换Unity项目中原来的旧凭证文件即可
方案B:沿用现有Web应用类型凭证
如果你不想重建凭证,直接在现有凭证的「授权重定向URI」列表中,添加你刚才固定的完整重定向地址,比如http://localhost:54201,必须完全匹配,不能多斜杠或者错端口。
3. 代码优化(可选)
你当前的代码重复发起了两次上传请求,属于冗余逻辑,可以修改为如下内容:
using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityGoogleDrive; using System.IO; public class UploadGoogle : MonoBehaviour { public string UploadFilePath; private GoogleDriveFiles.CreateRequest request; private string result; public void OnButtonClick() { UploadFilePath = string.Format("{0}/Snapshots/snap.jpg", Application.dataPath); var content = File.ReadAllBytes(UploadFilePath); var file = new UnityGoogleDrive.Data.File { Name = "Image.jpg", Content = content }; request = GoogleDriveFiles.Create(file); request.Fields = new List<string> { "id", "name", "size", "createdTime" }; request.Send().OnDone += PrintResult; } private void PrintResult(UnityGoogleDrive.Data.File file) { result = string.Format("Name: {0} Size: {1:0.00}MB Created: {2:dd.MM.yyyy HH:MM:ss}\nID: {3}", file.Name, file.Size * .000001f, file.CreatedTime, file.Id); } }
如果需要上传的文件对所有人可见,你可以在上传完成后追加修改文件权限的请求,将文件设置为公开可访问。
内容的提问来源于stack exchange,提问作者Zaa
相关产品推荐
相关产品推荐

