android 微信登录
第一步:添加依赖
compile'com.tencent.mm.opensdk:wechat-sdk-android-without-mta:+'00
第二步:权限
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>
<uses-permission android:name="android.permission.READ_PHONE_STATE"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
第三步:WXEntryActivity.java
在包名下新建wxapi.WXEntryActivity.java
public class WXEntryActivityextends BaseActivityimplements IWXAPIEventHandler {
private IWXAPIapi;
public static BaseRespresp =null;
protected void onCreate(Bundle var1) {
super.onCreate(var1);
this.api = WXAPIFactory.createWXAPI(this, Constants.WXAPPID, true);
boolean handleIntent =this.api.handleIntent(this.getIntent(), this);
if(!handleIntent){
finish();
}
}
protected void onNewIntent(Intent var1) {
super.onNewIntent(var1);
this.setIntent(var1);
this.api.handleIntent(var1, this);
}
public void onReq(BaseReq var1) {
}
public void onResp(BaseResp var1) {
if (var1 !=null) {
resp = var1;
}
switch(var1.errCode) {
case BaseResp.ErrCode.ERR_AUTH_DENIED:
Log.v("WXEntryActivity", "发送被拒绝");
break;
case BaseResp.ErrCode.ERR_SENT_FAILED:
Log.v("WXEntryActivity", "发送-3");
break;
case BaseResp.ErrCode.ERR_COMM:
Log.v("WXEntryActivity", "发送-1");
break;
case BaseResp.ErrCode.ERR_USER_CANCEL:
Log.v("WXEntryActivity", "发送取消");
break;
case BaseResp.ErrCode.ERR_OK:
Intent intent =new Intent(Constants.wxshare_action);
sendBroadcast(intent);
break;
}
this.finish();
}
}
并在注册文件中注册(android:exported="true" 一定不能少)
<activity
android:name=".wxapi.WXEntryActivity" android:exported="true" />
第四步:调起微信
if (api ==null) {
api = WXAPIFactory.createWXAPI(LoginActivity.this, Constants.WXAPPID, true);
}
if (!api.isWXAppInstalled()) {
MyToast.showToast(getApplicationContext(),"您手机尚未安装微信,请安装后再登录");
return;
}
api.registerApp(Constants.WXAPPID);
SendAuth.Req req =new SendAuth.Req();
req.scope ="snsapi_userinfo";
req.state ="wechat_sdk_jj_login_state";
//官方说明:用于保持请求和回调的状态,授权请求后原样带回给第三方。该参数可用于防止csrf攻击(跨站请求伪造攻击),
// 建议第三方带上该参数,可设置为简单的随机数加session进行校验
api.sendReq(req);
第五步:得到微信回调
@Override
public void onResume() {
super.onResume();
//这里的判断是为了区分如果不是不是从WXEntryActivity页面销毁重启的,不走下面的代码
if (WXEntryActivity.resp !=null) {
if (WXEntryActivity.resp.getType() ==1) {
String code = ((SendAuth.Resp) WXEntryActivity.resp).code;
requestWXAccessToken(code);
}
}
第六步:获取微信信息
String url ="https://api.weixin.qq.com/sns/oauth2/access_token?appid="+Constants.WXAPPID+
"&secret="+Constants.WXSECRET+"&code="+code+"&grant_type=authorization_code";
完