收藏
回答

微信扫码登录auth接口onAuthFinish方法回调-1,并且调用多次后,调用一次接口回调多次?

private void wxQrAuthLogin(Activity activity, String scope, String noncestr, String timestamp, String signature) {
    //调用微信api获取二维码信息
    BaseUtil.logDebugMsg(TAG, "调用微信api获取二维码信息appId:" + WechatToolManager.getInstance().getWxAppId() + ",sign:" + signature);
    if (mWxAuth == null) {
        BaseUtil.logDebugMsg(TAG, "调用微信api获取二维码信息,创建WxAuth");
        mWxAuth = DiffDevOAuthFactory.getDiffDevOAuth();
    }
    mWxAuth.auth(WechatToolManager.getInstance().getWxAppId(), scope, noncestr, timestamp, signature, new OAuthListener() {
        @Override
        public void onAuthGotQrcode(String s, byte[] bytes) {
            //auth之后返回的二维码数据,使用Android原生方法转换Bitmap
            try {
                BaseUtil.logDebugMsg(TAG, "微信获取二维码回调onAuthGotQrcode:" + s);
                //加载二维码图片
                mWechatQrLoginDialog.loadWechatQrImg(bytes);
                //隐藏底下提示
                mWechatQrLoginDialog.showErrorTip("");
                //隐藏刷新布局
                mWechatQrLoginDialog.showRefreshBtn(View.GONE);
            } catch (Exception e) {
                e.printStackTrace();
                BaseUtil.logDebugMsg(TAG, "二维码展示异常,请关闭后重试");
                showErrorTip("二维码展示异常");
            }
        }

        @Override
        public void onQrcodeScanned() {
            //用户扫描二维码之后,回调该接口,可以加个提示“已扫码,请尽快确认授权”
            BaseUtil.logDebugMsg(TAG, "微信获取二维码回调onQrcodeScanned");
        }

        @Override
        public void onAuthFinish(OAuthErrCode oAuthErrCode, String authCode) {
            BaseUtil.logDebugMsg(TAG, "微信获取二维码回调onAuthFinish:" + oAuthErrCode.getCode());
            //用户点击授权后,回调该接口
            switch (oAuthErrCode) {
                case WechatAuth_Err_OK:
                    //成功情况将code返回
                    callBack(WechatToolManager.WECHAT_CALLBACK_SUCCESS_STATUS, authCode, "微信授权成功");
                    break;
                case WechatAuth_Err_Cancel:
                    break;
                default:
                    //不用提示处理,看扫码后玩家取消后再次扫是否还能扫,不能的话就需要提示并刷新二维码
                    Toast.makeText(activity, "微信获取二维码信息失败(" + oAuthErrCode.getCode() + ")", Toast.LENGTH_SHORT).show();
            }
        }
    });
}

这个方法获取二维码后,没扫码的情况下也会立即回调onAuthFinish方法,并且OAuthErrCode 为 -1  调用多次后,当执调用一次auth方法,会回调多次onAuthFinish
回答关注问题邀请回答
收藏

1 个回答

  • 👐ZJM👐
    👐ZJM👐
    07-25

    补充一下,-1的问题解决了,但是目前发现接口调用N次后,会出现调用一次auth接口,收到2次onAuthGotQrcode回调,扫码后会收到N次onAuthFinish回调

    07-25
    有用
    回复 1
    • 👐ZJM👐
      👐ZJM👐
      星期二 18:00
      解决了,OAuthListener回调不能每次都new一个对象,调用多次必须传入同一个回调对象,否则就会收到多次回调方法
      星期二 18:00
      回复
登录 后发表内容