刚好使用到微信登录,百度一大堆出来,但这里还是要分享下自己的步骤以及自己所犯的一些错,大神勿喷
首先,微信登录需要去微信开放平台去申请,然后获取自己需要的ID及一些东西,这里就不多说了,直接去官网申请就OK。注意,注册是需要的应用签名就是自己的.keystore或者.jks文件所生成的,是release的签名文件,是release的签名文件,是release的签名文件。下面附上转换链接:
https://open.weixin.qq.com/cgi-bin/readtemplate?t=resource/app_download_android_tmpl&lang=zh_CN
好了 接下来就是接入微信登录步骤,直接上图
一:在自定义的Application里去注册下
private void registToWX() {
//AppConst.WEIXIN.APP_ID是指你应用在微信开放平台上的AppID,记得替换。
mWxApi = WXAPIFactory.createWXAPI(this, AppConst.WEIXIN_APP_ID, true);
// 将该app注册到微信
mWxApi.registerApp(AppConst.WEIXIN_APP_ID);
}
注意去AndroidManifest.xml中将Application换成你自己的。
二:
在登录页面做如下操作。
if (!App.mWxApi.isWXAppInstalled()) {
showToast(“您还未安装微信客户端”);
return;
}
final SendAuth.Req req = new SendAuth.Req();
req.scope = “snsapi_userinfo”;
/**
* 用于保持请求和回调的状态,授权请求后原样带回给第三方
* 为了防止csrf攻击(跨站请求伪造攻击),后期改为随机数加session来校验
*/
req.state = String.valueOf(System.currentTimeMillis());
App.mWxApi.sendReq(req);
需注意, req.state = String.valueOf(System.currentTimeMillis()); 这个字段的赋予。
三:
在你的包名相应目录下新建一个wxapi目录,并在该wxapi目录下新增一个WXEntryActivity类,该类继承自Activity,如图
这个WXEntryActivity就是微信回调的页面,我们需要在里面做一系列的应用。
页面方法以及作用文中已经写的很详细,需注意,在获取到code后,需要做网络请求去获取token以及用户的信息等,这时,不建议在此页面中做消耗操作,消耗操作会导致关闭当前页面返回登录页面闪屏,造成不好的用户体验。所以此时使用回调到登录页面做网络请求操作。
四:根据自己的网络去做请求
代码如下
/**
* 获取access_token 以及openid
* @param code
*/
private void getOpenID(String code) {
// APP_ID和APP_Secret在微信开发平台添加应用的时候会生成,grant_type 用默认的"authorization_code"即可. AppConst.WEIXIN_APP_SECRET 替换成自己的
String urlStr = "https://api.weixin.qq.com/sns/oauth2/access_token?appid="+
AppConst.WEIXIN_APP_ID+"&secret="+AppConst.WEIXIN_APP_SECRET+
"&code="+code+"&grant_type=authorization_code";
PostRequest request = OkHttpUtils.post(urlStr).tag(this);
request.execute(new StringCallback() {
@Override
public void onBefore(BaseRequest request) {
super.onBefore(request);
}
@Override
public void onResponse(String s) {
JSONObject jsonObject = null;
try {
jsonObject = new JSONObject(s);
String openid = jsonObject.getString("openid").toString().trim();
String access_token = jsonObject.getString("access_token").toString().trim();
SPUtil.put(LoginActivity.this,"weixin_token",access_token);
getUserMesg(access_token, openid);
} catch (JSONException e) {
e.printStackTrace();
}
}
@Override
public void onError(Call call, @Nullable Response response, @Nullable Exception e) {
super.onError(call, response, e);
}
});
}
/**
* 获取微信的个人信息
* <p>
* openid:普通用户的标识,对当前开发者帐号唯一
* nickname:普通用户昵称
* sex:普通用户性别,1为男性,2为女性
* province:普通用户个人资料填写的省份
* city:普通用户个人资料填写的城市
* country:国家,如中国为CN
* headimgurl:用户头像,最后一个数值代表正方形头像大小(有0、46、64、96、132数值可选,0代表640*640正方形头像),用户没有头像时该项为空
* privilege:用户特权信息,json数组,如微信沃卡用户为(chinaunicom)
* unionid:用户统一标识。针对一个微信开放平台帐号下的应用,同一用户的unionid是唯一的。
*
* @param access_token
* @param openid
*/
private void getUserMesg(final String access_token, final String openid) {
Log.e("--", "access_token:" + access_token + "====openid" + openid);
String path = "https://api.weixin.qq.com/sns/userinfo?access_token="
+ access_token
+ "&openid="
+ openid;
//网络请求,根据自己的请求方式
PostRequest request = OkHttpUtils.post(path).tag(this);
request.execute(new StringCallback() {
@Override
public void onBefore(BaseRequest request) {
super.onBefore(request);
}
@Override
public void onResponse(String s) {
JSONObject jsonObject = null;
try {
jsonObject = new JSONObject(s);
String nickname = jsonObject.getString("nickname");
int sex = Integer.parseInt(jsonObject.get("sex").toString());
String headimgurl = jsonObject.getString("headimgurl");
Log.e("--", "用户基本信息:");
Log.e("--", "nickname:" + nickname);
Log.e("--", "sex:" + sex);
Log.e("--", "headimgurl:" + headimgurl);
} catch (JSONException e) {
e.printStackTrace();
}
}
@Override
public void onError(Call call, @Nullable Response response, @Nullable Exception e) {
super.onError(call, response, e);
}
});
}
此时,微信登陆就算成功了,恭喜各位。微信登陆默认时间为两个小时,过了后会有方法去刷新,重新获取下token,这里业务没有设计到,就没有去写,需要的兄弟可以去官网看下。测试的时候,需要和你在官网注册的应用签名一致。然后 就有人问 ,难道每次都需要打包,安装,测试吗?太麻烦了 这里 给大家教下如何更改android studio(绝大多数应该是这个了吧!)debug下的应用签名文件
众所周知,测试的时候大家就是直接发布到连接到工具的手机,这个时候,AS会自己帮我们生成一个debug.keystore,这个就是默认的签名文件,但是我们注册到微信官网的不能是这个文件。这个时候 就需要更改下这个默认的debug文件.
去设置下你的正式签名所在的地址,别名以及密码等。
将debug的Signing config替换成你刚才所设置的,点击OK。完成后去检查下你的gradle,如图所示,然后 就不需要每次去打包,安装,在测试了。
到此,就全部完了,希望可以帮到你。第一次写博客,有什么不好的地方,大家可以建议下。
最后,附上官网地址