Featured image of post 《元灵象棋》发行踩坑实录

《元灵象棋》发行踩坑实录

拿 PWA 页游上架 TapTap 和 Google Play

这是我第一次上线手游,又长了些见识。简单记录一下发行时的考虑、流程,踩过的坑。

两周前的上一篇日志写了开发《元灵象棋》的心路历程:四舍五入地说,就是心血来潮的拖延产物。一个体量极小的休闲解谜过关游戏,最初只是想花两天做个网页版来验证下玩法是否有趣,后来完整的制作花了20来天,不算后续零散 Bug 修复和更新。这里面很多事情都纯粹是「为了体验而体验」,品尝赛道曲折。特别是非要在 Google Play 版里面鼓捣广告……

一周前,游戏上线 TapTap。前天,游戏上线 Google Play。这个项目也算告一段落。

TapTap Google Play

结论

  • 把网页应用简单套壳成安卓 App,不适合国内手机生态(浏览器内核版本碎片化)
  • TapTap 目前对免费单机手游的上架门槛最低,流程最短(国内)
  • Google Play 新政策对个人开发者的门槛提高,又不给新 App 自然流量,冷启动困难

技术栈

这个和平台可行性有关,所以先讲。熟悉前端或者不关心这个的话,可跳至「发行平台」一节。

《元灵象棋》是一个建立在HTML/CSS/JS之上的静态网页游戏,没有后端服务器(除了社区关卡的数据库)。因为是让 AI 从零开始实现代码的,所以除了使用现成的开源动画/音效插件外,没有任何库依赖。之前有朋友用 AI 逆向工程网页版,猜测用了React/Vue/Tailwind/chess.js/Stockfish之类,其实都没有,全是 Agent 空手写的。游戏 UI 适配不同尺寸窗口,包括桌面横屏和移动竖屏布局,但开发时我主要考虑的是移动端用户体验。

《元》是渐进式网页应用(PWA),也就是「长得像 App、用起来像 App,但本质上是网页」的可离线运行应用,仅依赖于电脑/手机端的网页浏览器,所以好处就是「哪儿都能跑」:

  1. 用户可通过手机或电脑浏览器把应用「安装到桌面」,在形式上变成一个全屏的单独 App
  2. 应用可以靠操作系统自带的浏览器内核(WebView),被套壳成 Android/iOS/PC 软件
  3. 也可以干脆与开源浏览器一起打包成自给自足的独立软件。PC 上此类应用较多(Electron),但体积会大个50-100 MB

《元》本身只有7 MB,所以安卓版本用了第二种方法封装。

这个项目,让我亲身体会到了为什么很多开发者推崇Web原生应用,因为第一种方法对小体量应用/游戏来说,其实开发效率最高、工作量最低、运行性能最稳定、无缝跨平台,界面体验和一般的手机原生App也没有区别。但就是没有人用。网页是开放的,访问权完全把握在用户手里,无法被流量入口掌控,从而无利可图。

安卓适配

「调用安卓系统浏览器内核的套壳应用」听上去很简单,但开发/调试过程要比单纯网页麻烦不少,中间无数细节问题。

网页游戏/应用的安卓化一般使用 Capacitor 框架作为中介来调取手机系统相关功能,如适配手机状态栏(顶栏)、导航栏(底栏)、后退键(最好和网页版浏览器后退功能一致)、触感(最好和手机网页版一致)、应用启动界面等等。和网页开发的体验不同的是,这些功能必须通过 Android Studio IDE 构建并推送至手机或者安卓模拟器里测试,不再是一行代码写完,刷新浏览器即刻生效的状态。更糟糕的是,我的网页端开发环境 WSL (Windows Subsystem for Linux) 和安卓端开发环境 (安装在 Windows 上的 Android Studio) 被操作系统隔开,于是调试流程变成了:

在WSL里写代码 -> 
Capacitor打包到android/目录 -> 
复制整个目录到Windows文件系统 -> 
让Android Studio Build & Run -> 
在手机上无线调试

也行,无非就是迭代速度慢一些。但「套壳 App」这条本来是小体量应用跨平台开发的高效途径,却在国内背负着沉重的历史包袱。

