美文网首页
qqplay开发小结

qqplay开发小结

作者: Black_Blue | 来源:发表于2018-09-27 13:10 被阅读0次

    1.修改Global.js文件

    window.JubaPlatform = {
        Browser : 'browser',
        Wx : 'wx',
        Qq : 'qq',
    };
    const platform = JubaPlatform.Qq; // 如果打包微信,则使用Wx
    // 这里一系列操作是为了防止qqplay的命名冲突,qqplay已有window.Global变量.
    let tmp = {
        is_weixin_platform : platform == JubaPlatform.Wx,
        is_qq_platform : platform == JubaPlatform.Qq,
        platform : platform,
        is_dev : false,
        // 下面都是qq平台使用到的变量
        start_game_time : 0, // 上传成绩时使用, 注意在进入game场景后重置
        nickname : null,
        logo_url : null,
        game_name : '俄罗斯方块',
    }
    if(window.Global == null) {
        window.Global = {};
    }
    
    for(let i in tmp){
        window.Global[i] = tmp[i];
    }
    

    2.修改Common.js文件

    window.qqapi      = require('Qqapi'); // 复制粘贴Qqapi.js
        // 并在window.Common添加如下方法:
    
        storage(key,data) { // 添加qq的存储方法,qq的存储方法十分不方便
           if(Global.is_qq_platform){
                let tmp = {};
                tmp[this.KEY_MUSIC]    = Global.is_music_on;
                tmp[this.HAND_CONTROL] = Global.is_hand_control;
                tmp[this.BTN_CONTROL]  = Global.is_btn_control;
                tmp[key] = data;            // 保存个人数据
                BK.QQ.saveGameData(tmp, function(errCode, cmd, data) {
                    BK.Script.log(1, 1, 'saveGameData : ' + errCode + ', ' + cmd + ', ' + JSON.stringify(data));
                });
            }
        },
    
        get_storage(key,_call) {     // qq的获取数据方法,只能在刚进入游戏时调用一次,参见俄罗斯方块.
            if(Global.is_qq_platform){
                let self = this;
                BK.QQ.loadGameData(function(errCode, cmd, data) {
                    // 这里返回的 data,就是上面存储游戏个人私有数据时候传入的 data
                    if(Global.is_dev) BK.Script.log(1, 1, 'loadGameData : ' + errCode + ', ' + ', ' + JSON.stringify(data));
                    for(let i in data) {
                        if(self.events[i.toString()]){
                            self.events[i.toString()](data[i]);
                        }
                    }
                });
            }
        },
    
        login(_success,_fail,loading,hide_btns) {// 相应的Home文件也要修改,使用Common.login();
            switch (Global.platform) {
                case JubaPlatform.Wx :
                    console.log('--------------common  login wx ---------------------------');
                    wxapi.login(_success,_fail,hide_btns);
                    break;
                case JubaPlatform.Qq :
                    console.log('--------------common  login qq ---------------------------');
                    qqapi.login(_success,_fail,loading);
                    break;
                case JubaPlatform.Browser:
                    _success();
                    break;
            }
        },
    
        // 如果是对战游戏  添加up_exp
        // 如果是单机游戏  添加up_score , use_resurgence
    
    1. 修改Networker.js文件
    // 在Networker里添加qqlogin和qq_network方法, 并在如下方法里进行判断
    
    do_network(params) {
        switch (Global.platform) {
            case JubaPlatform.Wx:
                this.wx_network(params);
                break;
            case JubaPlatform.Qq:
                this.qq_network(params);
                break;
        }
    },
    
    // 在Networker里的base_request方法添加platform参数
    let json = {
            game_type  : Global.game_type,
            ver        : Global.ver,
            platform   : Global.platform
    };
    let _req_data = json;
    if(d.encrypt) { _req_data = {json:xxtea.encode(JSON.stringify(_req_data)),platform   : Global.platform}}
        
        // 同时去掉_req_data的JSON.stringify,在wx_network加上JSON.stringify
        wx_network(params) {
            wx.request({
                url    : params.url,
                method : params.method,
                data   : JSON.stringify(params.data),
                success : function (res) {
                    if(res && res.statusCode && res.statusCode == 200 && res.data && (res.data.isok == null || res.data.isok == true)) {
                        console.log("action : "+params.action,res);
                        if(params.success) params.success(res);
                    } else {
                        if(params.fail) params.fail();
                    }
                },
                fail : function () {
                    if(params.fail) params.fail();
                }
            });
        }
        // 添加获取排行榜方法
        get_rank(_success) {
            this.base_request({
                action  : "get_rank",
                data    : {},
                success : _success,
                encrypt : false
            });
        },
    

    4.修改Share.js文件. 如果有分享到群的判断, 要区分平台

        share(title,image,query,success,fail,is_friend_battle) {
            const params = {};
            if(title)   params.title    = title;
            if(image)   params.imageUrl = image;
            if(query)   params.query    = query;
            if(success) params.success  = success;
            if(fail)    params.fail     = fail;
            if(Global.is_weixin_platform) {
                wx.aldShareAppMessage(params);
            } else if(Global.is_qq_platform) {
                // http://hudong.qq.com/docs/engine/userInfo/share/intro.html#1
                // BK.QQ.shareToArk(0, title, image, true, query,success)
                let shareInfo = {
                    summary:title,          //QQ聊天消息标题
                    picUrl:image,               //QQ聊天消息图片
                    extendInfo:query,    //QQ聊天消息扩展字段
                    // localPicPath:savedPath,   //分享至空间、微信、朋友圈时需要的图。(选填,若无该字段,系统使用游戏对应的二维码)
                    gameName:Global.game_name          //游戏名,暂用与生成二维码
                };
                if(Global.is_dev) console.log("qq share!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!");
                if(Global.is_dev) console.log(JSON.stringify(shareInfo));
                if(is_friend_battle) {
                    if(Global.is_dev) console.log("qq share  is_friend_battle!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!");
                    // 这里的效果没有官网说明的那样, 可能还没做好.
                    BK.QQ.shareToArk(0, title, image, true, query,function(errCode){
                        if(errCode == 0){
                            //分享成功
                            if(success) success();
                        }else{
                            //分享失败
                            if(fail) fail();
                        }
                    });
                } else{
                    if(Global.is_dev) console.log("qq share not is_friend_battle!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!");
                    BK.QQ.share(shareInfo, function (retCode, shareDest, isFirstShare) {
                        if(Global.is_dev) BK.Script.log(1, 1, "retCode:" + retCode + " shareDest:" + shareDest + " isFirstShare:" + isFirstShare);
                        if (retCode == 0) {
                            if (shareDest == 0 /* QQ */) {
                                //聊天窗
                                if(Global.is_dev) BK.Script.log(1, 1, "成功分享至QQ");
                            }
                            else if (shareDest == 1 /* QZone */) {
                                //空间
                                if(Global.is_dev) BK.Script.log(1, 1, "成功分享至空间");
                            }
                            else if (shareDest == 2 /* WX */) {
                                //微信
                                if(Global.is_dev) BK.Script.log(1, 1, "成功分享至微信");
                            }
                            else if (shareDest == 3 /* WXCircle */) {
                                // 朋友圈
                                if(Global.is_dev) BK.Script.log(1, 1, "成功分享至朋友圈");
                            }
                            if(success) success();
                        }
                        else if (retCode == 1) {
                            if(Global.is_dev) BK.Script.log(1, 1, "分享失败" + retCode);
                            if(fail) fail();
                        }
                        else if (retCode == 2) {
                            if(Global.is_dev) BK.Script.log(1, 1, "分享失败,用户取消分享:" + retCode);
                            if(fail) fail();
                        }
                    });
                }
    
    
            }
        },
    
        // 获取复活卡要判断平台
        get_resurgence(key,_func,_fail_func) {
            if(key == null || key == undefined || key == "")
                return;
    
            const _success = function (res) {
                switch (Global.platform) {
                    case JubaPlatform.Wx :
                        if( res && res.data && res.data.resur ){
                            Global.resur_count = parseInt(res.data.resur);
                            Global.resur_limit = parseInt(res.data.r_limit);
                            if(_func)
                                _func();
                        }
                        break;
                    case JubaPlatform.Qq :
                        if( res && res.resur ){
                            Global.resur_count = parseInt(res.resur);
                            Global.resur_limit = parseInt(res.r_limit);
                            if(_func)
                                _func();
                        }
                        break;
                }
            };
            Networker.resurgence(key,_success,_fail_func);
        }
    
    1. 修改Home.js文件, 这里新增一个HomeModel.js文件, 参见elsfk
      目前还没有发现qq的群排行榜功能, 所以先隐藏掉

    相关文章

      网友评论

          本文标题:qqplay开发小结

          本文链接:https://www.haomeiwen.com/subject/phxeoftx.html