微信授权APP第三方登陆(Android)

前几天负责的程序说是要加入第三方登陆的功能,虽然现在有服务商集成了第三方登陆,但是平时所用的也就微信和QQ,就自己看文档写了,其中也遇到了一些问题,然后我把我做这个的流程贴出来,并附上对应的Demo,运行Demo前请将Android的SDK以及依赖包的版本升级到最新。

1:首先如果要使用微信的第三方登陆功能,必须要有微信官方认证的微信开放平台开发者账号,这个需要300一年,当然,还有很多其他很好的功能。

2:对你要接入第三方登陆的应用进行申请,申请通过之后,可以获取到关键的AppID和AppSecret,申请的时候有两个地方要注意,这里写图片描述

应用包名是指在你的AndroidManifest文件下的package中的内容,

这里写图片描述

应用签名工具在微信开放平台中资源下载中的Android资源下下载,之后在你的手机上运行,输入你的应用包名即可得到。

3:下面就是正式开始操作代码,将微信的开发工具包导入你项目的libs目录中。
这里写图片描述

4:在AndroidManifest.xm添加权限支持,代码如下。

    <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"/>

5:将你的应用程序注册到微信,只有这样你的程序启动后,微信才能响应你的程序,我是在重写Application的类中注册的,代码如下:

public class App extends Application {public static final String WX_APPID = "wxb53411a37963b886";public static final String WX_APPSecret = "d72be30f31c81dcc507d8c08c0d700f8";private IWXAPI api;@Overridepublic void onCreate() {super.onCreate();api = WXAPIFactory.createWXAPI(this, WX_APPID, true);api.registerApp(WX_APPID);}
}

6:在你的程序包下新建一个名为wxapi的包,并在下面新建一个名为WXEntryActivity的类,并实现IWXAPIEventHandler接口。其中微信发送给第三方应用的请求将会回调onReq方法,第三方应用发送到微信的请求的响应结果将回调nResp方法。在成功响应微信登陆请求后我会发送一个广播,并存储获得的code。code是获取access_token所必需的,具体可以参考微信的文档。代码如下:

public class WXEntryActivity extends AppCompatActivity implements IWXAPIEventHandler {private IWXAPI api;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);api = WXAPIFactory.createWXAPI(this, App.WX_APPID, false);//将你收到的intent和实现IWXAPIEventHandler接口的对象传递给handleIntent方法api.handleIntent(getIntent(), this);}@Overrideprotected void onNewIntent(Intent intent) {super.onNewIntent(intent);setIntent(intent);api.handleIntent(intent, this);finish();}@Overridepublic void onReq(BaseReq baseReq) {}@Overridepublic void onResp(BaseResp baseResp) {String result = "";switch (baseResp.errCode) {case BaseResp.ErrCode.ERR_OK:String code = ((SendAuth.Resp) baseResp).code;SharedPreferences WxSp = getApplicationContext().getSharedPreferences(PrefParams.spName, Context.MODE_PRIVATE);SharedPreferences.Editor WxSpEditor = WxSp.edit();WxSpEditor.putString(PrefParams.CODE,code);WxSpEditor.apply();Intent intent = new Intent();intent.setAction("authlogin");WXEntryActivity.this.sendBroadcast(intent);finish();break;case BaseResp.ErrCode.ERR_USER_CANCEL:result = "发送取消";Toast.makeText(this, result, Toast.LENGTH_LONG).show();finish();break;case BaseResp.ErrCode.ERR_AUTH_DENIED:result = "发送被拒绝";Toast.makeText(this, result, Toast.LENGTH_LONG).show();finish();break;default:result = "发送返回";Toast.makeText(this, result, Toast.LENGTH_LONG).show();finish();break;}}
}

然后还需要在AndroidManifest中队新添加的类进行注册,并将exported属性设置为true(表示该Activity可以被其它程序调用)。

7:微信授权流程如下:这是官网上看的
这里写图片描述
按照流程来,请求code,代码如下:

private void weChatAuth() {if (api == null) {api = WXAPIFactory.createWXAPI(getActivity(), App.WX_APPID, true);}SendAuth.Req req = new SendAuth.Req();req.scope = "snsapi_userinfo";req.state = "wx_login_duzun";api.sendReq(req);}