前面说了,这类套壳应用,全靠安卓系统自带的浏览器内核 WebView。这个内核与你手机上的 Chrome/Edge/Safari 浏览器是分开的,会独立地通过 Google Mobile Services (GMS) 升级。但问题是,出于显而易见的原因,国内的安卓手机基本上都移除了 GMS 这个毫无用处的玩意儿!所以,虽然你的浏览器会在国内应用市场里即时更新至最新版,但少数手机厂商的 WebView 却会停留在出厂时的安卓系统自带版本号上,一部分手机则是有所滞后。更别说国内复杂安卓生态里的各种魔改 WebView 了。不管是通过 APK 直接安装,还是在后面提到的某些平台的沙盒环境里,套壳 App 均会调用系统自带浏览器内核,所以部分新版本的 HTML/CSS 功能和语法,无法在这些手机上运行,必须在开发时就考虑大量防御性代码以兼容多年前的版本。

而这一切,是我上线 TapTap 之后看到关于游戏无法启动的差评,做了些调查,才后知后觉。当然,安卓生态的复杂性远不止 WebView,只不过套壳 App 阵亡得惨一些。《元灵象棋》目前收到的差评,几乎都是「打不开」相关。据潦草估计,至少有5%的用户因安卓版本问题无法成功启动游戏。

我最后的做法是:相对简单的,改,向下兼容;要伤筋动骨的,就不折腾了,直接检测用户 WebView 版本来弹出提示,避免毫无理由地卡死在启动画面。

无法启动相关的差评

发行平台

下面是我了解过的手游分发平台。点名了流程中比较麻烦或者至少值得一提的部分。(我不怎么玩手游,也没做过 App,所以这些应该属于常识,但对我来讲是新鲜事。)

国内

大前提:付费游戏需要版号(无论是一次性还是内购),个人开发者基本不可能拿到。这里只讨论免费游戏——含广告的免费游戏在绝大多数情况下和免费游戏的实际待遇无区别,但还尚无明确法律界定,以后可能有波动。

微信 抖音 哔哩哔哩

  • 微信/抖音/哔哩哔哩小游戏:「小游戏」和「小程序」一样,都是从最开始的「HTML5 Web App」逐渐衍生出来的封闭生态,但这些平台大多不接受基于传统 HTML/CSS 的应用,而是用单独的渲染器来运行 JS。将已经做好的 Web App 转为小程序/小游戏,需要在 UI/API 适配上下很多功夫,这个坑有点儿深,我没去踩。如果要在这些平台上发布,一开始就该选择 Unity/Cocos 这类接入国内生态的游戏引擎,可直接导出为小游戏格式;或者使用 Phaser 这样的开源 JS 游戏引擎。小游戏/小程序上线平台,均需要软件著作权登记证书(简称「软著」)和工信部 ICP 备案(「备案」)。
    • 软著有两种:国家版权局的官方软著证书(免费;一到三个月;教程),以及第三方电子软著认证(几百块不等;一到两周;教程)。注意国家版权局的网站只能从国内IP访问,国外开发者需逆向翻墙。需要提交的材料倒是不复杂。我申请了后者,最终没用上(见 TapTap 的部分),但听说对第三方软著的认可在逐渐缩紧。
    • 备案流程通常需要1-3周。大多数平台提供了提交备案申请的统一入口(如微信),或者你也可以在户籍所在省份的工信部指定网站上自行完成。如果游戏有联网功能,那么服务器需要建在国内,可通过云服务提供商(如阿里云)备案。申请后需要国内手机保持开机,因为必须在24小时内回复工信部发送的核验短信,否则将驳回申请。
  • 华为/小米/Oppo应用市场:直接作为游戏类安卓应用发布。小米/Oppo市场不支持个人开发者注册,所以想独立发行的话,只有华为。在任何国内应用市场上架 App,也都需要软著备案;对于游戏类 App,有额外要求:接入未成年人防沉迷系统(简称「防沉迷」)。
    • 防沉迷本质上是一个对玩家进行实名验证的系统(并对未成年人限制游玩时间)。显而易见,个人开发者很难有这个资质。小游戏无需防沉迷,是因为它们只能在特定平台上运行,而平台账号自带防沉迷;而安卓应用可下载到本地使用,不受约束。华为市场提供了华为游戏 SDK,安卓游戏接入该 SDK 后可通过用户的华为账户进行防沉迷验证。
  • TapTap:专门的游戏应用市场,支持 PC/安卓游戏下载,也支持在 TapTap 客户端(桌面/移动)内直接运行部分支持的游戏。这家的好处在于,它通过在自己 App 内提供「开放试玩」的方式,把单机、免费的安卓游戏视作「试玩内容」而非正式上架的软件或网络服务,从而在实际上架流程中无需提供软著和备案;对于可在客户端内运行的游戏,又因为用户必须登录 TapTap 实名账号之后才能启动,所以游戏本身也无需额外接入防沉迷。我注意到 TapTap 也有「小游戏」分区,但这些游戏无论联网与否,均需要备案。可见这里有些微妙的灰色地带。总之,TapTap 是一个对独立游戏很友好的平台。
    • 《元灵象棋》免费单机,我又选择了「仅可在 TapTap 内启动」,所以麻烦都省掉了。

