导入包
compile 'com.tencent.mm.opensdk:wechat-sdk-android-with-mta:+'
点击微信登录的按钮后,调用该方法,该方法会拉起微信登录确认页面
private void regToWx() { IWXAPI api; api = WXAPIFactory.createWXAPI(this, WX_APP_ID, true); api.registerApp(WX_APP_ID); SendAuth.Req req = new SendAuth.Req(); //授权读取用户信息 req.scope = "snsapi_userinfo"; //自定义信息 req.state = "wx_login"; //向微信发送请求 api.sendReq(req);}
在你的包名下,建一个名为"wxapi"的包,在包中建一个名为WXEntryActivity的类,继承Activity,实现IWXAPIEventHandler接口,WXEntryActivity不需要你去启动,微信会帮你启动。
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//注册API
api = WXAPIFactory.createWXAPI(this, WX_APP_ID);
api.handleIntent(getIntent(), this);
}
<activity
android:name=".wxapi.WXEntryActivity"
android:exported="true"
android:launchMode="singleTop"
android:screenOrientation="portrait"
android:theme="@android:style/Theme.NoDisplay" />
在微信登录确认页面点击了确定后,微信会在onResp方法中会返回给你code,接着拿着code去发起url请求openId等参数,这里的做法是直接把code发到服务端上去,让服务端去请求openId,这样就不需要下发App_Secret
@Override
public void onResp(BaseResp resp) {
switch (resp.errCode) {
case BaseResp.ErrCode.ERR_OK:
SendAuth.Resp sendResp = (SendAuth.Resp) resp;
code = sendResp.code;
Toast.makeText(this, "code---->" + code, Toast.LENGTH_SHORT).show();
break;
case BaseResp.ErrCode.ERR_USER_CANCEL:
break;
case BaseResp.ErrCode.ERR_AUTH_DENIED:
break;
default:
break;
}
}
ps:测试版的签名没用,要用发布版的签名,并且要用发布版进行调试,如果code传回来的是空,多半是签名错误,建议用官方的签名生成工具:
https://res.wx.qq.com/open/zh_CN/htmledition/res/dev/download/sdk/Gen_Signature_Android2.apk