执行该操作之后会拉起微信打开授权登陆页面,然后你操作的结果会返回到我们第六步建立的WXEntryActivity类中,若同意请求则可以获取到code执行接下来的操作。

8:通过code获取access_token,按下面的请求可以获取access_token

https://api.weixin.qq.com/sns/oauth2/access_token?appid=APPID&secret=SECRET&code=CODE&grant_type=authorization_code

这里的APPID和SECRET就是我们申请应用时获得的。
正确返回如下:

{ “access_token”:”ACCESS_TOKEN”, “expires_in”:7200,
“refresh_token”:”REFRESH_TOKEN”, “openid”:”OPENID”, “scope”:”SCOPE”,
“unionid”:”o6_bmasdasdsad6_2sgVt7hMZOPfL” }

我是这样实现的

public void getAccessToken(){SharedPreferences WX_Sp = getApplicationContext().getSharedPreferences(PrefParams.spName, Context.MODE_PRIVATE);String code = WX_Sp.getString(PrefParams.CODE, "");final SharedPreferences.Editor WX_SpEditor = WX_Sp.edit();String url  = "https://api.weixin.qq.com/sns/oauth2/access_token?appid="+ App.WX_APPID+ "&secret="+ App.WX_APPSecret+ "&code="+ code+ "&grant_type=authorization_code";Utils.log("获取access_token的地址"+url);HttpUtil.sendHttpRequest(url, new HttpCallBackListener() {@Overridepublic void onFinish(String response) {try {JSONObject jsonObject = new JSONObject(response);String access_token = jsonObject.getString("access_token");Utils.log("---------access_token---------"+access_token);String openid = jsonObject.getString("openid");Utils.log("---------open_id---------"+openid);String refresh_token = jsonObject.getString("refresh_token");if (!access_token.equals("")) {WX_SpEditor.putString(PrefParams.ACCESS_TOKEN, access_token);WX_SpEditor.apply();}if (!refresh_token.equals("")) {WX_SpEditor.putString(PrefParams.REFRESH_TOKEN, refresh_token);WX_SpEditor.apply();}if (!openid.equals("")) {WX_SpEditor.putString(PrefParams.WXOPENID, openid);WX_SpEditor.apply();ThirdLoginWeChat(access_token, openid);}} catch (JSONException e) {e.printStackTrace();}}@Overridepublic void onError(Exception e) {Utils.showToast(LoginActivity.this, "通过code获取数据没有成功");}});}

因为只是登陆而已,所以我没有请求refresh_token,也很简单,获取到access_token之后按照要求请求就可以了,

9:最后一步就是获取你需要的第三方登陆的用户个人信息了
请求说明

http请求方式: GET
https://api.weixin.qq.com/sns/userinfo?access_token=ACCESS_TOKEN&openid=OPENID
可以获取到用户的昵称,性别,城市,头像等你需要的信息,我的请求代码如下:

“`
private void ThirdLoginWeChat(String access_token, String openid) {

    String url  = "https://api.weixin.qq.com/sns/userinfo?access_token="+ access_token+ "&openid="+ openid;HttpUtil.sendHttpRequest(url, new HttpCallBackListener() {@Overridepublic void onFinish(String response) {try {JSONObject jsonObject = new JSONObject(response);Utils.log(jsonObject.toString()+"-------获取个人信息---");String nickName = jsonObject.getString("nickname");String sex = jsonObject.getString("sex");String province = jsonObject.getString("province");String city = jsonObject.getString("city");String country = jsonObject.getString("country");String headimgurl = jsonObject.getString("headimgurl");String privilege = jsonObject.getString("privilege");String unionid = jsonObject.getString("unionid");} catch (JSONException e) {e.printStackTrace();}}@Overridepublic void onError(Exception e) {}});
}```

更详细的Demo里面都有,有什么不清楚的地方可以留言,当然鉴于我个人的初级水平,错误的地方希望加以斧正。感谢~

demo链接

demo演示图片:

这里写图片描述
这里写图片描述
这里写图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/42840.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

qq授权登录【网站应用】-java版本