TapTap上架资质。见 https://developer.taptap.cn/docs/store/standardies-operation/

国外

没有版号、软著、备案、防沉迷之类的流程。实名当然还是要的——除了 itch.io,只发布免费游戏的话无需申报银行税务等信息。

CrazyGames

  • CrazyGames/Poki/itch.io 页游平台:真正的纯正 HTML5 小游戏平台。除了 itch.io 是个基本只有游戏开发者才会去的网站,另外两个都是规模较大的商业平台,它们会审核、试运营、筛选、并只保留数据优秀、有利可图的小游戏,然后准许开发者植入自家广告系统并获取分成。
    • 我试了试 CrazyGames,上传流程非常方便快捷。当然,《元灵象棋》以中国象棋为主,对熟悉国际象棋的欧美玩家来讲有认知门槛,所以试运营数据是意料之中的不佳。
  • Google Play:安卓官方市场。需要一次性花费25美元注册为安卓开发者,上架本身免费。上线流程的文档非常清晰,但有一个自2023年底以来最为独立开发者诟病的「至少12人进行14天封测」新增流程。
    • 该流程要求至少有12个 Google 账户下载你的封测版本 App,并保持在他们的手机上至少14天。这是 Google 用来简单粗暴地过滤劣质 App 随意上架的手段。除了找亲友帮忙,我也使用了专门针对该流程的独立开发者抱团服务(网站链接;无利益相关,仅供参考),保证了14天内的活跃度。除了这个超长流程,其他都很快,封测后上架前的审核只花了一天,而且是周末(官方文档说是7天以内)。
    • Google Play 对独立开发者非常不友好:它不会针对新品推送,搜索和推荐算法也以历史下载量为主权重。所以新上架的「冷启动」 App 流量基本是零。
  • Apple App Store:苹果官方市场。传说中流量最大也最赚钱的平台。需要每年缴纳99美元以保持苹果开发者身份。因为iOS App 打包/调试必须用我没有的 Mac 电脑,而且据说 App Store 不喜欢网页应用套壳,所以没考虑。当然,还有原因:我是果黑。
  • Steam:当然也可以用 Electron 打包成 exe 上 Steam,但 Steam 上线游戏要先缴100美元。其次,Steam 玩家群体相当讨厌页游/手游,而《元灵象棋》是根正苗红的手游界面。其实游戏里的关卡编辑器和社区云关卡设计很符合 Steam 创意工坊精神,但还是不折腾了。

最终选择的是国内唯一无需繁琐流程的 TapTap,国外则是 Google Play。

题外话

这小项目挺好玩的。在设计谜题关卡时,我就已经在和自动求解器的斗智斗勇上收获了不少乐趣:从「我X,这一关怎么可能存在只用3步的解法?!」到「」。

游戏上线后,一些玩家上传了自己制作的关卡,有些设计超级精妙,令人叹服,费了我不少脑细胞。之前做的是叙事游戏,不存在「自己当自己做的游戏的有机玩家」的可能性。这的确是一份意外之喜了。

主题 StackJimmy 设计