Android 微信第三方登录(个人笔记)
今天在写微信登录,花了半天时间搞定、然后写下自己的笔记,希望帮助更多的人。。。欢迎各位指教。
微信授权登录,官方说的不是很清楚、所以导致有一部分的坑。
微信注册应用平台的应用签名,下载 微信签名生成工具 输入项目的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" />
具体可参考:微信授权登录取用户信息步骤
Android 微信第三方登录(个人笔记)的更多相关文章
- Android 微信第三方登录
步骤一 微信开发者平台 我开始的解决思路是,去微信开发者平台看API文档. 这个API文档的主要意思呢,有三点: 1.你得下载这几样东西(下载链接),一个是他的范例代码,一个是他的签名生成工具. 2. ...
- iOS微信第三方登录实现
iOS微信第三方登录实现 一.接入微信第三方登录准备工作.移动应用微信登录是基于OAuth2.0协议标准构建的微信OAuth2.0授权登录系统.在进行微信OAuth2.0授权登录接入之前,在微信开 ...
- Android UmengShareSDK第三方登录
Android UmengShareSDK 第三方登录- 今天就不废话了,集成平台第三方登录.市面上集成平台有shareSDK 和 Ument两种,shareSDK的ipa和服务好些,如果自己研究会很 ...
- 微信第三方登录(原生)demo
在一家ecstore二开公司有一段时间了,公司希望往自己研发产品上面走,一直在培养新人. 最近要自己去微信登录,自己就在ectore的框架基础上,写的原生微信第三方登录以此来熟悉微信第三方登录,在 ...
- laravel5实现微信第三方登录功能
背景 最近手头一个项目需要实现用户在网站的第三方登录(微信和微博),后端框架laravel5.4. 实现过程以微信网页版第三方登录,其他于此类似,在此不做重复. 准备工作 网站应用微信登录是基于OAu ...
- 3. ABP .NETCore 添加企业微信第三方登录
1.企业微信登录步骤 1.获取企业微信Token 官方文档:https://work.weixin.qq.com/api/doc#90000/90135/91039 2.通过Token 与前端传的Co ...
- Android Learning:微信第三方登录
这两天,解决了微信第三方授权登录的问题,作为一个新手,想想也是一把辛酸泪.我想着,就把我的遇到的坑给大家分享一下,避免新手遇到我这样的问题能够顺利避开. 步骤一 微信开发者平台 我开始的解决思路是,去 ...
- Android ShareSDKQQ 第三方登录so easy?
昨天群里有个群友看到我之前做的那个qq第三方登录怎么做的,于是乎思考了一下,还是决定写一篇博客记录下.事实上都不难的,事实上之前我又写到FaceBook的第三方登录不知道看下这Android集成Fac ...
- [置顶]
Android ShareSDKQQ 第三方登录so easy?
昨天群里有个群友看到我之前做的那个qq第三方登录怎么做的,于是乎思考了一下,还是决定写一篇博客记录下,其实都不难的,其实之前我又写到FaceBook的第三方登录不知道看下这Android集成FaceB ...
随机推荐
- WPF 微信 MVVM 【续】修复部分用户无法获取列表
看过我WPF 微信 MVVM这篇文章的朋友,应该知道我里面提到了我有一个小号是无法获取列表的,始终也没找到原因. 前两天经过GitHub上h4dex大神的指导,知道了原因,是因为微信在登录以后,web ...
- svn 常用命令总结
svn 命令篇 svn pget svn:ignore // 查看忽略项 svn commit -m "提交说明" // 提交修改 svn up(update) // 获取最新版本 ...
- InnoDB关键特性学习笔记
插入缓存 Insert Buffer Insert Buffer是InnoDB存储引擎关键特性中最令人激动与兴奋的一个功能.不过这个名字可能会让人认为插入缓冲是缓冲池中的一个组成部分.其实不然,Inn ...
- Android数据存储之Android 6.0运行时权限下文件存储的思考
前言: 在我们做App开发的过程中基本上都会用到文件存储,所以文件存储对于我们来说是相当熟悉了,不过自从Android 6.0发布之后,基于运行时权限机制访问外置sdcard是需要动态申请权限,所以以 ...
- RabbitMq应用一的补充(RabbitMQ的应用场景)
直接进入正题. 一.异步处理 场景:发送手机验证码,邮件 传统古老处理方式如下图 这个流程,全部在主线程完成,注册->入库->发送邮件->发送短信,由于都在主线程,所以要等待每一步完 ...
- 前端开发:面向对象与javascript中的面向对象实现(二)构造函数与原型
前端开发:面向对象与javascript中的面向对象实现(二)构造函数与原型 前言(题外话): 有人说拖延症是一个绝症,哎呀治不好了.先不说这是一个每个人都多多少少会有的,也不管它究竟对生活有多么大的 ...
- 整理下.net分布式系统架构的思路
最近看到有部分招聘信息,要求应聘者说一下分布式系统架构的思路.今天早晨正好有些时间,我也把我们实际在.net方面网站架构的演化路线整理一下,只是我自己的一些想法,欢迎大家批评指正. 首先说明的是.ne ...
- H3 BPM社区:流程开发者的学习交流平台
企业上市有上市流程,融资扩充有融资流程,项目招投标有招投标流程,部门领导选拔有晋升流程,员工请假休假有请假流程,早起上班梳洗有符合自己习惯的流程--生活处处是流程,流程无处不在.但从信息化建设来说,企 ...
- win10电脑优化
Windows10必做的优化 --道心 关闭服务 右键点击"此电脑",选择"管理",进入"计算机管理"窗口. 在左侧的菜单选择"服 ...
- JBPM
JBPM简介 什么是jbpm JBPM,全称是Java Business Process Management(业务流程管理),它是覆盖了业务流程管理.工作流.服务协作等领域的一个开源的.灵活的.易扩 ...