跳转到内容

概览

FRVR SDK 是一个 JavaScript 包,处理 HTML5 游戏发布过程中所有非玩法相关的部分:广告、支付、数据分析、登录、存储、排行榜、推送、用户同意、深链 —— 然后根据你运行所在的渠道(发行平台)自动适配。

                     ┌───────────────────────────┐
 your game.js ───►   │   window.FRVR (one bundle) │
                     └───────────────┬───────────┘

              ┌──────────────────────┼────────────────────────┐
              ▼                      ▼                        ▼
         FRVR.ads             FRVR.tracker              FRVR.iap, …
     (interstitial,          (events, FTUE,           (products, receipts,
      rewarded, banner)       level funnels)           consumables)
              │                      │                        │
              └──────────────────────┼────────────────────────┘

                        ┌───────────────────────┐
                        │   Channel package     │   e.g. frvr-channel-web,
                        │  (platform adapter)   │   -facebook-instant, -ios, …
                        │ (injected by FRVR)    │
                        └───────────────────────┘
  • 核心包(frvr-sdk.min.js)永远是同一个,是你游戏代码直接对话的对象。
  • 渠道包(frvr-channel-*.min.js)接入特定 provider 的具体行为 —— Facebook Instant 的广告、Google Play 计费、iOS 原生桥接等等。本地用 frvr-channel-dev;FRVR 在发版时会按平台自动注入正确的渠道包

一份游戏构建可以发到多个渠道。游戏代码不需要按平台分支,生产环境也轮不到你自己挑渠道包。

整个 SDK 由一个配置对象驱动。每个模块只读自己那把 key,缺了也无所谓 —— 那个模块要么走默认值,要么静默不工作。

FRVR.config = {
  gameId: 'my-awesome-game',
  ads:       { /* ... */ },
  iap:       { catalog: { /* ... */ } },
  auth:      { /* ... */ },
  tracker:   { /* ... */ },
  consent:   { providerName: 'tcfv2' },
  // etc.
};

详见 配置参考

调用顺序大体如下:

  1. 设置 FRVR.config,所有生命周期回调都接好 —— onSuspendonResumeonAudioSuspendonAudioResumeonGamePause。漏一个都是上线 bug。
  2. 调用 FRVR.init() —— 装配所有模块。
  3. 调用 FRVR.bootstrapper.init()、加载游戏、再 FRVR.bootstrapper.complete() —— 加载期间显示渠道风格的启动画面。

第 1 步是真正需要工作量的一步。纯 HTML5(没有引擎)需要把每个回调接到自己的主循环、音频混音器和 UI 上 —— 浏览器并没有一个通用的 “暂停一切” API。Unity 和 Cocos 插件就轻松些,因为引擎本身就有 pause/resume 和音频混音器,你转发过去即可。

完整流程见你引擎对应的生命周期页 —— WebUnityCocosConstruct 3