Android 实现微信登录详解

作者:lqh 时间:2022-07-14 06:34:11 

前言

 分享到微信朋友圈的功能早已经有了,但微信登录推出并不久,文档写的也并不是很清楚,这里记录分享一下。

 正文

 一、准备

  注册、认证步骤自己来。微信开放平台:https://open.weixin.qq.com

 二、 代码

  2.1 唤起微信登录

   参考官网文档:资源中心/移动应用开放/接入指南/Android接入指南


private IWXAPI mWeixinAPI;

private void loginWithWeixin() {
   if (mWeixinAPI == null) {
     mWeixinAPI = WXAPIFactory.createWXAPI(this, WEIXIN_APP_ID, false);
   }

if (!mWeixinAPI.isWXAppInstalled()) {
     //提醒用户没有按照微信
     return;
   }

mWeixinAPI.registerApp(WEIXIN_APP_ID);

SendAuth.Req req = new SendAuth.Req();
   req.scope = WEIXIN_SCOPE;
   req.state = WEIXIN_STATE;
   mWeixinAPI.sendReq(req);
 }

WEXIN_SCOPE :这里填的snsapi_userinfo,用snsapi_base提示没权限。

WEIXIN_STATE :用于保持请求和回调的状态,授权请求后原样带回给第三方。该参数可用于防止csrf攻击(跨站请求伪造攻击),建议第三方带上该参数,可设置为简单的随机数加session进行校验。

不出意外就能唤起微信登录了。

  2.2 接收微信的请求及返回值

在你的包名相应目录下新建一个wxapi目录,并在该wxapi目录下新增一个WXEntryActivity类,参考文档在AndroidManifest.xml注册Activity。


public class WXEntryActivity extends Activity {

@Override
 protected void onCreate(Bundle savedInstanceState) {
   super.onCreate(savedInstanceState);

handleIntent(getIntent());
 }

@Override
 protected void onNewIntent(Intent intent) {
   super.onNewIntent(intent);
   handleIntent(intent);
 }

private void handleIntent(Intent intent) {
   SendAuth.Resp resp = new SendAuth.Resp(intent.getExtras());
   if (resp.errCode == BaseResp.ErrCode.ERR_OK) {
     //用户同意
   }
 }
}

注意:这里和微信的例子写的有点不一样,不过结果是一样的,这个能取到code等信息,测试返回数据如下:


E/WXEntryActivity(14288): onCreate...key:_wxapi_sendauth_resp_state xxx
   E/WXEntryActivity(14288): onCreate...key:_wxapi_sendauth_resp_token xxxxxxxxxxxxxxxxxxxxxxxxxxxxx
   E/WXEntryActivity(14288): onCreate...key:_mmessage_appPackage com.tencent.mm
   E/WXEntryActivity(14288): onCreate...key:_wxapi_baseresp_transaction null
   E/WXEntryActivity(14288): onCreate...key:_wxapi_sendauth_resp_lang zh_CN
   E/WXEntryActivity(14288): onCreate...key:_wxapi_command_type 1
   E/WXEntryActivity(14288): onCreate...key:_mmessage_content null
   E/WXEntryActivity(14288): onCreate...key:_wxapi_sendauth_resp_country null
   E/WXEntryActivity(14288): onCreate...key:_mmessage_checksum [B@426358e8
   E/WXEntryActivity(14288): onCreate...key:wx_token_key com.tencent.mm.openapi.token
   E/WXEntryActivity(14288): onCreate...key:_wxapi_sendauth_resp_url xxxxxxxxxxx
   E/WXEntryActivity(14288): onCreate...key:_mmessage_sdkVersion 570490883
   E/WXEntryActivity(14288): onCreate...key:_wxapi_baseresp_errcode 0
   E/WXEntryActivity(14288): onCreate...key:_wxapi_baseresp_errstr null
   E/WXEntryActivity(14288): onCreate...key:_wxapi_baseresp_openId null

 xxx     部分的内容我已经隐掉了,拿到code就能拿到access——token了,后续依据文档调用即可。

   这里你可以把WXEntryActivity的theme弄成透明的,然后再弹起来一个ProgressDialog进行后续的操作(提交你自己的服务器),就能和现有的界面完全融合了。

 三、注意:

  3.1 获取签名必须用release包。(所以你会发现微信、微博SDK取得值是一样,所以如果已经有了微博的签名可以直接拷贝到微信使用)

以上对Android 微信登录分享朋友圈的功能,有需要的朋友可以看下。

标签:Android,微信登录
0
投稿

猜你喜欢

  • Java 面试题基础知识集锦

    2022-05-25 00:01:58
  • C#获取本机IP地址(ipv4)

    2021-08-29 19:22:06
  • EasyValidate优雅地校验提交数据完整性

    2022-03-30 11:54:46
  • c#实现隐藏与显示任务栏的方法详解

    2023-05-27 11:59:04
  • Android开发之DatePickerDialog、TimePickerDialog时间日期对话框用法示例

    2022-10-25 21:21:12
  • SpringBoot 监控管理模块actuator没有权限的问题解决方法

    2022-01-26 21:50:11
  • Java synchronized偏向锁的核心原理详解

    2022-12-26 12:11:58
  • SpringBoot基于数据库的定时任务统一管理的实现

    2023-12-10 12:57:47
  • Springboot @Configuration @bean注解作用解析

    2022-11-05 01:58:47
  • C#实现验证码功能

    2021-11-28 22:20:27
  • Java CharacterEncodingFilter案例详解

    2022-03-21 18:22:32
  • SpringBoot之如何指定配置文件启动

    2023-11-17 15:17:48
  • Java Kryo,Protostuff,Hessian序列化方式对比

    2023-10-24 12:41:15
  • Spring Security实现微信公众号网页授权功能

    2021-07-09 08:28:46
  • Java emoji持久化mysql过程详解

    2023-10-10 23:11:49
  • Mybatis分解式查询使用方法

    2023-08-16 04:15:06
  • Android实现图片的裁剪(不调用系统功能)

    2021-05-25 23:26:41
  • java线程池:获取运行线程数并控制线程启动速度的方法

    2022-06-30 23:22:57
  • 简单聊聊C#字符串构建利器StringBuilder

    2022-07-15 12:49:44
  • Java判断主机是否能ping通代码实例

    2023-04-26 22:18:27
  • asp之家 软件编程 m.aspxhome.com