ship-google-play · git:20261103.adb1155 · 2026-11-03 · sha256 f2502c173e97321c
ship-google-play git:20261103.adb1155A
Immutable. This exact content never changes and is served at /api/v1/blob/f2502c173e97321c.
---
name: ship-google-play
description: Google Play 发布:把 Unity 游戏打成签名 AAB,从注册 Play 开发者账号、创建应用、填应用内容和商品详情、封闭测试送审、凑满 12 名测试者连续 14 天,一直推进到申请正式版并提审。用户要发布、上架、提审到 Google Play;要接 Play 游戏服务(登录、成就、排行榜、云存档)、AdMob 广告、应用内评价或更新、内购;Play 审核被拒、送审被拦、测试人数不够;或者问 AdMob、Play 的钱怎么收(PIN 码、银行账户、税务信息)时使用。
---
# Google Play:从注册开发者账号推到提审
目标:先把**封闭测试**版本推到「审核中」(实测当天就能过审),再按个人账号的测试要求凑满测试者,最后把**正式版**推到「审核中」。
**先做**:确认 [ship-my-game](../ship-my-game/SKILL.md) 的第 1~4 步已完成(进度档案、渠道、体检、浏览器),没完成就先读它。本渠道的进度写在进度档案的 `## google-play` 一节。
**开工先问用户这五件事**,答案写进进度档案 `[实测:问诊清单]`:
1. 有没有 Play 开发者账号?个人还是组织?大概什么时候注册的?
2. 人在哪个国家或地区?这决定商家账号能不能收款 [官方](https://support.google.com/googleplay/android-developer/answer/9306917)。
3. 打算怎么赚钱:广告、内购、付费下载,还是不赚钱?这会影响公开哪些个人信息,以及交易者身份怎么声明。
4. 隐私政策放在哪个公开 https 网址?商店上公开的联系邮箱用哪个?
5. 有没有 AdMob 账号?建议和 Play 开发者账号用同一个 Google 账号。
**然后告诉用户三件事**:
1. **测试门槛**:2023-11-13 之后注册的个人账号,正式上线前要有至少 12 名真人测试者**连续** 14 天参加封闭测试,然后申请正式版(审核通常 7 天内)[官方](https://support.google.com/googleplay/android-developer/answer/14151465?hl=zh-Hans)。所以从封闭测试过审到正式上线,最少要两周多。
2. **会公开的信息**:
- 个人账号会公开法定全名、国家、开发者邮箱;
- 开始在 Google Play 上创收(付费应用、内购)后,会公开完整地址;
- 声明为「交易者」的个人账号还会公开电话和地址。
注册前按 [onboarding.md](references/onboarding.md) 第 1 节讲清楚。
3. **AAB 上传**:AAB 通常几十 MB,浏览器工具单次只能传 10 MB,所以首个 AAB 要用户拖进网页。之后可以走 Developer API(本仓库未实测),见 [automation.md](references/automation.md)。
## 本人事项
| 事项 | 阶段 |
|---|---|
| 注册:付 US$25、身份证件、邮箱和电话验证码、Android 实体设备验证(用 Play 管理中心移动应用扫码)、交易者身份声明 | P1 |
| 勾选同意:《开发者分发协议》;创建应用时的「开发者计划政策」「美国出口法律」声明;IARC 使用条款;PGS 和 Google Cloud 的条款(点「使用」时);《Google API 服务:用户数据政策》 | P1、P3、P6 |
| 把 AAB 拖进网页的上传框 | P4,之后每次更新(不走 API 时) |
| 「提交 N 项更改以供审核」:用户说「提交」后由你点;被权限系统拦下时由用户点 | P4、P7 |
| 创建 Google 群组时的人机验证;在 Reddit 等社区发帖、互测;用自己的账号加入测试 | P5 |
| 在真机上确认声音、PGS 登录和整体手感 | P2、P6 |
| OAuth 同意屏幕的「发布应用」、PGS 的「发布游戏项目」 | P6 |
| 注册 AdMob:国家、条款、人机验证、付款和税务资料 | P6 |
| 同意把隐私政策、app-ads.txt 发布到用户的网站;托管需要付费时由用户决定 | P2、P6 |
| 收款:AdMob 的身份证件、PIN 码、收款方式、美国税务信息;Play 的商家付款资料和银行账户 | 上线后 |
## 工程要求
ship-my-game 第 3 步按这张表列差距。细节见 [references/build.md](references/build.md)。
| 项 | 要求 | 依据 |
|---|---|---|
| Unity | 目标 API 36 需要 6000.0.46f1+ 或 2022.3.62f1+;16 KB 页需要 6000.0.38f1+ 或 2022.3.56f1+,Burst 1.8.21+。实测用 6000.6.5f1 | [官方](https://docs.unity3d.com/6000.0/Documentation/Manual/android-requirements-and-compatibility.html);`[实测]` |
| 模块 | Android Build Support(含 OpenJDK、SDK、NDK) | — |
| targetSdk | 36(2026-08-31 起;延期的截止日 2026-11-01 已过)。minSdk 不低于 24,实测 26 | [官方](https://support.google.com/googleplay/android-developer/answer/11926878);`[实测]` |
| 架构和格式 | IL2CPP、ARM64 + ARMv7、AAB;符号表打进 AAB | `[实测]`,由 `scripts/ShipAndroidBuild.cs` 设置 |
| 16 KB 内存页 | 含原生库(Unity 都含)的包必须 16 KB 对齐,构建后检查 | [官方](https://developer.android.com/guide/practices/page-sizes) |
| 签名 | 上传密钥由 `scripts/make_upload_keystore.sh` 生成,放在工程外;应用签名密钥由 Google 托管 | `[实测]` |
| 声音 | 每个会启动的场景有且只有一个 `AudioListener` | `[实测-失败]` 两款游戏都因此无声上线过 |
| 广告 | 封闭测试期一律用 Google 测试广告 ID,拿不到广告时隐藏入口 | `[实测]` |
| 内购 | Unity IAP ≥ 4.14.0 或 5.x(Play 结算库 ≥ 8) | [官方](https://developer.android.com/google/play/billing/deprecation-faq) |
| 隐私政策 | 公开 https 网页,Play 后台和游戏里都放链接;模板 `templates/privacy-policy.en.html` | [官方](https://support.google.com/googleplay/android-developer/answer/9859455);`[实测]` |
| 敏感权限 | 合并后的清单里不要有用不到的照片、视频、通讯录、位置等权限 | [官方](https://support.google.com/googleplay/android-developer/answer/14115180) |
## 阶段
命令和链接里的相对路径(`scripts/…`、`../ship-my-game/…`)都以本 skill 目录为起点。后台路径用 Play 管理中心中文界面的原文。
### P1 账号(已有就跳到完成标准逐项核对)
1. 打开 https://play.google.com/console ,读页面判断有没有开发者账号、是个人还是组织。
2. 没有账号时:先讲 [onboarding.md](references/onboarding.md) 第 1 节「会公开哪些信息」,用户同意后带他注册。付费、证件、验证码、设备验证都由用户做 [官方](https://support.google.com/googleplay/android-developer/answer/6112435)。
3. 交易者身份:新账号创建时就要声明(「管理账号 → 账号详情 → 关于您」),已有账号最晚 2027-02-01。由用户如实决定,你讲清判断标准和后果 [官方](https://support.google.com/googleplay/android-developer/answer/17594752?hl=zh-Hans)。
4. 在「首页」清掉验证类待办,并确认「Android 开发者验证」状态(新应用创建时会自动登记包名)[官方](https://developer.android.com/developer-verification/guides/google-play-console)。
完成标准:
- 首页没有待完成的验证任务。
- 进度档案写明账号类型、注册时间(判断是否适用 12 人 × 14 天)、交易者身份。
### P2 工程、上传密钥、首个 AAB
1. 按「工程要求」改工程:把 `scripts/ShipAndroidBuild.cs` 复制到 `Assets/Editor/`,检查每个场景的 AudioListener。
2. 生成上传密钥:`bash scripts/make_upload_keystore.sh <包名>`,然后提醒用户备份 `~/.shipmygame/keys/<包名>/` `[实测]`。
3. 构建:`../ship-my-game/scripts/unity_build.sh <工程目录> Android ShipAndroidBuild.Aab release -shipVersion 1.0.0 -shipVersionCode 1`。
- `[实测]`:本脚本在空工程上构建出过调试 APK;同样配置的构建脚本在两款游戏上产出过签名 AAB。
4. 自检:用 bundletool 看清单(targetSdk 36、测试广告 App ID),确认符号已打进 AAB,检查 16 KB 对齐。命令见 build.md 第 4 节。
5. 用 `ShipAndroidBuild.Apk` 打一个调试 APK,请用户装到手机上,确认有声音 `[实测:模拟器测不出声音]`。
6. 按 `templates/privacy-policy.en.html` 生成隐私政策:替换全部 `{{占位符}}`,删掉游戏用不到的 AdMob、PGS、内购段落。用户同意后发布到公开 https 网址,用 `curl` 确认返回 200 `[实测]`。
完成标准:
- 有一个签名 AAB,versionCode 和自检结果都记进了进度档案。
- 用户在真机上确认过有声音。
- 隐私政策网址返回 200。
### P3 创建应用、应用内容、商店资料
1. 「首页 → 创建应用」:填名称、包名(先点「检查可用性」)、默认语言、游戏、免费或付费;两项声明由用户勾选。逐字段见 [console.md](references/console.md) 第 1 节 `[实测]`。
2. 信息中心「完成游戏设置」的 11 项逐项填完:隐私权政策、登录详细信息、广告、内容分级、目标受众群体、数据安全、政府应用、金融产品和服务、健康、类别和联系信息、商品详情。答案见 console.md 第 2 节 `[实测]`。
3. 「监控和改进 → 政策和计划 → 应用内容」:把所有「开始声明」清零,**尤其是「广告 ID」**。它不在 11 项里,不填送审会被拦 `[实测-失败 → 已修复]`。
4. 「商店发布 → 商店设置」:类别、最多 5 个标签、联系信息(网站要用 app-ads.txt 所在的域名)`[实测]`。
5. 「商店发布 → 商品详情」:文字、图标、置顶大图、截图、AI 资源声明。多语言用「使用 AI 导入译文」,导入后逐语种核对。见 [listing.md](references/listing.md) `[实测]`。
完成标准:
- 信息中心的「完成游戏设置」整块消失。
- 「应用内容」没有待处理项。
- 商品详情状态是「可以送审」,素材源文件都在 `publish/google-play/`。
### P4 封闭测试首发(提审闸门)
1. 「测试和发布 → 测试 → 封闭式测试」(默认轨道「封闭式测试 - Alpha」):
- 国家/地区选「全选」;
- 测试人员选 Google 群组(推荐)或邮件列表,二者只能选一种;
- 填反馈邮箱。
见 console.md 第 5 节 `[实测]`。
2. 「创建新的发布版本」:先填版本名称和多语言版本说明,点「保存为草稿」。再请用户把 AAB 拖进上传框,你轮询页面,等出现「1 (1.0.0)」这样的条目 `[实测]`。
3. 「下一步」→ 读「展开验证详情」→「保存」→「发布概览」,等快速检查跑完(最多约 14 分钟),报问题先修 `[实测]`。
4. 按[提审闸门](../ship-my-game/SKILL.md)把内容列给用户。用户说「提交」后点「提交 N 项更改以供审核」→「将更改内容送审」;被权限系统拦下就请用户点。详见 [review.md](references/review.md) 第 1 节 `[实测]`。
完成标准:
- 发布概览显示「正在审核中的更改」。
- 进度档案记下了提交时间和预计时长(实测 10~42 分钟,官方说通常 7 天内),以及去「发布概览」看结果。
### P5 招募测试者,等满 14 天(个人账号;可与 P6 并行)
1. 过审后到「测试人员」标签页,从复制按钮的 aria-label 里取两个加入链接 `[实测]`。
2. 用 `templates/testers-recruitment.md` 写招募文案。建 Google 群组时最后的人机验证由用户过;社区帖子由用户发 `[实测]`。见 review.md 第 2 节。
3. 每天读信息中心「申请正式版发布权限」卡片:「目前有 N 名测试人员已持续参与 M 天」`[实测:卡片原文]`。
4. 根据反馈发更新:versionCode 加 1,走 P4 的第 2~4 步,或用 [automation.md](references/automation.md) 的 API。改动攒齐一次提交,因为重新送审会取消正在进行的审核 `[实测]`。
5. 把「监控和改进 → 评分和评价 → 测试反馈」里的反馈和对应的修复记进进度档案,留给 P7 的问卷用 [官方](https://support.google.com/googleplay/android-developer/answer/14151465?hl=zh-Hans)。
完成标准:卡片上「至少 12 名测试人员」「至少 14 天」两项都打勾;进度档案里有反馈和修复记录。
### P6 平台能力(与 P5 并行)
1. Play 游戏服务:
- 后台:配置、OAuth 同意屏幕、凭据(**所有签名证书的 SHA-1 都要建**)、成就(至少 10 个)、排行榜、测试人员;
- Unity:`scripts/ShipPgsSetup.cs` 和 `scripts/ShipPlayGames.cs`;
- 「发布应用」和「发布游戏项目」由用户点。
见 [capabilities.md](references/capabilities.md) 第 1 节 `[实测:后台配置]`。
2. AdMob:
- 建应用和广告单元,`scripts/ShipAds.cs`(UMP 同意 → 初始化 → 激励、插屏、横幅);
- 发布 GDPR 消息,准备 app-ads.txt;
- 测试期用测试 ID,正式上线后再关联商店。
见 capabilities.md 第 2 节 `[实测:后台配置]`。
3. 应用内评价、应用内更新:`scripts/ShipPlayReview.cs`;内购:Unity IAP。见 capabilities.md 第 3、4 节 [官方]。
4. 每接一项,都同步更新数据安全申报和隐私政策,跟下一个版本一起送审(P4 第 2~4 步)`[实测]`。
完成标准:
- 接入的每个能力都由用户在真机上、从测试轨道安装后验证过。
- PGS 配置已发布;数据安全申报和隐私政策已经和功能一致。
- 正式广告 ID 只记在进度档案里,没有放进测试包。
### P7 申请正式版并发布正式版(提审闸门)
1. 卡片上三项都打勾后,按 `templates/production-access-answers.md` 起草三部分问卷,交给用户逐条确认 [官方](https://support.google.com/googleplay/android-developer/answer/14151465?hl=zh-Hans)。
2. 按提审闸门列给用户:问卷答案、测试人数和天数、预计 7 天内出结果。用户说「提交」后,在「信息中心 → 申请正式版发布权限」点「申请发布正式版」,三部分都点「下一步」,最后点「申请」。
3. 获批后(邮件通知账号所有者),按 [review.md](references/review.md) 第 6 节准备正式版:
- 换上正式广告 ID 和 App ID,versionCode 加 1;
- 先发布 PGS 配置,至少 2 小时后再上线游戏;
- 「测试和发布 → 正式版 →『创建新的发布版本』」。
4. 再走一次提审闸门,把正式版送审,读页面确认进入「审核中」。
完成标准:
- 发布概览里,正式版那一项显示在「正在审核中的更改」下。
- 进度档案记下了提交时间、预计时长和查看位置(发布概览、邮件)。
## 等待期与上线后
- **等封闭测试审核**(实测几十分钟):去做商店素材、PGS 和 AdMob 的后台配置。
- **等 14 天**:每天看卡片上的人数和天数;按反馈发 1~2 个更新;能力接入放在这段时间做。
- **等正式版权限审核**(约 7 天):准备正式版的广告 ID、商店推广素材。
- **上线后**:在 AdMob 关联商店并完成 app-ads.txt 验证(capabilities.md 第 2.7 节);在 Android vitals 里盯崩溃率和 ANR。2027-02 起会考核内存,DEX 超过 50 MB 的游戏还要做代码优化([官方](https://support.google.com/googleplay/android-developer/answer/17492799))。每次更新都加 versionCode,改动攒齐一次送审。
- **收款**:AdMob 余额满 10 美元要验证身份和地址(PIN 码平邮,约 3 周),满 100 美元后每月 21 日前后付款;卖内购要先建商家付款资料、加银行账户,每月 15 日起付上月的收入。见 [payouts.md](references/payouts.md)。
- **被拒或被拦**:见 [review.md](references/review.md) 第 4 节和 [troubleshooting.md](references/troubleshooting.md)。