Android微信第三方登录(个人笔记

来源:互联网 发布:常用抓包软件 编辑:程序博客网 时间:2024/05/07 21:20

今天在写微信登录,花了半天时间搞定、然后写下自己的笔记,希望帮助更多的人。欢迎各位指教。

微信授权登录,官方说的不是很清楚、所以导致有一部分的坑。

微信注册应用平台的应用签名,下载 微信签名生成工具 输入项目的packageName也可以查看到。

注意:debug、Release 一定要区分,因为2种生成的微信签名不一致,会导致没有跳转、回调。。。。一般在微信开发者上面注册的是正式环境打包好的、)

 微信登录,微信第三方登录,微信登录无法回调,微信登录无法拉起授权

 微信登录,微信第三方登录,微信登录无法回调,微信登录无法拉起授权

申请微信开发者账号、应用申请省略。 

 1. AndroidManifest.xml 权限

<!-- 微信权限--><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"/> 

 2.在图一按钮上面,加上微信跳转方法、也就是启动微信登录的方法

private void loginToWeiXin(){  IWXAPI mApi = WXAPIFactory.createWXAPI(this, WXEntryActivity.WEIXIN_APP_ID, true);  mApi.registerApp(WXEntryActivity.WEIXIN_APP_ID);  if (mApi != null && mApi.isWXAppInstalled()) {   SendAuth.Req req = new SendAuth.Req();   req.scope = "snsapi_userinfo";   req.state = "wechat_sdk_demo_test_neng";   mApi.sendReq(req);  } else   Toast.makeText(this, "用户未安装微信", Toast.LENGTH_SHORT).show(); }

3.在你的包名相应目录下新建一个wxapi目录,并在该wxapi目录下新增一个WXEntryActivity类,该类继承自Activity

 package(项目报名).wxapi.WXEntryActivity.Java

回调方法onResp() 方法没有触发回调、请监测WXEntryActivity onCreate中是否调用此方法  mApi.handleIntent(this.getIntent(), this);

package com.xxx.xxxx.android.wxapi;/** * 微信登录页面 * @author kevin_chen 2016-12-10 下午19:03:45 * @version v1.0 */public class WXEntryActivity extends Activity implements IWXAPIEventHandler { private static final String APP_SECRET = "填写自己的AppSecret"; private IWXAPI mWeixinAPI; public static final String WEIXIN_APP_ID = "填写自己的APP_id"; private static String uuid; @Override public void onCreate(Bundle savedInstanceState) {  super.onCreate(savedInstanceState);  mWeixinAPI = WXAPIFactory.createWXAPI(this, WEIXIN_APP_ID, true);  mWeixinAPI.handleIntent(this.getIntent(), this); } @Override protected void onNewIntent(Intent intent) {  super.onNewIntent(intent);  setIntent(intent);  mWeixinAPI.handleIntent(intent, this);//必须调用此句话 } //微信发送的请求将回调到onReq方法 @Override public void onReq(BaseReq req) {  LogUtils.log("onReq"); } //发送到微信请求的响应结果 @Override public void onResp(BaseResp resp) {  LogUtils.log("onResp");  switch (resp.errCode) {  case BaseResp.ErrCode.ERR_OK:   LogUtils.log("ERR_OK");   //发送成功   SendAuth.Resp sendResp = (SendAuth.Resp) resp;   if (sendResp != null) {    String code = sendResp.code;    getAccess_token(code);   }   break;  case BaseResp.ErrCode.ERR_USER_CANCEL:   LogUtils.log("ERR_USER_CANCEL");   //发送取消   break;  case BaseResp.ErrCode.ERR_AUTH_DENIED:   LogUtils.log("ERR_AUTH_DENIED");   //发送被拒绝   break;  default:   //发送返回   break;  } } /**  * 获取openid accessToken值用于后期操作  * @param code 请求码  */ private void getAccess_token(final String code) {  String path = "https://api.weixin.qq.com/sns/oauth2/access_token?appid="    + WEIXIN_APP_ID    + "&secret="    + APP_SECRET    + "&code="    + code    + "&grant_type=authorization_code";  LogUtils.log("getAccess_token:" + path);  //网络请求,根据自己的请求方式  VolleyRequest.get(this, path, "getAccess_token", false, null, new VolleyRequest.Callback() {   @Override   public void onSuccess(String result) {    LogUtils.log("getAccess_token_result:" + result);    JSONObject jsonObject = null;    try {     jsonObject = new JSONObject(result);     String openid = jsonObject.getString("openid").toString().trim();     String access_token = jsonObject.getString("access_token").toString().trim();     getUserMesg(access_token, openid);    } catch (JSONException e) {     e.printStackTrace();    }   }   @Override   public void onError(String errorMessage) {   }  }); } /**  * 获取微信的个人信息  * @param access_token  * @param openid  */ private void getUserMesg(final String access_token, final String openid) {  String path = "https://api.weixin.qq.com/sns/userinfo?access_token="    + access_token    + "&openid="    + openid;  LogUtils.log("getUserMesg:" + path);  //网络请求,根据自己的请求方式  VolleyRequest.get(this, path, "getAccess_token", false, null, new VolleyRequest.Callback() {   @Override   public void onSuccess(String result) {    LogUtils.log("getUserMesg_result:" + result);    JSONObject jsonObject = null;    try {     jsonObject = new JSONObject(result);     String nickname = jsonObject.getString("nickname");     int sex = Integer.parseInt(jsonObject.get("sex").toString());     String headimgurl = jsonObject.getString("headimgurl");          LogUtils.log("用户基本信息:");     LogUtils.log("nickname:" + nickname);     LogUtils.log("sex:" + sex);     LogUtils.log("headimgurl:" + headimgurl);    } catch (JSONException e) {     e.printStackTrace();    }    finish();   }   @Override   public void onError(String errorMessage) {   }  }); }}

5.在 AndroidManifest.xml 设置注册微信的页面

当授权时候进入WXEntryActivity、当前背景可能是黒或白,为了不影响用户体验,可以把当前Activity设置为透明:

android:theme="@android:style/Theme.Translucent"

<!--注册微信回调 WXEntryActivity --><activity android:name=".wxapi.WXEntryActivity" android:exported="true" android:label="@string/app_name" android:launchMode="singleTop" android:theme="@android:style/Theme.Translucent" /> 

具体可参考:微信授权登录取用户信息步骤

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持网页漂亮网。

0 0
原创粉丝点击