第一步&#xff1a;先去qq互联进行创建网站应用&#xff1a;QQ互联 如下图&#xff1a; 第二步&#xff1a;引入qq的jar包&#xff0c;这里采用maven方式引用 <!--QQ坐标--><dependency><groupId>net.gplatform</groupId><artifactId>Sdk4J<…

微信授权登陆-app

app接入第三方微信登陆功能&#xff1a; 移动应用微信登录是基于OAuth2.0协议标准 构建的微信OAuth2.0授权登录系统&#xff0c;前提你需要到微信开放平台注册开发者帐号&#xff0c;并拥有一个已审核通过的移动应用&#xff0c;并获得相应的AppID和AppSecret&#xff0c;申请…

Polkit授权管理

Polkit的配置&#xff1a; 查看polkit服务&#xff1a; 一个是agent&#xff0c;一个是polkit服务&#xff1b; agent包含监听接口和一个用户界面&#xff08;对话窗口&#xff09;&#xff0c;允许用户输入密码。Authentication Agent API Reference(https://www.freedesktop…

chatgpt赋能python:Python实现人脸识别

Python 实现人脸识别 随着人工智能技术的发展&#xff0c;人脸识别已经成为一个热门话题。Python作为一种流行的编程语言&#xff0c;也可以用来实现人脸识别。在这篇文章中&#xff0c;我们将介绍使用Python实现人脸识别的方法。 人脸识别的原理 人脸识别是通过计算机程序识…

比尔·盖茨到达北京;印度要求中国手机品牌高管应为印籍;Android 14 Beta 3 推出|极客头条...

「极客头条」—— 技术人员的新闻圈&#xff01; CSDN 的读者朋友们早上好哇&#xff0c;「极客头条」来啦&#xff0c;快来看今天都有哪些值得我们技术人关注的重要新闻吧。 整理 | 梦依丹 出品 | CSDN&#xff08;ID&#xff1a;CSDNnews&#xff09; 一分钟速览新闻点&#…

亚马逊高调入局ChatGPT大战,发布Titan大模型、AI编程助手全免费,CEO:改变所有体验...

MLNLP社区是国内外知名的机器学习与自然语言处理社区&#xff0c;受众覆盖国内外NLP硕博生、高校老师以及企业研究人员。 社区的愿景是促进国内外自然语言处理&#xff0c;机器学习学术界、产业界和广大爱好者之间的交流和进步&#xff0c;特别是初学者同学们的进步。 转载自 |…

【图像分割】TransUNet学习笔记

论文名称&#xff1a;TransUNet: Transformers Make Strong Encoders for Medical Image Segmentation 论文地址&#xff1a;https://arxiv.org/pdf/2102.04306.pdf 代码地址&#xff1a;https://github.com/Beckschen/TransUNet 前言&#xff1a; TransUNet将Transformer和U-…

什么是分镜?用UniStory管理分镜,制定拍摄计划和讨论故事板

分镜是什么 一部成功的电影、电视剧、广告、Vlog等视觉体验&#xff0c;都离不开分镜创作 分镜又叫做故事版&#xff0c;用于早期电影内容的策划和制作&#xff0c;在电影拍摄之前根据导演的要求&#xff0c;用图表的方式来说明影像的构成。一般120分钟的电影&#xff0c;需要2…

AI打LeetCode周赛进入前10%!秘诀:自然语言编程

张晓雅 投稿自 凹非寺量子位 | 公众号 QbitAI 还在自己吭哧吭哧打算法平台Leetcode的周赛&#xff1f;为什么不试试神奇的ChatGPT类AI呢&#xff01; 用AI助手Claude参加第103场周赛&#xff0c;共四道题&#xff0c;均完成了AC&#xff0c;能达到参与者前10%的成绩。 事情的起…

怎么做好电商运营?40份电商运营表格模板,你离优秀的运营只差了一个表格

怎么做好电商运营&#xff1f;40份电商运营表格模板&#xff0c;你离优秀的运营只差了一个表格 618又来了&#xff01;每年的这个时候&#xff0c;都是电商促销活动的高潮&#xff0c;各种优惠活动层出不穷&#xff0c;不管是对你是做电商运营的还是一个消费者&#xff0c;都很…

【跨境电商】EDM邮件营销完整指南(一):概念,区别与优势

