发布发布到应用商店
原生项目
完整的手机项目,适用于广告、购买,以及有开发者负责维护的情况。
Native 会把整个应用作为手机项目交给你,可以是一个 ZIP,也可以推送到 GitHub 仓库。请先填写应用的名称和一个应用 ID,例如 com.yourcompany.yourapp:商店通过这个 ID 来识别你的应用,发布之后就无法再更改。
随后窗口会显示构建它所需的确切命令,分别适用于 Android 和 iPhone:
npm install && npm run build
npx cap add android
npm run icons
npx cap sync && npx cap open android在 iPhone 上,用 ios 代替 android,最后一条命令会打开 Xcode。
从这里开始就是各个商店自己的流程:在 Android Studio 或 Xcode 中为应用签名,上传,测试,填写商店页面并发布。请妥善保管 Android 签名密钥及其密码。每次更新都必须使用同一个密钥签名。 没有 Android Studio 或 Mac 时,GitHub 可以替你构建:在云端构建。
获取项目:下载或 GitHub
在第 1 步中,Download the project 有两个字段,App name 和 App ID。ID 一开始是 com.setherion. 加上应用的名称,并且必须写成反向域名的形式。Download project (.zip) 会生成一个以应用命名的 ZIP。它包含网页项目、手机文件、应用有数据表时的 schema.sql、所有游戏美术,以及图标和启动画面的图片。它需要付费套餐。
另一种方式是 or push to GitHub:点击 Connect with GitHub 连接,或粘贴一个令牌,选择一个 Repo name,然后点击 Export to GitHub。仓库会以私有方式创建,Open repo 会带你打开它。这同样需要付费套餐。
Android 上的原生项目,一步一步来
- Download the project,方法如上。
- Build it。需要 Node 22 和 Android Studio。运行窗口显示的命令。如果应用使用广告或购买,会加上
npm run native:setup,放在npx cap add android之后。 - Sign it。在 Android Studio 中依次选择 Build、Generate Signed App Bundle。创建一个密钥,并保管好它和它的密码:每次更新都需要同一个密钥。
- Upload it and test it。在 Play Console 中创建应用,把 .aab 上传到 Internal testing,然后填写商店页面、内容分级和数据安全表单。使用广告时,你还要声明广告 ID。
- Release。审核需要几小时到两天。2023 年 11 月之后开设的个人 Google Play 账户,需要先完成封闭测试。
iPhone 上的原生项目,一步一步来
- Download the project:与 Android 使用同一个 ZIP。
- Build it。需要一台装有 Xcode 的 Mac,以及每年 $99 的 Apple 开发者账户。运行相同的命令,用
ios代替android。 - Sign it and upload it。在 Xcode 中打开 Signing & Capabilities 并选择你的团队。使用广告或购买时,添加 In-App Purchase。然后依次选择 Product、Archive、Distribute,上传到 App Store Connect。
- Try it on your iPhone,使用 TestFlight。
- Fill the store page and send it for review。使用广告时,Apple 会把它们算作跟踪。
在云端构建
不需要 Android Studio,也不需要 Mac:GitHub 可以在自己的计算机上构建应用。在第 1 步把项目推送到 GitHub,仓库会得到两个构建工作流,一个用于 Android,一个用于 iPhone。之后 Build it 这一步会显示 Build it in the cloud,并带有一个前往 GitHub 上工作流页面的按钮。
在 GitHub 上打开 Actions,选择 Android build 或 iPhone build,点击 Run workflow,然后选择要构建的内容:
| 工作流 | 选项 | 你会得到 |
|---|---|---|
| Android build | Test APK | 可安装到你自己手机上的应用,位于该次运行的 Artifacts 中。无需任何设置。 |
| Android build | Make a new key | 签名密钥,在第一次上传到 Google Play 之前创建一次。仅限私有仓库。 |
| Android build | Google Play bundle (.aab) | 用于 Play Console 的已签名文件,每次运行版本号都会更高。 |
| iPhone build | Check that it builds | 证明应用可以为 iPhone 编译。不需要 Apple 账号。 |
| iPhone build | TestFlight | 已签名并发送到 App Store Connect 的应用,可用 TestFlight 安装。 |
私有仓库每月可免费使用 GitHub 计算机 2,000 分钟。一次 Android 构建只需几分钟,而 GitHub 把 Mac 的 1 分钟按 10 分钟计算。仓库的 README 说明了每一步。
第一次生成 Google Play bundle 之前
- 运行 Make a new key,并从该次运行下载 upload-key。
- 把
upload.jks和它的密码妥善保存在仓库之外。每次更新都必须用同一个密钥签名。 - 在仓库中打开 Settings、Secrets and variables、Actions,添加三个 secret,每个的值为对应文件的内容:
ANDROID_KEYSTORE_BASE64、ANDROID_KEYSTORE_PASSWORD和ANDROID_KEY_ALIAS。 - 运行 Google Play bundle (.aab),然后在 Play Console 中把文件上传到 Internal testing。
第一次 TestFlight 构建之前
- 在 App Store Connect 中创建应用,使用与第 1 步相同的应用 ID。
- 在 Users and Access、Integrations、App Store Connect API 中生成一个 Admin 角色的密钥,并下载它的 .p8 文件。Apple 只允许下载一次。
- 在仓库中添加四个 secret:
APPLE_TEAM_ID(developer.apple.com 上的 Membership details)、ASC_KEY_ID、ASC_ISSUER_ID和ASC_KEY_P8,即 .p8 文件的内容。 - 运行 TestFlight。几分钟后,构建会出现在 App Store Connect 的 TestFlight 中。工作流会告诉 Apple 应用只使用标准加密,因此 TestFlight 不会再询问。
在云端构建推出之前建立的 GitHub 连接无法添加工作流:这一步会提示,在第 1 步点击 Reconnect 即可解决。
手机应用中的账户
在手机应用中,人们使用邮箱和密码登录。Google 按钮和通过邮件发送的登录链接在那里会自动隐藏。这就是 Delete account 按钮检查很重要的原因:如果人们可以注册却没有这个按钮,Apple 会拒绝这个应用。
广告与购买
显示广告或销售商品的游戏,只有在 Native 项目中才能真正运行:广告来自 Google AdMob,购买通过 RevenueCat 对接各个商店。在编辑器的预览中它们是模拟的(“Test ad”、“Test purchase”,不会扣款),所以你可以试用,而在已发布的网站上它们是隐藏的。在简单方式(Easy way)中,游戏不带它们运行。
项目一开始使用的是 Google 的测试广告,不会产生任何收入。请把你自己的广告 ID 和商店密钥填入 src/monetize.keys.json,然后运行 npm run native:setup:项目的 README 说明了每一项从哪里获取。
密钥文件里放什么
这个文件包含 AdMob 的应用 ID,Android 和 iPhone 的激励广告和插页广告单元 ID,以及每个商店的 RevenueCat 密钥(Android 以 goog_ 开头,iPhone 以 appl_ 开头)。没有 RevenueCat 密钥,或者没有商品,就不会销售任何东西。
要投放真实广告,请创建 AdMob 账户、应用和广告单元,把 ID 填入该文件,在全新的原生文件夹上运行 npm run native:setup,并在网站上发布一个 app-ads.txt 文件。要启用购买,请在 Play Console 和 App Store Connect 中创建商品,ID 与 src/monetize.json 中的相同,并在一个 RevenueCat 项目中连接这两个商店。在 iPhone 上,添加 In-App Purchase 功能。
两个商店都需要一个隐私政策链接,并且必须有 Restore purchases 按钮:项目已经提供了一个。在两次广告之间,应用在最初 30 秒内、距上一次广告不满 60 秒时,以及对已购买去广告商品的玩家,都会跳过插页广告。
这个页面对你有帮助吗?
