SDK
本 SDK 提供 游戏 与原生客户端(iOS、Android)之间的安全双向通信能力,帮助第三方开发者调用原生能力。
暴露的全局 API 名称:window.GameTokSDK
提供能力:
| 动作 | 说明 |
|---|---|
| GET_PROFILE | 获取当前用户资料 |
| PURCHASE | 发起购买(如内购) |
| STORAGE_SET | 写入本地键值存储(用于保存设置、进度等) |
| STORAGE_GET | 读取本地键值存储(获取先前保存的数据) |
| ADD_SCORE | 上报分数(用于排行榜/分享等) |
集成示例
以下示例展示如何在页面中引入 SDK 并调用各项能力。
1.1 引入代码
方式一:通过 <script> 直接引入打包产物
html
<script src="https://play.letskix.com/res/game/sdk-js/GameTokSDK.js"></script>
<script>
// 全局可用
console.log('GameTokSDK version loaded:', !!window.GameTokSDK);
</script>1.2 调用示例
以下示例统一采用 Promise 的 then/catch 调用方式。成功时返回统一响应对象,失败时通过 Promise.reject 抛出错误。
1.2.1 获取个人资料
javascript
// 调用示例
GameTokSDK.getProfile()
.then(({ action, error, data }) => {
console.log('获取个人资料成功:', data);
})
.catch((e) => {
console.error('获取个人资料失败:', e);
});返回示例(JSON):
json
{
"action": "GET_PROFILE",
"error": false,
"data": {
"uid": 1234567,
"avatar": "https://profile-file-pre.lobah.net/files/2024/11/15/3/fd1c01ac6640466f92a59c0aaa6b0112_lp_profile_img_frame_male_17.png",
"userName": "Tim tim",
"userCoins": 0,
"level": 0,
"gender": 0,
"testAccount": true,
"guest": true
}
}1.2.2 游戏内购(例如购买道具)
javascript
/**
* 游戏内购
* @param productId 商品ID,需要在开发者后台(https://developer.lobah.net/)提前定义好
*/
GameTokSDK.purchase({ productId: 'HAB.WATER.10.COINS' })
.then(({ data }) => {
//需要注意,购买成功和失败需要根据这儿得返回值code码来确定
console.log('购买完成:', data);
})
.catch((e) => {
console.error('错误捕获:', e);
});返回示例(JSON):
json
{
"action": "PURCHASE",
"error": false,
"data": {
"purchaseResultCode": 0, //结果码"
"testAccount":false, //是否测试账号,或平台审核人员账号
"userBalance":22514 //用户的金币余额
}
}
purchaseResultCode 的结果如下:
0: 购买成功
11: product_id 不正确
12: 用户金币不足
13: 重复或无效的 reference_id
14: 用户是游客,游客不能进行购买操作
16: product_id 不正确
20: 其他错误1.2.3 存储键值
javascript
/**
* 存储键值
* @param key 需要存储的自定义键值
* @param value 需要存储的值 可以是字符串,也可以是对象
*/
GameTokSDK.storageSet({ key: 'settings', value: { theme: 'dark', volume: 0.8 } })
.then(() => {
console.log('存储成功');
})
.catch((e) => {
console.error('存储失败:', e);
});返回示例(JSON):
json
{
"action": "STORAGE_SET",
"error": false,
"data": null
}1.2.4 读取键值
javascript
/**
* 读取键值
* @param key 需要读取的定义好的键值
*/
GameTokSDK.storageGet({ key: 'settings' })
.then((result) => {
console.log('读取成功:', result.data.value); // 可能是对象或字符串
})
.catch((e) => {
console.error('读取失败:', e);
});返回示例(JSON):
json
{
"action": "STORAGE_GET",
"error": false,
"data": {
"value": {
"theme": "dark",
"volume": 0.8
}
}
}1.2.5 上报分数
javascript
/**
* 对于不同的游戏,可能需要上报的是分数,也可能是关卡、等级
* 如果是分数,就可以这样传{score:300,scoreType:'score',remark:'score'}
* 如果是等级,就可以传 {score:1,scoreType:'level',remark:'level'}
* @param score 需要上报的值 这个值需要为正整数
* @param scoreType 数据类别(由业务自定义,作为上传数据的说明)
* @param remark 自定义说明 (可以和scoreType一致)
*/
GameTokSDK.addScore({ score: 10, scoreType: 'score',remark:'score' })
.then(() => {
console.log('加分成功');
})
.catch((e) => {
console.error('加分失败:', e);
});返回示例(JSON):
json
{
"action": "ADD_SCORE",
"error": false,
"data": null
}参数与返回结构
通用调用参数示例(参考,具体参数以各能力为准):
- getProfile:``(通常无需额外参数)
- purchase:
{ productId: string } - storageSet:
{ key: string, value: any } - storageGet:
{ key: string } - addScore:
{ score: number, scoreType: string }
成功返回统一结构:
typescript
{
action: string; // 本次调用的动作名(如 'GET_PROFILE')
error: false; // 成功时为 false(失败时 promise 会直接 reject)
data: any; // 原生回包内容,字段由具体动作定义
}- 失败行为:
- Promise 将直接 reject 一个
Error对象。 - 建议在
.catch中记录错误并进行重试或提示。
- Promise 将直接 reject 一个
重要说明
为确保 SDK 正常工作,请勿覆盖或删除以下关键全局对象:
window.GameTokSDK(SDK 主接口)
示例(错误用法,请勿复制):
javascript
// 危险!将导致 iOS 或 Android 通信失效
window.GameTokSDK = {};
window.GameTokSDK = null;
delete window.GameTokSDK;完整示例
javascript
// 获取用户资料
GameTokSDK.getProfile({})
.then((resp) => {
console.log('Profile:', resp.data);
})
.catch((e) => {
console.error('获取个人资料失败:', e);
});
// 存储数据
GameTokSDK.storageSet({ key: 'config', value: { lang: 'zh-CN' } })
.then(() => {
console.log('存储成功');
})
.catch((e) => {
console.error('存储失败:', e);
});
// 读取数据
GameTokSDK.storageGet({ key: 'config' })
.then((resp) => {
console.log('Config:', resp.data.value);
})
.catch((e) => {
console.error('读取失败:', e);
});
// 购买示例
GameTokSDK.purchase({ productId: 'HAB.WATER.10.COINS' })
.then((resp) => {
console.log('Purchase:', resp.data);
})
.catch((e) => {
console.error('购买失败:', e);
});
// 加分示例
GameTokSDK.addScore({ score: 5, scoreType: 'score' })
.then(() => {
console.log('Score added');
})
.catch((e) => {
console.error('加分失败:', e);
});