关键词&#xff1a;EDM营销&#xff0c;邮件营销&#xff0c;跨境电商 2020年&#xff0c;全球每天发送和接收3064亿封电子邮件。世界上几乎每个人都有一个电子邮件地址&#xff0c;并且电子邮件营销继续拥有最高的投资回报率&#xff0c;这使得电子邮件营销策略对于企业营销工…

学习WooCommerce跨境电商社交媒体营销

WooCommerce 长期以来一直为电子商务店主提供多样化的服务。大约 500 万家商店啓用安装了免费的 WooCommerce 插件。 官方 WooCommerce 插件从 WordPress.org 下载了161,908,802次&#xff0c;并且还在增加。 超过5,106,506 个网站正在使用 WooCommerce。 本文网址: https…

跨境电商人才投放推特广告文案技巧

推特的用户群体广泛&#xff0c;非常适合跨境卖家作为广告投放的引流平台。那么对于跨境电商运营来说&#xff0c;投放推特广告有哪些文案技巧呢?下面海熹跨境人才网来给大家介绍一下&#xff0c;感兴趣的卖家一定不要错过哦。 首先&#xff0c;Twitter建议卖家采用“三R”法进…

文案把卖点被埋没?如此挖掘电商产品卖点,让你轻松获客

绝大部分电商卖家开店面临的最大问题就是不知道如何写文案&#xff0c;直接复制品牌的文案容易被告Q权&#xff0c;自己写的又不吸引人&#xff0c;复制竞争对手的更是无法脱颖而出。同时你也不知道这个文案到底好不好&#xff0c;在别人那里可行的文案&#xff0c;可能你就完全…

工作三年后的胡思乱想

大家好&#xff0c;我是若川。我持续组织了近一年的源码共读活动&#xff0c;感兴趣的可以 点此扫码加我微信 lxchuan12 参与&#xff0c;每周大家一起学习200行左右的源码&#xff0c;共同进步。同时极力推荐订阅我写的《学习源码整体架构系列》 包含20余篇源码文章。历史面试…

如何通过抖音引流推广自己的产品?如何利用抖音引流营销推广?

自抖音公布迄今&#xff0c;短视频形式抖音一路在再次爆红&#xff0c;到当初为止已有着超出5亿的用户人潮了&#xff0c;咱们都晓得抖音是今日头条发的APP&#xff0c;也归属于字节扑腾的部手机硬件之一。当抖音粉絲量往低落时&#xff0c;其营销推广运用价格也被延续的挖掘进…

抖音网红是如何推广产品的?

在做Socialbook产品之前&#xff0c;咱们家做了相当长一段时间的网红推广&#xff0c;在业务开展期间&#xff0c;接触到了很多客户&#xff0c;涵盖各行各业&#xff0c;比如电商、实体店、游戏、应用、甚至黑五类的也来咨询&#xff0c;怎样让网红推广自家的产品&#xff0c;…

抖音小店推广的收益在哪里看到?抖音小店怎么推广?

流量是网络链路中最有价值的东西。抖音用户需要流量&#xff0c;他需要流量来充分曝光自己的作品;抖音官方需要流量&#xff0c;他需要流量让他的推送机制更加完善;淘宝网 在抖音上有很多人做小店都不是卖的自己的商品&#xff0c;而是只去做推广&#xff0c;然后拿去相应的佣…

抖音推广大师软件

简介&#xff1a; 石青抖音推广大师软件&#xff0c;发送的抖音信息到网站统计系统系统中。海量的站长群体&#xff0c;在维护站点流量时候&#xff0c;可以直接看到软件发送的信息。有相当一部分人会直接点击观看&#xff0c;或进入抖音加关注。 软件特色&#xff1a; 1、本…

GPT-4 用 Laf 三分钟写了个完整的待办事项 App

书接前文&#xff0c;上篇文章我们教大家如何三分钟时间用 Laf 实现一个自己的 ChatGPT。 一觉醒来&#xff0c;GPT-4 已经发布了&#xff01; GPT-4 实现了真正的多模态&#xff0c;可以把纸笔画的原型直接写出网页代码。读论文时还能理解插图含意。 好消息是&#xff0c;Chat…