H5 微端接入指南

NOTE: 具体接口一定要以DEMO示例结合自身项目实现。本文档大部分以安卓为例。

启动游戏

请求URL

  • 研发提供

请求格式

  • 请求方式: HTTP GET
  • 参数说明: 参数同初始化回调,研发可自行决定使用
参数类型描述
channelIdint渠道ID区分各渠道包标识
osString手机系统:安卓=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格式字符串
  • 请求参数:
参数类型必选描述
dataTypeint1创建角色,2进入游戏,3等级提升,4登出游戏, 6充值到账
roleIDString角色id
roleNameString角色名称
roleLevelString角色等级
serverIDString服务器id
serverNameString服务器名称
moneyNumint剩余金币 没有传0
roleCreateTimelong创角时间戳
roleLevelUpTimelong升级时间戳
vipStringvip等级 没有传“0”
orderIdString平台订单号 dataType=6时
productIdString商品id dataType=6时
priceint价格:单位(分) 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 数据提交接口(已过时)

  • 调用时机:在进入游戏、角色升级、选择服务器、等级提升、退出游戏时调用
  • 接口名称:OnlySDK.submit(data); data为JSON格式字符串
  • 请求参数:
参数类型必选描述
dataTypeint1-选服、2-创建角色、3-进入游戏、4-等级提升、5-退出游戏、6-充值到账
roleIDString角色id
roleNameString角色名称
roleLevelString角色等级
serverIDString服务器id
serverNameString服务器名称
moneyNumint剩余金币 没有传0
roleCreateTimelong创角时间戳
roleLevelUpTimelong升级时间戳
vipStringvip等级 没有传“0”
orderIdString平台订单号 dataType=6时
productIdString商品id dataType=6时
priceint价格:单位(分) 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格式字符串
  • 请求参数:
参数类型必选描述
productIdString商品id
productNameString商品名称
productDescString商品描述
currencyString货币类型:人民币-CNY
priceint价格:单位(分)
ratioint兑换比例 比如:1元=10钻石 ratio=10
buyNumint购买数量
coinNumint剩余金币 没有传0
payNotifyUrlString支付回调Url
orderIDString订单号
extensionString透传信息
roleIDString角色id
roleNameString角色名称
roleLevelString角色等级
serverIDString服务器id
serverNameString服务器名称
vipStringvip等级 没有传“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当前系统语言类型
    operatorNamesim卡运营商信息
    serial硬件序列号
    appVersion应用版本
    ssid局域网名称
    operatorsim卡运营商号
    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格式字符串
  • 请求参数:
参数类型必选描述
orderIdString平台订单号
productIdString商品id
productNameString商品名称
currencyString货币类型:人民币-CNY
priceint价格:单位(分)
cpOrderIdString游戏订单号

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;
}
  • 返回结果
参数类型必选描述
codeint状态码 1-成功 、2-失败
msgString状态信息
dataStringjson包含:渠道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;
}
  • 返回结果
参数类型必选描述
codeint状态码 10-成功 、11-失败
msgString状态信息

 

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端调用安卓

  • 请求参数:

参数类型必选描述
userIdString用户ID
posIdString广告ID
cpOrderIdString广告发货订单号
rewardNameString商品名称
rewardAmountint商品数量
serverIdString区服id
serverNameString区服信息
roleIdString角色ID
roleNameString角色名称
roleLevelString角色等级
extensionString扩展信息 没有传“无”
notifyUrlString游戏发货地址
  • 代码示例
<!-- 广告功能 加载激励视频 -->
        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

  • 回调参数

参数类型必选描述
codeint状态码
msgString消息
  • 代码示例
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

  • 回调参数

参数类型必选描述
codeint状态码
msgString消息
  • 代码示例
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: 因为某些特殊原因,请显示默认货币