跳转到内容

Bilibili小游戏

Bilibili小游戏(下文简称 B站小游戏)是一种运行在哔哩哔哩 App 内的免安装游戏。游戏包由平台云端托管,用户可以从游戏中心、分享链接、收藏、推荐和搜索等入口进入游戏,点开即玩。

B站小游戏支持 LayaAir 3.x。开发者在 LayaAir IDE 中选择B站小游戏并完成构建后,会得到可以导入 哔哩哔哩小游戏开发者工具 的项目工程。后续的本地调试、真机预览、上传开发版本、提交审核和发布,需要通过B站开发者工具与小游戏后台完成。

与其它小游戏平台一样,发布前需要先完成通用设置。

B站小游戏项目根目录至少需要入口文件 game.js 和配置文件 game.json,LayaAir IDE 会在构建时生成这些文件及平台适配代码。

完整流程如下:

1、注册开发者并创建小游戏;

2、在 LayaAir IDE 中配置 AppID 并构建B站小游戏工程;

3、使用B站小游戏开发者工具进行本地调试;

4、上传开发版本并扫码真机预览;

5、提交审核,审核通过后发布上线。

进入B站小游戏开放平台,注册成为小游戏开发者并创建小游戏。 (目前仅支持企业开发者注册) 创建完成后,在开发者后台获取 AppID,后续需要将其填写到 LayaAir IDE 的发布配置中。

后台可以为成员分别配置开发权限和预览权限:

  • 拥有开发权限的成员可以上传代码包;
  • 拥有预览权限的成员可以扫描开发版或审核版二维码;
  • 每个小游戏最多可以添加 50 位成员,包括创建者本人。

扫码提示“无访问权限”时,应检查当前B站账号是否已加入预览成员名单,而不是重新构建项目。

在 LayaAir IDE 的构建发布面板中,选择目标平台为 Bilibili小游戏,然后进入平台设置。发布前应先在通用设置中确认游戏名称、版本、屏幕方向、资源压缩和分包等选项。

B站小游戏平台设置主要包含以下参数:

App ID

填写在B站小游戏开发者后台创建应用后获得的 AppID。该值会写入构建工程的 project.config.json。上传前还应确认 game.json 中的 appId 与后台应用一致。

开放数据域

启用后,构建工程中会保留 openDataContext 目录,并在 game.json 中写入开放数据域配置。只有项目确实使用好友排行等开放数据能力时才需要开启。

开放数据域目录不能设置为分包,也不能放入其它分包中。

压缩纹理

允许使用压缩纹理格式用于控制是否采用纹理压缩设置;始终包含纹理源文件用于决定是否同时保留 png、jpg 等源纹理,以便在不支持压缩格式的设备上回退使用。

确认设置无误后执行构建,即可生成B站小游戏项目工程。 !

LayaAir IDE 构建得到的是供B站开发者工具导入的项目工程,并不是最终上线版本。典型目录包含以下内容:

game.js

小游戏入口文件。LayaAir 引擎库、B站平台适配库、项目代码以及启动成功标记会从这里引入或调用。

game.json

B站小游戏全局配置文件,用于配置 AppID、版本、屏幕方向、网络超时、开放数据域和分包等信息。

project.config.json

开发者工具项目配置文件,包含 AppID、项目名称和开发者工具相关设置。

js、libs 与资源目录

分别用于存放项目代码、引擎库和游戏资源,实际名称会受到项目构建设置影响。

导入B站开发者工具时,应选择 LayaAir 构建生成的B站小游戏目录,不要选择 LayaAir 项目的源码根目录。

game.json 位于小游戏项目根目录。LayaAir IDE 会根据项目与平台设置自动生成或合并配置,开发者也可以通过 build-templates/bilibili/game.json 添加项目特有配置。

属性类型必填描述
versionstring当前小游戏版本号
appIdstring在B站小游戏后台获得的 AppID
deviceOrientationstringportrait 为竖屏,landscape 为横屏
showStatusBarboolean是否显示状态栏,默认为 false
networkTimeoutobject请求、上传、下载与 WebSocket 的超时时间
openDataContextstring开放数据域目录名称
subpackagesarray分包配置,详见第 5 节
navigateToMiniProgramAppIdListarray允许跳转的小游戏 AppID,最多 10 个
iOSHighPerformancebooleaniOS 高性能模式
androidHighPerformancebooleanAndroid 高性能模式

配置示例:

{
"version": "1.0.0",
"appId": "biligameXXXXXXXX",
"deviceOrientation": "landscape",
"showStatusBar": false,
"networkTimeout": {
"request": 10000,
"connectSocket": 10000,
"uploadFile": 10000,
"downloadFile": 10000
}
}

build-templates/bilibili 中的同名配置会在构建时合并到平台模板。直接修改输出目录只适合临时验证;重新构建后仍需保留的配置,应放回项目构建模板中。

B站小游戏要求调用 bl.launchSuccess() 上报游戏启动成功。缺少该调用可能导致开发工具上传检查失败,或者无法通过平台审核。

当前 LayaAir 的B站小游戏构建模板会在加载引擎库、项目代码和入口脚本后自动调用:

bl.launchSuccess();

构建完成后,应检查输出目录中的 game.js,确认该调用没有被自定义模板覆盖或删除。

如果项目在入口脚本加载后仍有较长的异步初始化过程,例如还需要下载首屏资源、读取存档或等待登录,应结合项目启动流程确认上报时机。游戏完成首屏初始化并进入可正常交互状态后,再报告启动成功。

