Skip to content

接入H5渠道SDK

IMPORTANT

当我们需要在U8SDK中接入一个新渠道SDK时,我们心里应该牢记一点:接入过程和游戏工程没有半点关系。也就是说,游戏开发和SDK接入是完全解耦的。

所以,接入的时候,不要想着游戏中怎样怎样,严格按照下面的步骤进行接入,然后使用Demo母包进行测试即可。

所有的渠道接入文件(一个js文件)都放在一个统一的目录,默认是放在u8-h5-client/public/js/channels目录下。

创建接入文件

每个H5渠道的接入文件,就是一个独立的js文件。 所以,我们可以在上面channels目录下,创建一个js文件。 js文件命名不要采用中文和特殊符号。

实现代码

NOTE:所有渠道SDK需要接入的方法,都大同小异。我们将其归为三大类: 1、初始化: 大部分渠道都有初始化方法 2、用户相关:包含[登录]、[登出]、[提交玩家数据]、[退出确认框] 3、支付:充值

创建好js文件后,我们就可以在里面写对应H5渠道的接入代码了。 你可以将如下接入代码的模板拷贝到你的js文件中:

js

// 初始化接口
// u8Params: 当前U8SDK自己的参数
//  --appID: U8SDK后台游戏管理中该游戏的appID
//  --appKey: U8SDK后台游戏管理中该游戏的appKey
//  --channelID: 当前渠道的渠道号

// channelParams: 渠道配置参数,U8后台-》渠道配置中,配置的H5渠道客户端参数,格式{key:value,...},key为渠道商中参数meta中定义的key    

function u8CallChannelInit(u8Params, channelParams, callback) {
    console.log('channel sdk begin to init->u8CallChannelInit...')

    //TODO: 调用渠道初始化逻辑

    if (callback) {
        callback(true, {})
    }
}


// 登录接口
function u8CallChannelLogin(callback) {
    console.log('channel sdk begin to login->u8CallChannelLogin...')

    //TODO: 调用渠道登录逻辑    

    if (callback) {
        callback(true, {})
    }
}


// 登出接口
function u8CallChannelLogout(callback) {
    console.log('channel sdk begin to logout->u8CallChannelLogout...')

    //TODO: 调用渠道登出逻辑   

    if (callback) {
        callback(true)
    }
}

// 支付接口
// u8User: 当前已登录用户信息
//  --userID: U8SDK中该用户全局唯一ID
//  --sdkUserID: 对应渠道平台中该用户的唯一ID
//  --username: U8SDK中生成的用户名
//  --sdkUsername: 渠道平台中该用户的用户名(可能为空)

// u8Order: 当前支付的订单对象
//  --orderID:        U8Server生成的唯一订单号,需要传入渠道的cpOrderID和扩展数据字段中
//  --productId:      商品ID
//  --productName:    商品名称
//  --productDesc:    商品描述
//  --price:          商品价格(整形,单位元)
//  --ratio:          兑换比例,暂时无用
//  --buyNum:         购买数量,一般固定为1
//  --coinNum:        当前角色身上拥有的游戏币数量
//  --serverId:       服务器ID
//  --serverName:     服务器名称
//  --roleId:         角色ID
//  --roleName:       角色名称
//  --roleLevel:      角色等级
//  --payNotifyUrl:   支付回调地址,支付成功后,U8Server通知给游戏服务器的URL地址
//  --vip:            角色VIP等级
//  --extension:      下单后,U8Server返回的扩展数据,如果调用渠道支付接口需要传入什么服务端返回的参数,就从这里解析
//  --cpOrderId:      游戏自己的订单号

function u8CallChannelPay(u8User, u8Order, callback) {
    console.log('channel sdk begin to pay->u8CallChannelPay...')

    //TODO: 调用渠道支付逻辑   

    if (callback) {
        callback(true)
    }
}


// 角色数据上报接口
// roleData: 角色数据
//  --dataType:            上报时机,2:创建角色;3:进入游戏;4:等级升级;5:退出游戏              
//  --roleID:              角色ID
//  --roleName:            角色名称
//  --roleLevel:           角色等级
//  --serverID:            服务器ID
//  --serverName:          服务器名称
//  --moneyNum:            角色身上拥有的游戏币数量
//  --roleCreateTime:      角色创建时间,从1970年到现在的时间,单位秒
//  --roleLevelUpTime:     角色等级变化时间,从1970年到现在的时间,单位秒
//  --vip:                 VIP等级
//  --roleGender:           0:男,1:女
//  --professionID:        职业ID
//  --professionName:      职业名称
//  --power:               战力
//  --partyID:             帮会,公会ID
//  --partyName:           帮会,公会名称
//  --partyMasterID:       帮会,公会会长ID
//  --partyMasterName:     帮会,公会会长名称

function u8CallChannelUpload(roleData, callback) {
    console.log('channel sdk begin to upload role data->u8CallChannelUpload...')

    //TODO: 调用渠道角色上报逻辑

    if (callback) {
        callback(true)
    }
}

