发布发布到应用商店

原生项目

完整的手机项目,适用于广告、购买,以及有开发者负责维护的情况。

Native 会把整个应用作为手机项目交给你,可以是一个 ZIP,也可以推送到 GitHub 仓库。请先填写应用的名称和一个应用 ID,例如 com.yourcompany.yourapp:商店通过这个 ID 来识别你的应用,发布之后就无法再更改。

随后窗口会显示构建它所需的确切命令,分别适用于 Android 和 iPhone:

text
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 上的原生项目,一步一步来
  1. Download the project,方法如上。
  2. Build it。需要 Node 22 和 Android Studio。运行窗口显示的命令。如果应用使用广告或购买,会加上 npm run native:setup,放在 npx cap add android 之后。
  3. Sign it。在 Android Studio 中依次选择 Build、Generate Signed App Bundle。创建一个密钥,并保管好它和它的密码:每次更新都需要同一个密钥。
  4. Upload it and test it。在 Play Console 中创建应用,把 .aab 上传到 Internal testing,然后填写商店页面、内容分级和数据安全表单。使用广告时,你还要声明广告 ID。
  5. Release。审核需要几小时到两天。2023 年 11 月之后开设的个人 Google Play 账户,需要先完成封闭测试。
iPhone 上的原生项目,一步一步来
  1. Download the project:与 Android 使用同一个 ZIP。
  2. Build it。需要一台装有 Xcode 的 Mac,以及每年 $99 的 Apple 开发者账户。运行相同的命令,用 ios 代替 android。
  3. Sign it and upload it。在 Xcode 中打开 Signing & Capabilities 并选择你的团队。使用广告或购买时,添加 In-App Purchase。然后依次选择 Product、Archive、Distribute,上传到 App Store Connect。
  4. Try it on your iPhone,使用 TestFlight。
  5. 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 buildTest APK可安装到你自己手机上的应用,位于该次运行的 Artifacts 中。无需任何设置。
Android buildMake a new key签名密钥,在第一次上传到 Google Play 之前创建一次。仅限私有仓库。
Android buildGoogle Play bundle (.aab)用于 Play Console 的已签名文件,每次运行版本号都会更高。
iPhone buildCheck that it builds证明应用可以为 iPhone 编译。不需要 Apple 账号。
iPhone buildTestFlight已签名并发送到 App Store Connect 的应用,可用 TestFlight 安装。

私有仓库每月可免费使用 GitHub 计算机 2,000 分钟。一次 Android 构建只需几分钟,而 GitHub 把 Mac 的 1 分钟按 10 分钟计算。仓库的 README 说明了每一步。

第一次生成 Google Play bundle 之前
  1. 运行 Make a new key,并从该次运行下载 upload-key。
  2. 把 upload.jks 和它的密码妥善保存在仓库之外。每次更新都必须用同一个密钥签名。
  3. 在仓库中打开 Settings、Secrets and variables、Actions,添加三个 secret,每个的值为对应文件的内容:ANDROID_KEYSTORE_BASE64、ANDROID_KEYSTORE_PASSWORD 和 ANDROID_KEY_ALIAS。
  4. 运行 Google Play bundle (.aab),然后在 Play Console 中把文件上传到 Internal testing。
第一次 TestFlight 构建之前
  1. 在 App Store Connect 中创建应用,使用与第 1 步相同的应用 ID。
  2. 在 Users and Access、Integrations、App Store Connect API 中生成一个 Admin 角色的密钥,并下载它的 .p8 文件。Apple 只允许下载一次。
  3. 在仓库中添加四个 secret:APPLE_TEAM_ID(developer.apple.com 上的 Membership details)、ASC_KEY_ID、ASC_ISSUER_ID 和 ASC_KEY_P8,即 .p8 文件的内容。
  4. 运行 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 秒时,以及对已购买去广告商品的玩家,都会跳过插页广告。

这个页面对你有帮助吗?

加入社区

提问、交流想法,看看别人在构建什么。