Cocos2D-JS AnySDK 微信登录在IOS中不执行回调函数

第一次做 Cocos2D-JS 项目,其中涉及到微信登录游戏,使用了 AnySDK 内置的方法。

首先当用户在游戏中点击微信登录的按钮后:

    onBtnWeichatClicked:function(){
        cc.vv.audioMgr.playSFX('btn_click.mp3');
        console.log('wechat clicked');
        cc.audioEngine.stopAll();
        // var self = this;
        if(!cc.vv.userPlugIn){
            console.log("进入加载anysdk插件进程");
            var agent = anysdk.agentManager;
            cc.vv.userPlugIn = agent.getUserPlugin();
            cc.vv.sharePlugIn = agent.getSharePlugin();
            console.log("生成cc.vv.userPlugIn");
            cc.vv.userPlugIn.setListener(this.onUserLogin, this);
        }else{
            cc.vv.userPlugIn.login();
        }
    }

好吧,现在按正常的逻辑,用户第一次点击按钮,我们生成了一个 userPlugIn 并且设置了他的监听事件,而在下次点击这个按钮时候,直接执行它的 login 函数。

对应的监听事件:

    onUserLogin:function(code,msg){
        var self = this;
        console.log("test");
        switch(code){
            case anysdk.UserActionResultCode.kInitSuccess:
                console.log("初始化成功,开始登录");
                cc.vv.userPlugIn.login();
                break;
            case anysdk.UserActionResultCode.kLoginSuccess:
                console.log("登录成功");
cc.vv.http.sendRequest(1,"/wechat/login",cc.vv.userPlugIn.getUserInfo().toString(),this.onGetWechatCallback);
                msg = JSON.parse(msg);
                cc.vv.usertoken = msg.token;
                cc.vv.userid = msg.id;
                cc.director.loadScene("hall");     //载入场景-大厅
                cc.info("登录成功:"+uid);
                break;
            case anysdk.UserActionResultCode.kLoginFail:
                console.log("登录失败");
                cc.vv.userPlugIn.logout();
                cc.vv.userPlugIn.login();
                break;
        }
    }

那么我们首先第一次点击这个登录按钮,他初始化成功之后,自动掉起了微信,但是当我们在微信中点击登录之后,微信虽然也成功的跳转回了游戏,但是却再没执行回调函数!!!WTF??

也就是说从游戏打开之后,不管我点几百万遍微信登录的按钮,在微信中点几百万遍确认登录,游戏和微信相互跳转几百万遍,onUserLogin 都只执行了一遍!啊啊啊啊啊啊.....

求救!!!

补充补充:同样的代码在安卓下正常运行!!

阅读 4.4k
1 个回答
新手上路,请多包涵

在打包后的AppController.mm方法中,打印看一下微信登录后走了哪个OpenURL回调

如果没有下面这四行代码的话,在这个方法里添加一下,特别看下是不是有存在这个方法

  • (BOOL)application:(UIApplication )app openURL:(NSURL )url options:(NSDictionary<NSString ,id> )options

NSMutableDictionary *WXPayParams = [[NSMutableDictionary alloc] init];
[WXPayParams setObject:url forKey:@"WXApiOpenURL"];
SEL WXPaySelector = NSSelectorFromString(@"WXApiApplication:");
[NSClassFromString(@"WxpayWrapper") performSelector:WXPaySelector withObject:WXPayParams afterDelay:0.01];
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进