将上面的模板贴到你的js文件后, 就可以在对应接口中TODO部分,调用渠道SDK的对应接口了。 我们以欢娱H5 SDK为例:

js
// 欢娱H5 SDK

var currHYProductID;
var currHYUID;
var currHYUserName;


// 初始化接口
function u8CallChannelInit(u8Params, channelParams, callback) {

    currHYProductID = channelParams['HY_PRODUCT_ID']

    console.log('huanyu sdk init called. productID:' + currHYProductID)

    H5SDK.init(currHYProductID)

    if (callback) {
        callback(true, {})
    }
}


// 登录接口
function u8CallChannelLogin(callback) {

    // 渠道加载游戏的时候,就将登陆后的UID等参数放在URL链接中返回了,这里我们直接从URL参数中获取,如果获取到了,我们就直接登录成功进游戏;如果没读取到,我们主动调用登录接口。

    currHYUID = u8_parseQueryString('uid')  
    currHYUserName = u8_parseQueryString('username')
    var sign = u8_parseQueryString('sign')
    var isVistor = u8_parseQueryString('isLogin')  //0: 游客; 1: 正式账号
    var timestamp = u8_parseQueryString('time')
    var marketTag = u8_parseQueryString('marketTag')    //投放标志

    console.log('huanyu sdk login called.', currHYUID)

    if (!currHYUID || isVistor == 0) {
        // 未登录或者游客, 直接弹出登陆界面
        H5SDK.login(function(loginNotify){
            console.log('huanyu sdk login result.', JSON.stringify(loginNotify))
            //回调中,不要直接处理回调结果, 登录后,SDK会重载iframe, 会继续进入这里
        });

        return;
    }

    //触发回调
    if (callback) {
        // 登录结果的参数和参数key需要和服务端接入同学协商好, 服务端同学在实现登录认证接口的时候,需要按这里的参数key读取
        callback(true, {uid: currHYUID, username:currHYUserName, time: timestamp, sign: sign})
    }

}

// 欢娱SDK,不提供登出接口,我们不需要实现
// function u8CallChannelLogout(callback) {

//     if (callback) {
//         callback(false)
//     }
// }


// 支付接口
function u8CallChannelPay(u8User, u8Order, callback) {

    console.log('huanyu sdk pay beigin. orderInfo:', JSON.stringify(u8Order))    

    var orderInfo = new Object();
    orderInfo.productCode = currHYProductID;
    orderInfo.uid = u8User.sdkUserID;
    orderInfo.userRoleId = u8Order.roleId;
    orderInfo.userRoleName = u8Order.roleName;
    orderInfo.userServer = u8Order.serverId;
    orderInfo.userLevel = u8Order.roleLevel;
    orderInfo.cpOrderNo = u8Order.orderID;
    orderInfo.amount = u8Order.price;
    orderInfo.subject = u8Order.productName;
    orderInfo.desc = u8Order.productDesc;
    orderInfo.callbackUrl = u8Order.extension;
    orderInfo.extrasParams = u8Order.orderID;
    orderInfo.goodsId = u8Order.productId;
    orderInfo.count = 1;
    orderInfo.quantifier = '个'; 
    var orderInfoJson = JSON.stringify(orderInfo);

    H5SDK.pay(orderInfoJson,function(payStatusObject){
       console.log('huanyu sdk pay result:' + JSON.stringify(payStatusObject));

       if (callback) {
            callback(true)
       }
    });
}

// 角色数据上报接口
function u8CallChannelUpload(roleData, callback) {

    var roleInfo = new Object();
    roleInfo.serverName = roleData.serverName;
    roleInfo.userRoleName = roleData.roleName;
    roleInfo.userRoleId = roleData.roleID;
    roleInfo.userRoleBalance = roleData.moneyNum;
    roleInfo.vipLevel = roleData.vip;
    roleInfo.userRoleLevel = roleData.roleLevel;
    roleInfo.partyName = roleData.partyName;
    roleInfo.uid = currHYUID; 
    roleInfo.type = roleData.dataType; //上报类型,2.创建角色 3.进入游戏 4.等级提升 5.退出游戏 如果是其他类型则默认0
    var roleInfoJson = JSON.stringify(roleInfo); 
    H5SDK.uploadGameRoleInfo(roleInfoJson,  function(response){
            if(response.status){
                if (callback) {
                    callback(true)
                }
            }else{
                if (callback) {
                    callback(false)
                }
            }
    }); 


}

写完JS文件之后, 我们需要将js文件同步到web服务上channels目录下。

然后U8SDK后台-》渠道商管理中, 我们添加H5渠道商配置的时候, 将渠道的js文件URL地址配置在【H5渠道JS地址】字段上;【SDK名称】填写为上面这个接入js文件的名称,比如uc_h5。

这样,我们就完成了H5渠道的接入和配置了。

版权所有© 2021-2030 上海丞诺网络科技有限公司