生命周期与启动(Web)
SDK 需要在你游戏里完成三件事:
- 暂停和恢复主循环 —— 广告播放、标签页进后台、或渠道主动要求时。
- 静音和恢复音频 —— 触发条件相同,但分开一个回调,方便你做交叉淡入淡出。
- 加载期间显示一张启动画面,按渠道风格定制。
生命周期回调负责 (1) 和 (2);引导器负责 (3)。
生命周期回调是必填的
Section titled “生命周期回调是必填的”每一个回调都要实现 —— 即便某个对你游戏来说是 no-op,也显式写出来,表明你考虑过了。空函数 () => {} 是允许的;漏掉一个就不允许。
它们什么时候会触发
| 回调 | 触发场景 |
|---|---|
onSuspend / onResume | 插屏、激励广告。标签页/应用进后台。 |
onAudioSuspend / onAudioResume | 同上,但单独一份,方便你独立处理音频(比如交叉淡入淡出)。 |
onGamePause | 渠道级暂停事件(比如用户切走)。 |
不是每个渠道都会触发每个回调 —— 它们都是尽力而为。五个全实现,才能获得最大可移植性。
init()—— 渲染当前渠道的启动画面。立即 resolve,你就可以开始加载了。setProgress(0..1)—— 想调多少次都行;支持的渠道会显示进度条。complete()—— 隐藏启动画面,把舞台交还给你的游戏。
如果你没先调 setProgress(1) 就把启动画面藏掉,引导器一样能正常完成 —— 进度只是建议性的。
完整启动流程长这样:
开发期间给 init() 传 'dev',会有更详细的日志和更宽松的默认值;生产环境省略或传 'prod'。详见 环境。
complete() 之前我能干什么?
Section titled “complete() 之前我能干什么?”经验法则:FRVR.init() 之后,你想调哪个模块都行。任何需要网络的(内购目录、云端存储)在 complete() 触发之后才稳定可用。
启动完成后的钩子
Section titled “启动完成后的钩子”如果有些代码必须等 FRVR 完整启动完才能跑 —— 即便不是你自己在调 complete() —— 注册一个钩子:
如果在启动已经完成之后再注册,回调会立即执行。