Google表格设置——服务账号与 JSON 密钥
SheetForge 以两种模式读取 Google表格。
- ExportUrl 不需要任何凭据:通过链接共享表格、为每个标签页登记其
#gid=值,然后即可导入。它是只读的。 - SheetsApi 以 Google 服务账号 的身份进行认证,并解锁其余的一切:私有表格、写回(反映),以及推送。
本页会手把手带你走完 SheetsApi 的完整设置流程——创建服务账号、下载它的 JSON 密钥、把你的表格共享给它,以及让 SheetForge 指向这个密钥。不假设你有任何 Google Cloud 使用经验;每一步都在浏览器中完成,并且完全免费。
完整流程:
- 创建一个 Google Cloud 项目。
- 在其中启用 Google Sheets API。
- 创建一个服务账号。
- 下载该账号的 JSON 密钥。
- 把你的表格共享给该账号的邮箱地址。
- 让 SheetForge 指向这个密钥。
1. 创建一个 Google Cloud 项目
- 打开 console.cloud.google.com,并用一个 Google 账号登录——不必是拥有该表格的那个账号。个人账号总是可行;有些公司的 Google Workspace 组织会通过策略禁止下载服务账号密钥,这会导致步骤 4 出现组织策略错误(见下文"如果出现问题")。首次访问时,接受服务条款提示即可进入控制台。
- 在顶部栏中,点击项目选择器(Google Cloud 徽标旁边的下拉菜单),然后点击 New project。
- 输入任意名称(例如
sheetforge-sheets),然后点击 Create。组织和位置保持默认值即可。 - 当出现"project created"通知时,在选择器中选中这个新项目。下文的所有操作都发生在这个项目内部,因此请确保它始终处于被选中状态。
项目本质上只是 API 设置的容器。创建项目是免费的,本指南中用到的 Sheets API 用量也不产生任何费用。
2. 启用 Google Sheets API
- 打开左侧菜单(☰),进入 APIs & Services ▸ Library。
- 搜索 Google Sheets API,然后打开搜索结果。
- 点击 Enable。如果按钮显示的是 Manage,说明该 API 已经启用——无需任何操作。
3. 创建一个服务账号
服务账号是一种拥有自己邮箱地址的机器身份。SheetForge 会以这个身份登录——全程都不会涉及你的个人 Google 密码。
- 进入 APIs & Services ▸ Credentials。
- 点击 + Create credentials ▸ Service account。
- 输入一个名称(例如
sheetforge-reader);账号 ID 会自动填好。点击 Create and continue。 - "Grant this service account access to project" 和 "Grant users access" 这两个步骤都是可选的——两个都可以跳过,直接点击 Done。对你表格的访问权限是通过共享该表格(步骤 5)来授予的,而不是通过项目角色。
- 如果控制台建议你配置 OAuth 同意屏幕,忽略它即可——服务账号不需要这个。
4. 下载 JSON 密钥
- 回到 Credentials 页面,点击你刚创建的服务账号(位于"Service accounts"下方)。
- 打开 Keys 标签页。
- 点击 Add key ▸ Create new key,选择 JSON,然后点击 Create。
- 浏览器会下载一个类似
sheetforge-sheets-1a2b3c.json的文件。这是唯一的副本——Google 不会保留它以供重新下载。如果你弄丢了它,请在 Keys 标签页中删除该密钥,再创建一个新的。
请把这个文件当作密码来对待:
- 把它移动到你的 Unity 项目和代码仓库之外的位置,例如
C:/keys/sheetforge.json。 - 绝不要把它放在
Assets/下——那里的一切都会随项目一起提交,一个误留的引用(或Resources/StreamingAssets文件夹)都可能把它带进构建产物中。 - 如果这个密钥泄露了,请在 Keys 标签页中删除它(这会立即将其吊销),然后创建一个新的。
5. 把表格共享给服务账号
仅凭密钥本身不会授予任何权限。服务账号只能读取明确共享给它的表格——就像对待一个真人协作者一样。
- 用任意文本编辑器打开下载好的 JSON 文件,复制
client_email的值。它看起来类似sheetforge-reader@sheetforge-sheets.iam.gserviceaccount.com。 - 在 Google 表格中打开你的表格,点击 Share。
- 粘贴该地址,并选择一个角色:
- Viewer 对导入来说已经足够。
- 写回操作——创作反映和推送——则需要 Editor。
- 关闭"Notify people"(这个地址没有收件箱),然后确认。
- 如果 Google 提示你正在与组织外部共享,确认继续即可——服务账号不属于任何组织。
跳过这一步是最常见的设置失误——之后无论密钥多么正确,每一次请求都会因权限错误而失败。
6. 让 SheetForge 指向这个密钥
- 在你的导入设置资源中,把来源设为 GoogleSheet,访问模式设为 SheetsApi。
- 把表格 URL 中那段较长的 ID 填入
spreadsheetId:https://docs.google.com/spreadsheets/d/<this part>/edit(即上面这一段)。 - 用以下两种方式之一,告诉 SheetForge 密钥文件在哪里:
- 推荐——环境变量。 将
SHEETFORGE_SHEETS_KEY设置为该 JSON 文件的绝对路径。每位开发者各自设置自己的路径;不会有任何路径进入仓库,并且它的优先级高于设置字段。- 在 Windows 上:在终端中执行
setx SHEETFORGE_SHEETS_KEY "C:\keys\sheetforge.json",然后重启 Unity 以及 Unity Hub(已经在运行的进程会保留旧的环境变量)。 - 在 macOS/Linux 上:在你的 shell 配置文件中导出该变量,并从该 shell 启动 Unity;在 macOS 上也可以使用
launchctl setenv。
- 在 Windows 上:在终端中执行
- 或者——设置字段。 把路径填入
serviceAccountKeyPath,并指向仓库之外的位置。
- 推荐——环境变量。 将
- 在 Tools ▸ SheetForge ▸ Data Studio 中按下 ↓ Pull from source。报告成功,就说明整条链路——项目、API、账号、共享、密钥——都在正常工作。
如果出现问题
- 权限错误(
PERMISSION_DENIED/ 403): 该表格没有共享给client_email地址(步骤 5)——这个 ID 指向的是一个真实存在、但服务账号看不到的表格。 Requested entity was not found(404):spreadsheetId填错了——请精确复制表格 URL 中/d/与/edit之间的那一段。- 步骤 4 中出现"Service account key creation is disabled"或组织策略错误: 你所在的 Google Workspace 组织启用了
iam.disableServiceAccountKeyCreation策略。请管理员为这个项目放行密钥创建,或者改用个人 Google 账号创建项目——无论表格归属于谁,都可以把它共享给该项目下的服务账号。 - "Google Sheets API has not been used in project … or it is disabled": 签发该密钥的项目中并未启用这个 API(步骤 2)——请在那个项目里启用它,而不是在别的项目里。刚刚启用的 API 可能需要几分钟才能生效。
- 找不到密钥文件: 路径中有拼写错误,或者 Unity 是在环境变量设置好之前就启动的——设置好变量后,重启 Unity 和 Unity Hub。
- 密钥泄露或丢失: 在该服务账号的 Keys 标签页中删除它,创建一个新的 JSON 密钥,并替换掉旧文件。其他一切都不需要改动——邮箱地址和表格共享关系依然有效。