Android对接微信登录记录
Android项目要对接下微信登录,稍微记录下踩坑点
代码
1.添加依赖
implementation 'com.tencent.mm.opensdk:wechat-sdk-android:6.8.0'
2.声明Activity
在你的清单文件添加下面Activity声明
<application>
<activity
android:name="com.test.my.wxapi.WXEntryActivity"
android:label="@string/app_name"
android:theme="@android:style/Theme.Translucent.NoTitleBar"
android:exported="true"
android:taskAffinity="${applicationId}"
android:launchMode="singleTask">
</activity>
</application>
<queries>
<!-- 指定微信包名-->
<package android:name="com.tencent.mm" />
</queries>
注意这里android:name="com.test.my.wxapi.WXEntryActivity"
实际上,我的applicationId就是com.test.my
2.创建Activity和处理回调
由于我的applicationId是com.test.my,但是由于我packageName不是这个,所以我得创建一个包名存放WXEntryActivity
class WXEntryActivity : Activity(), IWXAPIEventHandler {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
//没有这个,不会走下面的2个onReq和onResp回调的
WxLoginUtil.api.handleIntent(intent,this)
}
override fun onReq(p0: BaseReq) {
}
override fun onResp(resp: BaseResp) {
Log.d(WxLoginUtil.TAG, "onResp: 进入WXEntryActivity onResp回调处理")
if (resp is SendAuth.Resp) {
Log.d(WxLoginUtil.TAG, "onResp: onResp回调处理")
//微信登录回调处理
WxLoginUtil.handleResp(resp)
}
//关闭当前微信页面(是透明的),否则会拦截掉原页面点击事件
finish()
}
}
4.处理回调
这里补充下handleResp里的写法,实际上很简单
有以下步骤:
- 处理回调,得到授权code
- 根据授权code,获取到access_token
- 根据access_token,得到最终的用户信息
- 拿到用户信息,之后编写你自己需要的逻辑即可
这里不详细说了,就是依次调用接口就完事了
步骤2调用此https://api.weixin.qq.com/sns/oauth2/access_token?appid=$appId&secret=$appSecret&code=${code}&grant_type=authorization_code
步骤3调用此https://api.weixin.qq.com/sns/userinfo?access_token=${token}&openid=${wxAccessInfo.openid}&lang=${lang}
lang是微信回调SendAuth.Resp对象里的数据
坑点
1.无法回调WxEntryActivity页面
从以下步骤排查:
- WxEntryActivity是否调用
api.handleIntent(intent,this) - 注意WxEntryActivity包名应该与你的applicationId相同,而不是你的包名文件夹
微信wxapi的文件结构包名必须和你填写的applicationId相同
例如你的程序结构是
com.wx.mm,但是你的applicationId是com.wx.mm.qq。这时候创建wxapi包的时候,路径就必须是com.wx.mm.qq.wxapi这时候微信才能正常回调。
2.回到登录页面,无法点击
实际上,从登录页唤起微信,再返回,此时上一层页面是微信的那个WXEntryActivity页面,因为它是透明的,所以拦截了我们原来登录页面的点击事件
解决方法就是在回调的时候,把它页面调用finish关掉即可
3.出现错误40163 code been used
这个问题是请求获取access_token数据的接口返回的,解释说code参数是已被消费
我检测了一遍代码,发现没有重复请求
但最后想起了,项目里用的网络请求框架liangjingkanji/Net: Android 基于协程/OkHttp网络请求工具
然后赶紧直接用okhttp写了个简单的get请求,于是就是完美解决问题...无语了,只能说不要轻信别人封装的框架
真相是Net这个网络框架始终返回的是第二次调用接口给回的数据
还有其他网友说如果和友盟分享一起使用,可能也会有这个问题,因为微信分享和微信登录最终都会回调WxEntryActivity页面的
所以如果是和友盟分享使用的话,可以直接继承友盟分享里的那个WxEntryActivity页面,然后添加逻辑就可以了
Android对接微信登录记录的更多相关文章
- Android对接微信支付体验
在写正文之前我不得不吐槽一下:微信支付所提供的参考文档以及技术支持真心太烂了. 微信的坑: 1.在生成prepay_id向微信服务器传递参数时<body>不支持中文.需要对其进行转码,否则 ...
- Java对接微信登录
今天我们来对接微信开放平台的网站应用登录 首先上文档链接:https://developers.weixin.qq.com/doc/oplatform/Website_App/WeChat_Login ...
- Android微信登录、分享、支付
转载需要著名出处: http://blog.csdn.net/lowprofile_coding/article/details/78004224 之前写过微信登录分享支付第一版: http://bl ...
- 详解Android微信登录与分享
Android 使用微信登录.分享功能 具体的文档详情微信官网上介绍(微信官网文档),本人直接按照项目部署步骤进行讲解: 第一步:申请你的AppID: 第二步:依赖 dependencies { co ...
- Android开发 对接微信分享SDK总结
原文:Android开发 对接微信分享SDK总结 - Stars-One的杂货小窝 公司项目需要对接微信分享,本来之前准备对接友盟分享的,但友盟的分享实际参数太多,而我又只需要对接一个微信分享,于是便 ...
- 对接微信红包时:CA证书出错,请登录微信支付商户平台下载证书
今天在对接微信支付的微信红包发放时,出现““CA证书出错,请登录微信支付商户平台下载证书”的错误,特此记录一下: 如果你也在对接微信红包,并且你也在这个页面上下载了demo,再就是你也参照了里面的文档 ...
- [转] Android:微信授权登录与微信分享全解析
https://wohugb.gitbooks.io/wechat/content/qrconnent/refresh_token.html http://blog.csdn.net/xiong_it ...
- Android接入微信SDK之一:发起微信授权登录
1.重要的事情首先说! 包名.应用签名.app id 三者都必须和在腾讯上申请的一致!!!否则将不能成功. 包名:就是在腾讯上申请的包名 应用签名:使用微信官网提供的<签名生成工具>(这个 ...
- 关于使用微信登录第三方APP的实现(Android版)
使用微信登录APP,免去注册过程,现在已经有很多的类似应用了.集成该功能过程不复杂,但还是有一些地方需要注意的. 开始之前,需要做下面的准备工作. 1.到微信开放平台注册你的APP,并申请开通微信登录 ...
- android微信登录,分享
这几天开发要用到微信授权的功能,所以就研究了一下.可是微信开放平台接入指南里有几个地方写的不清不楚.在此总结一下,以便需要的人. 很多微信公众平台的应用如果移植到app上的话就需要微信授权登陆了. 目 ...
随机推荐
- Springboot实现注解判断权限
Springboot实现注解判断权限 今天记录一下使用springboot的注解来给方法加权限 避免了每个方法都需要大量的权限判断 超级好用√ @ 目录 Springboot实现注解判断权限 1.创建 ...
- [知识管理] Obsidian + Remotely Save插件 + 第三方存储/OSS(七牛云)的同步方案
0 序言 在几经选择.对比之后,我选择:Obsidian + Remotely Save插件 + 第三方存储/OSS(七牛云) 的方案来搭建自己的[知识管理系统]. 对比分析知识管理工具的过程,详情参 ...
- python-显示张量(tensorflow)的具体的值
------------恢复内容开始------------ # 方法1 a = tf. random.normal ([4,4],mean=0.1,stddev=1) with tf.Session ...
- 传纸条 luoguP1006
题目描述 小渊和小轩是好朋友也是同班同学,他们在一起总有谈不完的话题.一次素质拓展活动中,班上同学安排坐成一个 mm 行 nn 列的矩阵,而小渊和小轩被安排在矩阵对角线的两端,因此,他们就无法直接交谈 ...
- DevOps2023现状报告|注重文化、以用户为中心是成功的关键
Google Cloud DORA 团队的一份新研究报告强调了企业文化和关注用户作为成功软件交付支柱的重要性. 2023 DevOps 状况报告分析了过去 9 年来通过此类最大规模调查收集的全球 36 ...
- 16.2 ARP 主机探测技术
ARP (Address Resolution Protocol,地址解析协议),是一种用于将 IP 地址转换为物理地址(MAC地址)的协议.它在 TCP/IP 协议栈中处于链路层,为了在局域网中能够 ...
- 2023-10-21:用go语言,一共有三个服务A、B、C,网络延时分别为a、b、c 并且一定有:1 <= a <= b <= c <= 10^9 但是具体的延时数字丢失了,只有单次调用的时间 一次调
2023-10-21:用go语言,一共有三个服务A.B.C,网络延时分别为a.b.c 并且一定有:1 <= a <= b <= c <= 10^9 但是具体的延时数字丢失了,只 ...
- 夯实JAVA基本之一——泛型详解(2):高级进阶(转)
上一篇给大家初步讲解了泛型变量的各种应用环境,这篇将更深入的讲解一下有关类型绑定,通配符方面的知识. 一.类型绑定1.引入我们重新看上篇写的一个泛型:class Point<T> { pr ...
- 来世再不选Java!
危机感 距离上一次找工作面试已经过去快2年了,那时候正值疫情肆虐,虽然还未感受到"寒潮来临"的苗头,但最终还是成功通过了几轮面试,顺利签约.在目前公司待了2年了,在大环境的影响下, ...
- 视觉BEV基本原理和方案解析
BEV(Bird's-Eye-View)是一种鸟瞰视图的传感器数据表示方法,它的相关技术在自动驾驶领域已经成了"标配",纷纷在新能源汽车.芯片设计等行业相继量产落地.BEV同样在高 ...