更新日期:2019-04-29H5游戏上架H5渠道接入文档
http://h5.sdk.quicksdk.net/webGame/play/productCode/680675730332272846097893806XXXXX/channelCode/XXXX
备注:
productCode后面的内容替换为QKSDK后台自己游戏产品的productCode;
channelCode后面的内容替换为对应的渠道号,到该链接搜索渠道关键字获取:http://www.quicksdk.com/channel.html
QuickSDK-H5 是一套建立在H5手游和游戏渠道之间的接入中间件,用以统一各H5渠道的差异化,游戏研发只需接入QuickSDK即可直接上线所有H5游戏平台. 并可将游戏链接通过工具加壳成微端用以投放.
QuickSDK的工作流程如下:
· 在QuickSDK后台创建对应平台的产品。
· 游戏研发同学按照本文档接入登录、支付、服务器通知等接口
· 运营同学在QuickSDK后台添加配置各渠道参数.
· 使用对应渠道生成的最终游戏链接进行游戏。
QuickSDK登录流程如下:
· QuickSDK会以iframe的形式加载游戏的链接,同时会给链接中附加token这个参数。
· 游戏服务器使用token调用QuickSDK API换取用户信息,完成用户登录。
· (可选)QuickSDK返回的用户信息中,isLogin为false则表示用户为系统自动为其分配的游客帐号,此帐号虽可进行游戏,但更换设备可能丢失,游戏可通过调用JS API QuickSDK.login() 主动调起登录界面要求完成登录。
备注: 若游戏在QuickSDK加载完毕后台配置的链接后,会产生跳转.则需注意2点:
1.若跳转后的链接以GET参数传递uid.应对uid做签名验证防止篡改.
2.跳转后的链接应保持原有QuickSDK通过iframe加载的所有GET参数.
QuickSDK支付流程如下:
· 当用户在游戏点击购买,游戏可调用QuickSDK.pay(orderInfo,callback)方法调起各自渠道的支付页面.
· 当用户完成购买够,QuickSDK会向游戏事前配置的发送地址POST数据.
· 游戏服务器接收到QuickSDK服务器通知后,根据通知内容向用户发送道具.
· 游戏客户端也可以从callback中渠道支付通知,但此通知仅做UI展示,不能作为发货依据.
引入类库
http://h5.sdk.quicksdk.net/static/lib/libQuickSDK.js
或 https://sdkapi02.quicksdk.net/static/lib/libQuickSDK.js
并调用JS API完成SDK初始化,调用代码如下:
QuickSDK.init(productCode,productKey,debug,channelId);
productCode、productKey由QuickSDK后台分配
debug表示是否输出调试信息,可传true|false.
channelId渠道号,此参数可通过webgameApi/getUserInfo API获取.
假设游戏链接为http://play.game.com . QuickSDK会在iframe中加载游戏链接并附带Token信息。如下:
http://play.game.com?token=@172@84@167@222@216@137@164@152@108@104@104@106@168@162@174...
游戏服务器获取GET参数中的token调用QuickSDK的API:
http://h5.sdk.quicksdk.net/webGameApi/getUserInfo?token=@172@84@167@222@216@137@164@152
注意:此API应由游戏服务器请求,不能在浏览器使用ajax请求.
即可获取玩家的UID信息。接口返回参数如下:
{"status":false,"message":"tokenu6709u8bef","data":{"uid":"","username":"","token":"","isLogin":false,"channelId":301}}
针对H5投放平台,QuickSDK会默认生成游客帐号,登录不是必须的,游戏可根据自身情况调用登录接口要求用户完成登录.
调用QuickSDK的login方法示例如下:
QuickSDK.login(function(callbackData){ var message; if(callbackData.status){ message = 'GameDemo:QuickSDK登录成功: uid=>' + callbackData.data.uid; }else{ message = 'GameDemo:QuickSDK登录失败:' + callbackData.message; } document.getElementById('loginMessage').innerHTML = message; });
调用后,会触发回调函数.
回调的callbackData对象类型如下:
字段 | 类型 | 说明 |
status | bool | 是否登录成功,true成功,false失败 |
data | uid | 渠道UID |
username | 渠道Username | |
token | 渠道token | |
isLogin | 是否游客,登录后此值为true | |
channelId | 渠道ID | |
message |
JSON表现如下:
{“status”:true,”data”:{“uid”:”123”,”username”:”quicksdk”,”token”:””,”isLogin”:true},”message”:”登录成功”}
用户点击购买时,游戏可调用pay方法传入orderInfo对象调起支付页面.
调用示例如下:
var orderInfo = new Object(); orderInfo.productCode = “05425578266356246482673853629430”; orderInfo.uid = “uid”; orderInfo.userRoleId = 'roleId1'; orderInfo.userRoleName = '小朋友'; orderInfo.serverId = 1; orderInfo.userServer = '内测1区'; orderInfo.userLevel = 1; orderInfo.cpOrderNo = 'cpOrderNo000001'; orderInfo.amount = '0.01'; orderInfo.subject = '大袋钻石'; orderInfo.desc = '一大袋钻石60个'; orderInfo.callbackUrl = ''; orderInfo.extrasParams = ''; orderInfo.goodsId = ''; orderInfo.count = 60; orderInfo.quantifier = '个'; var orderInfoJson = JSON.stringify(orderInfo); QuickSDK.pay(orderInfoJson,function(payStatusObject){ console.log('GameDemo:下单通知' + JSON.stringify(payStatusObject)); });
支付后,可触发回调函数,函数中可获取是否支付成功,但需要注意,此结果仅仅作为UI展示(或完全不用),发货应以服务器通知为准.
orderInfo对象如下:
字段 | 类型 | 说明 |
productCode | 必传 | QuickSDK后台自动分配的参数 |
uid | 必传 | 渠道UID |
username | 选传 | 渠道username |
userRoleId | 必传 | 游戏内角色ID |
userRoleName | 必传 | 游戏角色 |
serverId | 必传 | 角色所在区服ID |
userServer | 必传 | 角色所在区服 |
userLevel | 必传 | 角色等级 |
cpOrderNo | 必传 | 游戏内的订单,服务器通知中会回传 |
amount | 必传 | 购买金额(元) |
count | 必传 | 购买商品个数 |
quantifier | 必传 | 购买商品单位,如,个 |
subject | 必传 | 道具名称 |
desc | 选传 | 道具描述 |
callbackUrl | 选传 | 服务器通知地址 |
extrasParams | 选传 | 透传参数,服务器通知中原样回传 |
goodsId | 必传 | 商品ID |
注:选传的字段值可以为空,但是对象必须包含此属性.
回调函数payStatusObject对象中status为true时为支付成功.
服务器通知接口参见《QuickSDK服务器对接文档》
调用示例:
QuickSDK.logout(function(logoutObject){console.log('Game:成功退出游戏');})
logoutObject对象包含status和message属性.
游戏需要在玩家登录或角色发生变化调用此接口.
调用示例如下:
function uploadGameRoleInfo(){ var roleInfo = new Object(); roleInfo.isCreateRole = true; roleInfo.roleCreateTime = 1490598150; roleInfo.uid = 12; roleInfo.serverId = 1; roleInfo.serverName = '内测1区'; roleInfo.userRoleName = '小朋友'; roleInfo.userRoleId = 'roleId1'; roleInfo.userRoleBalance = 1000; roleInfo.vipLevel = 1; roleInfo.userRoleLevel = 1; roleInfo.partyId = 1; roleInfo.partyName = '行会名称'; roleInfo.gameRoleGender = '男'; roleInfo.gameRolePower = 100; roleInfo.partyRoleId = 1; roleInfo.partyRoleName = '会长'; roleInfo.professionId = '1'; roleInfo.profession = '武士'; roleInfo.friendlist =''; var roleInfoJson = JSON.stringify(roleInfo); QuickSDK.uploadGameRoleInfo(roleInfoJson,function(response){ if(response.status){ document.getElementById('uploadMessage').innerHTML = '提交信息成功'; }else{ document.getElementById('uploadMessage').innerHTML = response.message; } }); }
roleInfo对象字段如下
字段 | 类型 | 说明 |
isCreateRole | 必传 | 仅创建角色时传true,更新信息时传false |
uid | 必传 | UID |
username | 必传 | username |
serverId | 必传 | 区服ID |
serverName | 必传 | 区服名称 |
userRoleId | 必传 | 游戏内角色ID |
userRoleName | 必传 | 游戏角色 |
userRoleBalance | 必传 | 角色游戏内货币余额 |
vipLevel | 必传 | 角色VIP等级 |
userRoleLevel | 必传 | 角色等级 |
partyId | 必传 | 公会/社团ID |
partyName | 必传 | 公会/社团名称 |
gameRoleGender | 选传 | 角色性别 |
gameRolePower | 选传 | 角色战力 |
partyRoleId | 选传 | 角色在帮派中的ID |
partyRoleName | 选传 | 角色在帮派中的名称 |
professionId | 选传 | 角色职业ID |
profession | 选传 | 角色职业名称 |
friendlist | 选传 | 角色好友列表 |
注:选传的字段值可以为空,但是对象必须包含此属性.
QuickSDK提供数据投递平台。CP可在游戏关键节点向此平台投递自定义事件,后台会记录自定义事件,并根据事件达成数,生成转化漏斗。
数据投递API为:
QuickSDK.dataPut("闪屏完成","deviceId=87774746263457&gameVersion=1.11");
由于游戏需要和SDK通信,故游戏页面需要发送允许跨域的HTTP Header : Access-Control-Allow-Origin
另附H5游戏上架H5渠道后台配置流程:https://www.quicksdk.com/doc-214.html
李先生:13880511661
QQ:48157910
赵先生:15390049857
QQ:1077535763
孙女士:13551010407
QQ:1799614139
QQ群:698731538