B站官方推荐使用 哔哩哔哩小游戏开发者工具 IDE 完成本地调试、预览和上传。请从B站小游戏开发者工具说明下载并安装当前版本。

开发者工具当前建议使用 Node.js 18 或以上版本。命令行工具也可以调试和上传,但官方不推荐将其作为普通开发流程的首选方式。

1、打开B站小游戏开发者工具;

2、选择导入小游戏项目;

3、选择 LayaAir IDE 生成的B站小游戏工程目录;

4、确认项目 AppID 与B站小游戏后台一致;

5、编译运行并检查控制台输出。

本地调试时重点检查:

  • JavaScript 是否存在运行错误;
  • 引擎库、场景和资源路径是否正确;
  • 首屏是否可以完整进入并正常交互;
  • bl.launchSuccess() 是否成功执行;
  • 屏幕方向、触控、音频和前后台切换是否正常;
  • 网络请求与远程资源是否符合域名白名单要求。

如果小游戏需要请求业务接口、上传或下载文件、加载远程资源,或者使用 WebSocket,应在“开发者后台 → 开发 → 服务器域名”中配置对应白名单。

B站服务器域名主要有以下限制:

  • requestuploadFiledownloadFile 只支持 HTTPS;
  • connectSocket 只支持 WSS;
  • 不能使用 IP 地址或 localhost
  • 域名必须完成 ICP 备案;
  • 不能将 .bilibili.com 配置为开发者服务器域名;
  • 每一类接口最多可以配置 20 个域名。

开发者工具中的“关闭域名校验”只能用于定位问题。开发版二维码和线上环境仍会执行域名限制,提交审核前必须使用合法域名完成真机验证。

本地运行通过后,上传或生成开发预览版本,再到小游戏后台获取预览二维码。使用已加入预览名单的B站账号扫码,在真实设备上测试。

建议至少验证:首次与二次进入、弱网环境、横竖屏与全面屏、触控区域、音频前后台状态、平台开放能力,以及 Android 与 iOS 的资源加载和性能差异。

在开发者工具中确认项目运行正常后,使用上传功能生成开发版本。上传时填写清晰的版本号和更新说明,便于在后台区分测试包与提审包。

上传后应在后台确认 AppID、开发版本号、上传时间和构建内容正确,并使用该版本的二维码完成真机体验。不要提交带有测试入口、无效按钮和无关调试代码的版本。

从已经完成真机验证的开发版本发起审核,并按后台要求补齐小游戏名称、图标、介绍、截图、测试说明和必要资质。

提交前还应根据B站平台最新要求检查必接能力,例如启动成功标记、侧边栏复访能力和桌面快捷方式能力。平台能力与审核要求可能更新,请以B站官方文档和后台提示为准。

审核通过后,在开发者后台执行发布操作,小游戏才会进入正式环境。不要将“审核通过”误认为已经自动上线。

正式发布后建议从实际投放入口再次进入游戏,确认线上版本、网络域名、资源 CDN、登录与支付环境均与预期一致。

B站小游戏支持将内容拆分为主包和多个分包。首次启动时只下载主包,进入游戏后再按需加载其它分包,可以降低首包体积并缩短首次启动时间。

当前分包大小限制为:

  • 游戏所有分包总大小不超过 30MB
  • 主包不超过 4MB
  • 单个分包不超过 4MB

在 LayaAir IDE 的通用发布设置中启用分包并选择目录。发布时,B站构建插件会将分包信息写入 game.jsonsubpackages 字段。如果资源仅通过代码路径加载、没有被场景直接引用,应将其加入“始终包含的资源目录”。

LayaAir 统一使用 Laya.loader.loadPackage 加载小游戏分包:

Laya.loader.loadPackage("sub1", (progress: number) => {
console.log("分包加载进度:", progress);
}).then(() => {
return Laya.loader.load("sub1/Scene.ls");
}).then((sceneRes) => {
console.log("分包资源加载完成", sceneRes);
});

底层会调用B站小游戏的 bl.loadSubpackage 接口。分包名称应与 Laya.loader.loadPackage 传入的名称保持一致。

开放数据域目录不能作为分包。存在父子嵌套目录时,应按照B站平台的分包规则安排配置顺序,并在开发者工具中检查每个分包的实际体积。

检查 LayaAir 平台设置、project.config.jsongame.json 中的 AppID 是否与B站小游戏后台一致。重新构建前,应先修正 LayaAir 项目设置或 build-templates/bilibili 中的配置。

6.2 本地能运行,扫码后网络请求失败

Section titled “6.2 本地能运行,扫码后网络请求失败”

通常是开发者工具关闭了域名校验,而预览版本开始执行真实白名单限制。检查协议是否为 HTTPS/WSS、域名是否备案,以及对应接口类型下是否已经添加该域名。

检查输出目录 game.js 中是否存在 bl.launchSuccess()。如果项目使用了自定义 game.js 模板,应将启动成功调用合并到自定义模板,并确认调用时机合理。

在B站小游戏后台将扫码账号添加为预览成员。开发权限与预览权限相互独立,仅拥有上传权限不代表可以扫码体验。

不要长期直接修改构建输出目录。需要保留的 game.jsongame.js 或其它平台文件,应放入 LayaAir 项目的 build-templates/bilibili 目录,由构建流程自动复制或合并。