开源项目
bit-minigame:微信/支付宝/字节跳动小游戏,一套接口写完
小游戏平台适配库,统一微信、支付宝、字节跳动的登录、广告、支付、分享接口,一套代码同时适配三大小游戏平台。
bit-minigame:微信/支付宝/字节跳动小游戏,一套接口写完
它解决什么问题
同一款小游戏要同时发微信、支付宝、字节跳动,业务逻辑(广告、支付、分享)是一样的,但每个平台的 API 名字、参数、回调形式都不一样。最常见的写法是业务代码里到处塞 if (isWX) {...} else if (isAlipay) {...} else if (isBytedance) {...},平台一多,这种判断散落得到处都是,加一个新平台或者某个平台 API 升级了,要把这些判断全部找出来改一遍。
bit-minigame 把三个平台的差异封装到统一接口后面,业务代码只调 MiniHelper,不用关心背后跑的是哪个平台的 SDK。
安装
bit-core 是 peer 依赖(用它的 Platform 做平台检测):
npm install @gongxh/bit-minigame @gongxh/bit-core
核心用法
统一入口
import { MiniHelper } from '@gongxh/bit-minigame';
const common = MiniHelper.common();
const ad = MiniHelper.ad();
const pay = MiniHelper.pay();
通用信息
const launchOptions = common.getLaunchOptions(); // 冷启动参数,处理分享邀请常用
const hostVersion = common.getHostVersion(); // 微信/支付宝/抖音的宿主版本号
const { width, height } = common.getScreenSize();
激励视频广告
ad.showRewardedVideoAd({
adUnitId: 'xxx-xxx-xxx',
onComplete: () => giveReward(), // 看完了才给奖励
onError: (errCode, errMsg) => console.log('广告加载失败', errCode, errMsg),
onClose: () => console.log('广告关闭'),
});
广告位 ID 要在各平台后台单独申请,一个 ID 只能在申请的那个平台用。实际项目里建议提前预加载广告,用户点击”看视频得奖励”的瞬间才开始加载的话,加载失败率会明显更高,用户体验也差。
支付
pay.init(offerId, unitPriceQuantity); // offerId 在不同平台含义不同(商户号/AppId)
pay.pay({
rmb: 6,
orderId: 'order_20260807_001',
shopId: 'gold_pack_1',
shopName: '100 金币礼包',
sandbox: 0, // 0 正式环境,1 沙盒环境
success: (res) => console.log('支付成功', res),
fail: (res) => console.log('支付失败', res),
});
支付结果必须在服务器端二次验证,客户端的 success 回调只能当作”用户看到了成功提示”,不能当作发货依据——伪造客户端回调的成本比伪造服务端签名低得多。
平台判断
平台判断走 bit-core 的 Platform,不需要 bit-minigame 自己再定义一套:
import { Platform } from '@gongxh/bit-core';
if (Platform.isWX) {
// 微信小游戏专属逻辑
} else if (Platform.isAlipay) {
// 支付宝小游戏
} else if (Platform.isBytedance) {
// 字节跳动小游戏
}
避坑提醒
- 支付的
offerId参数在不同平台代表的东西不一样(有的是商户号,有的是 AppId),照抄一个平台的配置传到另一个平台,接口大概率直接报错,接入新平台时要单独确认这个字段的含义。 - 广告加载失败是常态而不是异常,尤其是网络不好或者广告库存不足的时候,
onError回调一定要处理,不能假设广告总能加载成功——没处理这个分支的话,用户点了”看广告”却什么都没发生,体验很差。 - 测试支付流程一定要用沙盒环境(
sandbox: 1),直接用正式环境测试容易产生真实扣款记录,退款流程比测试本身麻烦得多。
项目信息
- GitHub: https://github.com/gongxh0901/bit-framework/tree/main/bit-minigame
- npm: @gongxh/bit-minigame
- 许可证: MIT License
这是 bit-framework 目前的最后一个模块介绍。12 个模块按需组合,具体怎么搭配可以回头看看总览文章里的依赖关系图。