qqplay开发小结

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的群排行榜功能, 所以先隐藏掉
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,772评论 6 477
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,458评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,610评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,640评论 1 276
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,657评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,590评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,962评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,631评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,870评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,611评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,704评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,386评论 4 319
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,969评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,944评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,179评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 44,742评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,440评论 2 342

推荐阅读更多精彩内容