H5 微端接入指南
NOTE: 具体接口一定要以DEMO示例结合自身项目实现。本文档大部分以安卓为例。
启动游戏
请求URL
- 研发提供
请求格式
- 请求方式: HTTP GET
- 参数说明: 参数同
初始化回调,研发可自行决定使用
| 参数 | 类型 | 描述 |
|---|---|---|
| channelId | int | 渠道ID区分各渠道包标识 |
| os | String | 手机系统:安卓=android,苹果=ios |
1 JS调用Native接口
1.0 初始化接口
- 调用时机:游戏native_js加载完成时调用
- 接口名称:OnlySDK.initsdk();
- 请求参数:无
funtion initsdk(){
if($os == "ios"){
window.webkit.messageHandlers.initsdk.postMessage(null);
} else {
window.OnlySDK.initsdk()
}
}
1.1 登录接口
- 调用时机:在
2.1初始化成功后调用 - 接口名称:OnlySDK.login();
示例代码:
function initResult(code, msg, data) {
// 处理初始化回调数据 code,data
if (code != 1) {
// 初始化失败提示
return;
}
// 初始化成功调用登录
if($os == "ios"){
window.webkit.messageHandlers.login.postMessage(null);
} else {
window.OnlySDK.login()
}
}
1.2 数据提交接口(必接)
- 调用时机:在
进入游戏、角色升级、等级提升、退出游戏时调用 - 接口名称:OnlySDK.stat(data);
data为JSON格式字符串 - 请求参数:
| 参数 | 类型 | 必选 | 描述 |
|---|---|---|---|
| dataType | int | 是 | 1创建角色,2进入游戏,3等级提升,4登出游戏, 6充值到账 |
| roleID | String | 是 | 角色id |
| roleName | String | 是 | 角色名称 |
| roleLevel | String | 是 | 角色等级 |
| serverID | String | 是 | 服务器id |
| serverName | String | 是 | 服务器名称 |
| moneyNum | int | 是 | 剩余金币 没有传0 |
| roleCreateTime | long | 是 | 创角时间戳 |
| roleLevelUpTime | long | 是 | 升级时间戳 |
| vip | String | 是 | vip等级 没有传“0” |
| orderId | String | 是 | 平台订单号 dataType=6时 |
| productId | String | 是 | 商品id dataType=6时 |
| price | int | 是 | 价格:单位(分) dataType=6时 |
示例代码:
var timestamp = (new Date()).getTime()/1000; //单位秒
var x = {
dataType: 2, // 1创建角色,2进入游戏,3等级提升,4登出游戏, 6充值到账
roleID: "role_100",
roleName: "test_112",
roleLevel: "10",
serverID: 10,
serverName: "黄鹤",
moneyNum: 100, //当前角色身上拥有的游戏币数量
roleCreateTime: timestamp, //角色创建时间 Unix时间戳:秒
roleLevelUpTime: timestamp, //角色升级时间 Unix时间戳:秒
vip: "1"
};
var data = JSON.stringify(x);
if($os == "ios"){
window.webkit.messageHandlers.statData.postMessage(data);
} else {
window.OnlySDK.statData(data)
}
注意一定要把对象通过JSON.stringify(x)转化。
在datatype不同的事件时都要调用一次提交数据。
1.2 数据提交接口(已过时)
1.2 数据提交接口(已过时)
- 调用时机:在
进入游戏、角色升级、选择服务器、等级提升、退出游戏时调用 - 接口名称:OnlySDK.submit(data);
data为JSON格式字符串 - 请求参数:
| 参数 | 类型 | 必选 | 描述 |
|---|---|---|---|
| dataType | int | 是 | 1-选服、2-创建角色、3-进入游戏、4-等级提升、5-退出游戏、6-充值到账 |
| roleID | String | 是 | 角色id |
| roleName | String | 是 | 角色名称 |
| roleLevel | String | 是 | 角色等级 |
| serverID | String | 是 | 服务器id |
| serverName | String | 是 | 服务器名称 |
| moneyNum | int | 是 | 剩余金币 没有传0 |
| roleCreateTime | long | 是 | 创角时间戳 |
| roleLevelUpTime | long | 是 | 升级时间戳 |
| vip | String | 是 | vip等级 没有传“0” |
| orderId | String | 是 | 平台订单号 dataType=6时 |
| productId | String | 是 | 商品id dataType=6时 |
| price | int | 是 | 价格:单位(分) dataType=6时 |
示例代码:
var timestamp = (new Date()).getTime()/1000; //单位秒
var x = {
dataType: 2, // 1:选择服务器 , 2:创建角色 , 3:进入游戏 , 4:等级提升 , 5:退出游戏
roleID: "role_100",
roleName: "test_112",
roleLevel: "10",
serverID: 10,
serverName: "黄鹤",
moneyNum: 100, //当前角色身上拥有的游戏币数量
roleCreateTime: timestamp, //角色创建时间 Unix时间戳:秒
roleLevelUpTime: timestamp, //角色升级时间 Unix时间戳:秒
vip: "1"
};
var data = JSON.stringify(x);
if($os == "ios"){
window.webkit.messageHandlers.submitData.postMessage(data);
} else {
window.OnlySDK.submitData(data)
}
注意一定要把对象通过JSON.stringify(x)转化。在datatype不同的事件时都要调用一次提交数据。
1.3 支付接口
- 调用时机:登录成功后,游戏进行支付操作时
- 接口名称:OnlySDK.pay(data);
data为JSON格式字符串 - 请求参数:
| 参数 | 类型 | 必选 | 描述 |
|---|---|---|---|
| productId | String | 是 | 商品id |
| productName | String | 是 | 商品名称 |
| productDesc | String | 是 | 商品描述 |
| currency | String | 是 | 货币类型:人民币-CNY |
| price | int | 是 | 价格:单位(分) |
| ratio | int | 是 | 兑换比例 比如:1元=10钻石 ratio=10 |
| buyNum | int | 是 | 购买数量 |
| coinNum | int | 是 | 剩余金币 没有传0 |
| payNotifyUrl | String | 是 | 支付回调Url |
| orderID | String | 是 | 订单号 |
| extension | String | 是 | 透传信息 |
| roleID | String | 是 | 角色id |
| roleName | String | 是 | 角色名称 |
| roleLevel | String | 是 | 角色等级 |
| serverID | String | 是 | 服务器id |
| serverName | String | 是 | 服务器名称 |
| vip | String | 是 | vip等级 没有传“0” |
代码示例:
var timestamp = (new Date()).getTime()/1000;
var x = {
productId: "1",
productName: "元宝",
productDesc: "购买100元宝",
currency: "CNY", // 货币类型,比如CNY,ISO4217
price: 600, //单位分
ratio: 10, //兑换比率(比如1元等于10元宝填10,1元等于1元宝填1)
buyNum: 1, //购买数量
coinNum: 100, //当前玩家身上拥有的游戏币数量
serverId: "10",
serverName: "测试",
roleId: "1",
roleName: "测试角色名",
roleLevel: 1,
payNotifyUrl: "http://www.game.com/pay/callback", //支付成功回调地址
vip: "1",
orderID: timestamp + "demo", //cp订单号
extension: "" //透传信息 , 充值成功,回调游戏服的时候,会原封不动返回
};
var data = JSON.stringify(x);
if($os == "ios"){
window.webkit.messageHandlers.pay.postMessage(data);
} else {
window.OnlySDK.pay(data)
}
注意一定要把对象通过JSON.stringify(x)转化。
1.4 登出接口
- 调用时机:登出游戏时调用
- 接口名称:OnlySDK.logout();
- 请求参数:无
funtion logout(){
if($os == "ios"){
window.webkit.messageHandlers.logout.postMessage(null);
} else {
window.OnlySDK.logout()
}
}
1.5 切换账号接口
- 调用时机:游戏内切换账号调用
- 接口名称:OnlySDK.switchAccount();
- 请求参数:无
funtion switchAccount(){
if($os == "ios"){
window.webkit.messageHandlers.switchAccount.postMessage(null);
} else {
window.OnlySDK.switchAccount()
}
}
1.6 获取设备信息接口
调用时机:游戏init完成后可调用
接口名称:OnlySDK.getDevicesInfo();
请求参数:无
返回参数:
json字符串,例如:{"packageName":"com.biguohw.jqcm","versionName":"1.1.2","versionCode":112,"imei":"8934093450923094","imsi":"3249459349983894","net":"WIFI","mac":"3C:86:D1:20:E7:A1","ip":"192.168.0.137","deviceId":"","androidId":"7d2535c671b604d6","deviceBrand":"vivo","deviceOsVersion":"10","deviceModel":"V1932A","screenWidth":1080,"screenHeight":2400,"densityDpi":480,"language":"zh","operatorName":"","serial":"unknown","appVersion":"1.1.2","ssid":"qcom","operator":"","cpu":"arm64-v8a","deviceInfo":"PD1932","hardware":"<unknown ssid>"}
参数类型说明:
参数 类型 packageName 应用包名 versionName 应用版本 versionCode 版本号 imei 设备imei imsi 设备标识码 net 网络类型 mac 设备mac地址 ip 设备网络ip地址 deviceId 设备id androidId 当前应用的androidId deviceBrand 系统品牌 deviceOsVersion 系统版本 deviceModel 系统品牌型号 screenWidth 屏幕宽度 screenHeight 屏幕高度 densityDpi 屏幕像素密度 language 当前系统语言类型 operatorName sim卡运营商信息 serial 硬件序列号 appVersion 应用版本 ssid 局域网名称 operator sim卡运营商号 cpu 设备cpu deviceInfo 设备参数 hardware 设备硬件名称
funtion getDevicesInfo(){
if($os == "ios"){
window.webkit.messageHandlers.getDevicesInfo.postMessage(null);
} else {
window.OnlySDK.getDevicesInfo()
}
}
1.7 获取渠道参数接口
- 调用时机:游戏内切换账号调用
- 接口名称:OnlySDK.getChannelMetaData(valueName);//valuename需要和渠道要
- 请求参数:string 类型 valueName
funtion getChannelMetaData(){
if($os == "ios"){
window.webkit.messageHandlers.getChannelMetaData.postMessage(valueName);
} else {
window.OnlySDK.getChannelMetaData(valueName)
}
}
1.8 后退接口
- 调用时机:游戏内切换账号调用
- 接口名称:OnlySDK.goback();
- 请求参数:
funtion gobacktogame(){
if($os == "ios"){
window.webkit.messageHandlers.goback.postMessage();
} else {
window.OnlySDK.goback()
}
}
1.9 充值到账接口
- 调用时机:游戏内切换账号调用
- 接口名称:OnlySDK.payComplete(data);
data为JSON格式字符串 - 请求参数:
| 参数 | 类型 | 必选 | 描述 |
|---|---|---|---|
| orderId | String | 是 | 平台订单号 |
| productId | String | 是 | 商品id |
| productName | String | 是 | 商品名称 |
| currency | String | 是 | 货币类型:人民币-CNY |
| price | int | 是 | 价格:单位(分) |
| cpOrderId | String | 是 | 游戏订单号 |
1.10 获取系统语言
- 调用时机:需要时进行调用
- 调用说明:
js 调用 iOS:
window.webkit.messageHandlers.getSystemLanguage.postmessage();
iOS 注入JS的方法: funtion getSystemLanguage(locale)
NSString *localeString = @"cn";
[NSString stringWithFormat:@"getSystemLanguage('%@')",localeString];
Android 方法:
window.OnlySDK.getSystemLanguage()
- 语言参数对应表:
| 语言代码 | 语言名称 |
|---|---|
| en | 英语 |
| en-US | 英语 美国 |
| en-GB | 英语 英国 |
| en-AU | 英语 澳大利亚 |
| zh | 中文 |
| zh-CN | 中文 简体 |
| zh-TW | 中文 繁体 |
| vi | 越南语 |
| vi-VI | 越南语 |
| de | 德语 |
| de-DE | 德语 德国 |
| de-CH | 德语 瑞士 |
| fr | 法语 |
| fr-FR | 法语 法国 |
| fr-CA | 法语 加拿大 |
| ru | 俄语 |
| ru-RU | 俄语 |
| my | 缅甸 |
2 Native调用JS接口(被调用)
2.1 初始化回调
- 调用时机:移动端初始化完成后会调用此接口
- 调用方式:移动端调用JS
function initResult(code, msg, data) {
var text=code+msg;
document.getElementById("demo").innerHTML=text;
}
- 返回结果
| 参数 | 类型 | 必选 | 描述 |
|---|---|---|---|
| code | int | 是 | 状态码 1-成功 、2-失败 |
| msg | String | 是 | 状态信息 |
| data | String | 是 | json包含:渠道id-channelId、手机系统-os (已废弃) |
2.2 登录成功用户信息回调
- 调用时机:移动端登录完成后会调用此接口
- 调用方式:移动端调用JS
JS端需要接受参数传递给游戏服务器做token校验
function loginSuc(tokenJson) {
document.getElementById("demo").innerHTML=tokenjson;
}
tokenJson示例:
{“accountChannelId":3023,"channelId":3023,"extension":"","newUser":true,"sdkUserId":"0edf568f4daf47f5a7392e65f2d8964a",
"sdkUsername":"xiy4ma0t","suc":true,"token":"3023Xabda8102f4aa710f268fc46293f6b5f5jx2vr86z","userId":857535,
"username":"1560927205691.begind"}
2.3 登录失败回调
- 调用时机:移动端登录失败后会调用此接口
- 调用方式:移动端调用JS
function loginFail(code, msg) {
var text=code+msg;
document.getElementById("demo").innerHTML=text;
}
2.4 登出回调
- 调用时机:移动端登出后会调用此接口
- 调用方式:移动端调用JS
function logoutSuc() {
document.getElementById("demo").innerHTML="logout suc";
}
2.5 支付结果客户端回调
function payResult(code, msg) {
var text=code+msg;
document.getElementById("demo").innerHTML=text;
}
- 返回结果
| 参数 | 类型 | 必选 | 描述 |
|---|---|---|---|
| code | int | 是 | 状态码 10-成功 、11-失败 |
| msg | String | 是 | 状态信息 |
2.6 其他事件回调(可选)
function sdkResult(code, msg) {
var text=code+msg;
document.getElementById("demo").innerHTML=text;
}
3.1 新增:广告商初始化
- 调用时机:登录游戏成功 或 进入游戏时。注意:请先和发行确认,必要时可由发行直接调用。
- 调用方式:JS端调用安卓
- 请求参数:无
- 代码示例:
function adinit(){
window.OnlySDK.adinit();
}
- 移动端回调:无
3.2 广告加载:激励视频
调用时机:广告商接口调用完成,需要播放广告前
调用方式:JS端调用安卓
请求参数:
| 参数 | 类型 | 必选 | 描述 |
|---|---|---|---|
| userId | String | 是 | 用户ID |
| posId | String | 是 | 广告ID |
| cpOrderId | String | 是 | 广告发货订单号 |
| rewardName | String | 是 | 商品名称 |
| rewardAmount | int | 是 | 商品数量 |
| serverId | String | 是 | 区服id |
| serverName | String | 是 | 区服信息 |
| roleId | String | 是 | 角色ID |
| roleName | String | 是 | 角色名称 |
| roleLevel | String | 是 | 角色等级 |
| extension | String | 是 | 扩展信息 没有传“无” |
| notifyUrl | String | 是 | 游戏发货地址 |
- 代码示例
<!-- 广告功能 加载激励视频 -->
function adload(){
var timestamp = (new Date()).getTime();
var x = {
userId: "userId123",
posId: "1",
cpOrderId: timestamp,
rewardName: "仙缘",
rewardAmount: 60,
serverId: 10,
serverName: "黄鹤",
roleId: "roleId111",
roleName: "role123",
roleLevel: 1,
extension : "extension",
notifyUrl : "http://callback.url.com",
};
var z = JSON.stringify(x)
window.OnlySDK.adload(z);
}
}
注意一定要把对象通过JSON.stringify(x)转化。
- 移动端回调:参考
3.4广告回调
3.3 广告播放:激励视频
调用时机:获取广告加载回调成功后,在需要时调用。注意:请先和发行确认,必要时可由发行直接调用。
调用方式:JS端调用安卓
请求参数:无
代码示例:
function adplay(){
window.OnlySDK.adplay();
}
- 移动端回调:参考
3.4广告回调
3.4 广告回调
调用方式:移动端回调JS
回调参数
| 参数 | 类型 | 必选 | 描述 |
|---|---|---|---|
| code | int | 是 | 状态码 |
| msg | String | 是 | 消息 |
- 代码示例
function adResult(code,msg){
var text=code+msg;
document.getElementById("demo").innerHTML=text;
}
- 广告状态码示例
| code | 事件类型 | 描述 |
|---|---|---|
| 70 | 广告加载完成 | 广告加载完成可以播放 |
| 71 | 广告加载中 | 广告正在加载 |
| 72 | 广告加载失败 | 广告加载失败 |
| 80 | 广告播放完成 | 广告播放完成 |
| 81 | 点击关闭按钮回到游戏 | 点击广告关闭按钮并回到游戏 |
| 82 | 广告奖励事件 | 第三方事件触发(暂无作用) |
| 83 | 广告播放失败 | 广告播放失败 |
| 84 | 广告播放跳过 | 广告播放未完成,跳过 |
当code=80时需要 移动端会传递发货信息给游戏客户端,由游戏客户端做后续发货处理,msg示例:
{"productName":仙缘,"count":100,"userId":"userid123123","ext":"透传信息"}
4.1海外:账号绑定
- 注意:此接口先调用查询绑定功能 ,若未绑定会直接调用绑定账号
- 调用时机:登录游戏后
- 调用方式:JS端调用安卓
- 请求参数:无
- 代码示例:
function bind(){
window.OnlySDK.bindAcc();
}
- 移动端回调:参考
5.1回调
4.1.1海外:查询账号绑定状态(可选)
调用时机:登录游戏后
调用方式:JS端调用安卓
请求参数:无
代码示例:
function queryBind(){
window.OnlySDK.queryBind();
}
- 移动端回调:参考
5.1回调
4.2海外:分享
调用时机:登录游戏后
调用方式:JS端调用安卓
代码示例:
<!-- 分享 -->
function share_sdk(){
var x = {
shareId: 123, //分享ID 运营提供
shareName: "分享名称", //分享name 运营提供
roleName: "角色名称",
roleServer: "角色所在服务器",
code: 111111, //邀请码,
};
var z = JSON.stringify(x)
window.OnlySDK.shareSdk(z);
}
}
- 移动端回调:参考
5.1回调
4.3海外:查询商品价格列表
调用时机:登录后,支付前
调用方式:JS端调用安卓
请求参数:无
代码示例:
function queryp(){
window.OnlySDK.queryProducts();
}
- 移动端回调:参考
5.1回调
4.4海外:打开网页(推特 巴哈等)
调用方式:JS端调用安卓
请求参数:无
代码示例:
function openUrl( url ){
window.OnlySDK.openUrl( url );
}
4.5海外:上报打点接口
- 调用方式: JS调用安卓
- 请求参数: string | 打点字符串(运营提供)
- 代码示例:
function dadian( event ){
window.OnlySDK.doEvent( event );
}
5.1 海外回调
调用方式:移动端回调JS
回调参数
| 参数 | 类型 | 必选 | 描述 |
|---|---|---|---|
| code | int | 是 | 状态码 |
| msg | String | 是 | 消息 |
- 代码示例
function hwResult(code,msg){
var text=code+msg;
document.getElementById("demo").innerHTML=text;
}
- 状态码示例
| code | 事件类型 |
|---|---|
| 23 | 分享成功 |
| 24 | 分享失败 |
| 50 | 绑定成功 |
| 51 | 绑定失败 |
| 52 | 已绑定无需再次绑定 |
| 53 | 未绑定 |
| 40 | 查询商品列表成功 |
| 41 | 查询商品列表失败 |
- 查询成商品列表功时返回msg如下所示
拉取成功时status = true
"{"currency_symbol": "USD","status":true,"purchaselist":"{"1001":"$0.99","1002":"$4.99"}"}"
currency_symbol 币种
purchaselist商品列表
productId 商品Id
price 价格
拉取失败时status = false
"{"status":false,"errorno":"0"}"
errorno: 0:查询失败,游戏可以再次拉起查询,请不要一直尝试。
-1: 因为某些特殊原因,请显示默认货币