Android App实现第三方微信登录
Android App实现第三方微信登录
Android App实现第三方微信登录
1、下载微信官方最新的sdk,集成到app中。如下图:
![](http://img0.ph.126.net/HElLPdMO9nE4lndo8UQDCw==/6619123770886494132.png)
2、注册到微信
可以在app的某个Activity的onCreate方法中注册,这里也可以在app的application的onCreate()方法中注册,这样,在整个app的中都可以使用。例如:
public class CarApplication extends Application{
…… …… ……
public static IWXAPI api;
public void onCreate() {
//注册微信
api = WXAPIFactory.createWXAPI(this, “你的应用在微信上申请的app_id”, true);
api.registerApp(“你的应用在微信上申请的app_id”);
…… …… ……
}
}
3、在app的包名目录下新建一个wxapi目录,然后在此目录下新建WXEntryActivity.java文件,如下,app的包名为carjob.com.cn,新建的wxapi目录如下。(注意:一定是包名目录下新建,不要在其他目录新建,否则WXEntryActivity.java里的public void onResp(BaseResp resp)方法不会被调用)
![](http://img2.ph.126.net/hZqAKdt729kKIyAKDbzfFg==/2889622110929187938.png)
WXEntryActivity继承Activity,实现IWXAPIEventHandler,并重写protected void onNewIntent(Intent intent)、public void onReq(BaseReq arg0)、public void onResp(BaseResp resp)方法。WXEntryActivity.java文件可以见最后附录。
4、发送微信登录的请求
app中点击某一个view,发送微信登录的请求如下:
final SendAuth.Req req = new SendAuth.Req();
req.scope = "snsapi_userinfo";
req.state = "carjob_wx_login";
CarApplication.api.sendReq(req);
其中,CarApplication.api就是第2步中注册的IWXAPI对象。
请求成功后,可拉起微信的授权登录页面,如下。用户点击“确认登录”后,SDK通过SendAuth的Resp返回数据给调用方(即app),此时WXEntryActivity中的public void onResp(BaseResp resp)方法被调用(微信、朋友圈分享成功后,此方法同样会被调用),微信登录的返回值说明如下。这里app可以做相关的处理,见WXEntryActivity.java文件中的处理,取code为下一步获取access_token和openid等信息做准备。此处获取code的方法:
public void onResp(BaseResp resp) {
switch (resp.errCode) {
case BaseResp.ErrCode.ERR_OK:
String code = ((SendAuth.Resp) resp).code; //即为所需的code
break;
…… …… ……
}
}
![](http://img0.ph.126.net/4gVU08ZtXQ4rQ3r5MPpbeQ==/1176565402668140274.png)
![](http://img2.ph.126.net/7-D5et8jLbefYLgvE0rQUw==/3841570482247171256.png)
5、通过code获取access_token
获取上一步中的code后,调用以下接口获取access_token,官方指出用Get方式请求。
https://api.weixin.qq.com/sns/oauth2/access_token?appid=APPID&secret=SECRET&code=CODE&grant_type=authorization_code
请求参数说明:
appid:应用唯一标识,在微信开放平台提交应用审核通过后获得。
secret:应用密钥AppSecret,在微信开放平台提交应用审核通过后获得。
code:填写第一步获取的code参数。
grant_type:填authorization_code。
返回说明
正确的返回:
{
"access_token":"ACCESS_TOKEN",
"expires_in":7200,
"refresh_token":"REFRESH_TOKEN",
"openid":"OPENID",
"scope":"SCOPE"
}
返回参数说明:
access_token:接口调用凭证。
expires_in:access_token接口调用凭证超时时间,单位(秒)。
refresh_token:用户刷新access_token。
openid:授权用户唯一标识。
scope:用户授权的作用域,使用逗号(,)分隔
6、获得access_token、openid后,app就可以根据自己的规则与互自己的server进行交互。
7、微信请求的一般流程如下:
![](http://img2.ph.126.net/KrkgjuEbQnYcYzpbVJ_u1w==/3827778208388356907.png)
附录:
WXEntryActivity.java
package carjob.com.cn.wxapi;
import carjob.com.cn.CarApplication;
import carjob.com.cn.newversion.MyResumeLoginView;
import carjob.com.cn.search.SharedPreferencesclass;
import carjob.com.cn.util.SharedPreferenceUtil;
import com.tencent.mm.sdk.constants.ConstantsAPI;
import com.tencent.mm.sdk.modelbase.BaseReq;
import com.tencent.mm.sdk.modelbase.BaseResp;
import com.tencent.mm.sdk.modelmsg.SendAuth;
import com.tencent.mm.sdk.openapi.IWXAPIEventHandler;
import android.app.Activity;
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.widget.Toast;
public class WXEntryActivity extends Activity implements IWXAPIEventHandler {
private Context context = WXEntryActivity.this;
private void handleIntent(Intent paramIntent) {
CarApplication.api.handleIntent(paramIntent, this);
}
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
handleIntent(getIntent());
}
@Override
protected void onNewIntent(Intent intent) {
// TODO Auto-generated method stub
super.onNewIntent(intent);
setIntent(intent);
handleIntent(intent);
}
@Override
public void onReq(BaseReq arg0) {
// TODO Auto-generated method stub
finish();
}
@Override
public void onResp(BaseResp resp) {
// TODO Auto-generated method stub
switch (resp.errCode) {
case BaseResp.ErrCode.ERR_OK:
if (ConstantsAPI.COMMAND_SENDMESSAGE_TO_WX == resp.getType()) {
Toast.makeText(context, "分享成功", Toast.LENGTH_LONG).show();
break;
}
String code = ((SendAuth.Resp) resp).code;
new SharedPreferencesclass(49, code, context);
System.out.println("微信确认登录返回的code:" + code);
Toast.makeText(context, "微信确认登录返回的code:" + code, Toast.LENGTH_LONG).show();
MyResumeLoginView.loginHandler.sendEmptyMessage(MyResumeLoginView.WEIXIN_LOGIN_SUCCESS);
break;
case BaseResp.ErrCode.ERR_USER_CANCEL:
break;
case BaseResp.ErrCode.ERR_AUTH_DENIED:
break;
default:
break;
}
finish();
}
}
Android App实现第三方微信登录相关推荐
- APP调用第三方(微信)登录(最详细的实现流程)
最近使用weexplus做了个app 用户需要的是可以使用第三方微信实现登录(虽然网上有很多相关的什么申请开发者账户.appid.openid等资料:但是都是讲的中间的那一部分请原谅我是个菜鸟,脑补开 ...
- android 第三方登录界面,Android App集成第三方登录与换肤指南
Android App集成第三方登录与换肤指南 文档编辑 概述 本文主要是介绍了如何通过开源框架快速支持QQ和微信登录,并介绍了如何实现app快速换肤 QQ登录接入 APP要支持QQ登录,需要先到腾讯 ...
- 巧用第三方快速开发Android App 热门第三方SDK及框架
巧用第三方快速开发Android App 热门第三方SDK及框架 历经大半年的时间,终于是把这门课程给录制出来了,也就在今天,正式在慕课网上上线了 项目地址:巧用第三方快速开发Android App ...
- android登录操作代码,Android Studio实现第三方QQ登录操作代码
来看看效果图吧 实现QQ登录了, 新建一个项目工程 ,然后把我们刚才下载的SDK解压将jar文件夹中的jar包拷贝到我们的项目libs中 导入一个下面架包就可以 项目结构如下 打开我们的清单文件And ...
- iOS第三方微信登录时不走回调方法
ios 开发中第三方微信登录时,使用真机测试,授权登录按钮点击后不走微信demo的 -(void)onResp:(BaseResp*)resp 回调方法不走,无法判断是否成功 查看网上一些解决方法,自 ...
- uni-app关于小程序及app端第三方微信登陆问题(app端如何取得code值)
加强安全保护,防止部分应用邀请新用户有奖励而产生的刷号行为,和后端配合,不从前端传openid,取得相应的code值给后端,后端再去拿到openid获取用户信息. 1.第三方微信登陆,主要是在获取co ...
- android app调用第三方地图路线规划导航(百度,高德,腾讯)
android app调用第三方地图路线规划导航(百度,高德,腾讯) 因为直接使用高德的sdk提供的导航被投诉说不准,所以需要接第三方. 把BAT系的地图都接上了,有兄弟找到其他的地图调用方法告诉下小 ...
- Android APP跳转微信小程序和APP跳转支付宝小程序传参
Android APP跳转微信小程序和APP跳转支付宝小程序传参 微信开放文档链接 MINIPROGRAM_TYPE_PREVIEW:体验版. MINIPROGRAM_TYPE_TEST:开发版 MI ...
- Android App拉起微信小程序提示bad_param
Android App拉起微信小程序提示bad_param,主要是因为req.userName的值传错,req.userName的值是小程序的原始ID,而不是appId,小程序之间的跳转是appId. ...
最新文章
- php的闭包函数use的使用
- Python之路【第五篇】:面向对象及相关
- win系统下nodejs安装及环境配置
- plspl和oracle,LOL2017LSPL春季死啊DS轻取NON ME逆转GD赢得首胜
- 2021中青杯数学建模C题 在线教学的分析与研究
- 华为防火墙USG多出口网络场景是如何排除故障的
- MySQL大表优化技术要点科普
- SAP全球技术研发者大会上海站电子票欣赏
- java xml签名_Java使用DSA密钥对生成XML签名的方法
- 不要再问我三次握手和四次挥手
- 有关Spring缓存性能的更多信息
- 请问运行py文件的时候怎么样可以不让那个黑框一闪...
- sqlserver查看表空间
- macOS Catalina常见问题汇总
- dh算法c语言,openssl开源程序dh算法解析之dh_key.c
- 访问swagger2时出现空白页
- 自考CISSP信息分享
- Vue 使用Excel表格导入导出
- 来,看看记事本里会变成乱码的字……不仅仅是“联通”而已……
- 转载:虚拟机安装centos6.5出现 unsupported hardware detected 解决方法
热门文章
- 教育行业软件开发公司排行榜有哪些
- RESIDE:Benchmarking Single Image Dehazing and Beyond
- 用计算机处理公文,2016年事业单位考试指导:计算机公文处理中的流程及要点...
- linux下实现 日志类重定向c 代码,log4cplus使用(三)-日志重定向
- Linux中vim中gg的英文全拼,计算机科学研究专家陶贤斌带您入门Linux中的vim
- 机器学习植物叶片识别
- [Jdk源码学习]聊聊concurrent包下面的volite*
- 产品设计(1) – 产品需求文档(PRD)介绍
- Camunda 多实例会签加签
- [事务] 编程式事务和声明式事务的优缺点