微信登录SDK (android)获取回调注意事项

740 阅读1分钟

1.在微信开放平台生成的 wx appid参数 与 apk打包时的签名文件要对应。

2.微信回调activity文件所在路径要与应用包名一致。

    如:应用包名为:com.xxx.demo   ,则回调文件路径固定为                          com.xxx.demo.wxapi.WXEntryActicity

回调文件内容:

package com.xxx.demo.wxapi;
...
public class WXEntryActivity extends Activity implements IWXAPIEventHandler {

    private IWXAPI api;
    @Override
    protected void onNewIntent(Intent intent) {
        super.onNewIntent(intent);
//        Log.e("WXEntryActivity","----------------------------------------进入onNewIntent回调----------------------------------------");
        setIntent(intent);
        api.handleIntent(intent, this);
    }

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
//      Log.e("WXEntryActivity","----------------------------------------进入onCreate回调----------------------------------------");
        api = WXAPIFactory.createWXAPI(this, "wx_appid");
        api.handleIntent(getIntent(), this);
    }

    /**
     * 微信发送请求到第三方应用时,会回调到该方法
     *
     * @param req 回调
     */
    @Override
    public void onReq(BaseReq req) {
        Log.e("WXEntryActivity","----------------------------------------进入Req回调----------------------------------------");
        finish();
    }

    /**
     * 第三方应用发送到微信的请求处理后的响应结果,会回调到该方法
     *
     * @param resp 回调
     */
    @Override
    public void onResp(BaseResp resp) {
        Log.e("WXEntryActivity","----------------------------------------进入Resp回调----------------------------------------");
        switch (resp.errCode) {
            case BaseResp.ErrCode.ERR_OK:
//                Log.e("WXEntryActivity","----------------------success");
                SendAuth.Resp resp1 = (SendAuth.Resp) resp;
//                Log.e("WXEntryActivity","code = "+resp1.code);
                
//                getAccessToken(resp1.code);
                break;
            case BaseResp.ErrCode.ERR_USER_CANCEL:
//                Log.e("WXEntryActivity","----------------------cancel");
                break;
            case BaseResp.ErrCode.ERR_AUTH_DENIED:
//                Log.e("WXEntryActivity","----------------------refuse");
                break;
            default:
//                Log.e("WXEntryActivity","----------------------back");
                break;
        }
        finish();
    }
    private void getAccessToken(String code) {
        //获取授权
        StringBuffer loginUrl = new StringBuffer();
        loginUrl.append("https://api.weixin.qq.com/sns/oauth2/access_token")
                .append("?appid=")
//                .append(Constants.WX_ID)
                .append("&secret=")
                .append(Constants.APP_SECRET)
                .append("&code=")
                .append(code)
                .append("&grant_type=authorization_code");
        HttpUtil.url(loginUrl.toString()).get(new HttpUtil.HttpCallBack() {
            @Override
            public void onSuc(String result) {
//                Log.e("WXEntryActivity","----------------------result = "+result);
//                WxCallBack callBack = new Gson().fromJson(result, WxCallBack.class);
//                getUserInfo(callBack.access_token,callBack.openid);
            }

            @Override
            public void onFail(String err) {
                Log.e("WXEntryActivity","----------------------err = "+err);
                finish();
            }
        });
    }

    private void getUserInfo(String access, String openId) {
        //获取用户信息
        String getUserInfoUrl = "https://api.weixin.qq.com/sns/userinfo?access_token="
                + access + "&openid=" + openId;
        HttpUtil.url(getUserInfoUrl).get(new HttpUtil.HttpCallBack() {
            @Override
            public void onSuc(String result) {
//                Log.e("WXEntryActivity","----------------------result = "+result);
                SmallGameSdk.instance().getCallBack().onSuc(result);
                finish();
            }

            @Override
            public void onFail(String err) {
                Log.e("WXEntryActivity","----------------------err = "+err);
                SmallGameSdk.instance().getCallBack().onFail(err);
                finish();
            }
        });
    }

在manifest中的配置:

<activity android:name="com.xxx.demo.wxapi.WXEntryActivity"  
  android:configChanges="keyboardHidden|orientation|screenSize" 
  android:exported="true"/>

调起微信登录代码:

IWXAPI api = WXAPIFactory.createWXAPI(activity, "wx_appid", false);
        api.registerApp("wx_appid");
        if (api.isWXAppInstalled()) {
            final SendAuth.Req req = new SendAuth.Req();
            req.scope = "snsapi_userinfo";
            req.state = "wechat_sdk_demo_test";
            api.sendReq(req);
        }else {
            Toast.makeText(activity, "您的设备未安装微信客户端", Toast.LENGTH_SHORT).show();
        }