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 都只执行了一遍!啊啊啊啊啊啊…

求救!!!

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

应该在其他地方回复了,这边也回一下

检查下AppController.mm/UnityAppController.mm的几个OpenURL方法,包括但不限于

- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation

- (BOOL)application:(UIApplication *)application handleOpenURL:(NSURL *)url

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

可以写下NSLog看下微信返回走的哪个OpenURL方法

然后这些方法里都要有以下几行代码来让微信的回调能返回到AnySDK里

NSMutableDictionary *WXPayParams = [[NSMutableDictionary alloc] init]; [WXPayParams setObject:url forKey:@"WXApiOpenURL"]; SEL WXPaySelector = NSSelectorFromString(@"WXApiApplication:"); [NSClassFromString(@"WxpayWrapper") performSelector:WXPaySelector withObject:WXPayParams afterDelay:0.01];

可以从已有方法里拷贝过去

我也是同样的问题,ios审核被拒绝。微信登录点了没反应,查了原因是anysdk微信登录没有回调,只有一个init-success

同样没装微信,安卓正常显示提示。

@magelevin 我检查了方法2个openurl方法里都有你说的代码

您好,您的问题解决了么,我也遇到了同样的问题,老王说的那三个监听我都加上了
还是没解决,只收到了初始化的成功,登录的成功没收到

研究出来了,是我们服务器的事贴出代码,防止以后别人出错吧
var reqToAnysdk=require(“http”).request(options,function(resFromAnysdk){
resFromAnysdk.setEncoding(“utf8”);
resFromAnysdk.on(“data”,function(data){
resJson = JSON.parse(data);
if (resJson && (resJson.status==“ok”)) {
var userData = resJson.data;
var openid = userData.openid;
var nickname = userData.user_info.nickname;
var sex = userData.user_info.sex;
var headimgurl = userData.user_info.headimgurl;
var account = “wx_” + openid;
create_user(account, nickname, sex, headimgurl, resJson, function() {
var sign = crypto.md5(account + req.ip + config.ACCOUNT_PRI_KEY);
db.get_user_data(account, function(data) {
resJson.ext = data.userid;
resJson.sign = sign;

                    //记录用户登陆日志
                    db.record_game_user_login(data.userid);
                    send(res, resJson);
                });
            });
        }else{
            send(res, resJson);
        }
    });

});

这里传anysdk中的msg的时候服务器加了两个属性,结果android哪里能解析,到了苹果哪里接解析不了了,报一个Nsnumber…什么的错误,看是int 与String的转化Android哪里没问题,ios应该没问题吧,结果去掉了就收到了还真是这有问题.最后服务器修改成

就好了,服务器的这个锅,害了我一天呀,在这里各种找问题的途中,感谢@AnySDK-李协成 ,群里大篇大篇的截图给人家,人家都耐心的看,哥是在北京么,有空一起吃个饭呀

我有同样的问题能Q我一下吗?QQ:1837262463

我的这个问题是服务器的解析问题

我android只收到了init-success,就没然后了。。。你解决了吗

上面是xcode的内容,能调用到userPlugin.login(),之后就没反应了。

这个和5楼的代码基本一样,是这个errcode弄错了么?

请大佬们帮忙解答