返回顶部
首页 > 资讯 > 移动开发 >详解Android微信登录与分享
  • 781
分享到

详解Android微信登录与分享

Android 2022-06-06 04:06:59 781人浏览 薄情痞子
摘要

Android 使用微信登录、分享功能 具体的文档详情微信官网上介绍(微信官网文档),本人直接按照项目部署步骤进行讲解: 第一步:申请你的AppID; 第二步:依赖 depe

Android 使用微信登录、分享功能

具体的文档详情微信官网上介绍(微信官网文档),本人直接按照项目部署步骤进行讲解:

第一步:申请你的AppID;

第二步:依赖


dependencies {
 compile 'com.tencent.mm.opensdk:wechat-sdk-Android-with-mta:1.0.2'
}

或者:


dependencies {
 compile 'com.tencent.mm.opensdk:wechat-sdk-android-without-mta:1.0.2'
}

这两个依赖包的区别是前者包含统计功能,后者没有。

第三步:在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"/>

第四步:注册到微信,微信的SDK在使用之前需要调用代码进行注册,注册可以是在调用微信SDK的Activity,但最好还是放到入口Activity或者Application中;

WxApplication.java


public static String APP_ID="你的APPID";
public static IWXapi api;
public void onCreate() {
  super.onCreate();
  api = WXAPIFactory.createWXAPI(this, APP_ID, true);
  api.reGISterApp(APP_ID); 
}

第五步:微信登录。

    5.1 点击你的微信登录按钮,进行微信授权,首先需要获取一个code值,在包名下新建一个包,这里必须这样,不能随意命名,比如你的项目包名是:come.shenhua.wx则新建的包为come.shenhua.wx.wxapi在该包下创建一个WXEntryActivity继承IWXAPIEventHandler;(注意Activity的命名也不能随意更改)

LoginActivity.java


private void onClickWeChatLogin() {
  if (WxApplicaiton.api == null) {
   WxApplication.api = WXAPIFactory.createWXAPI(this, WxApplication.APP_ID, true);
  }
  if (!WxApplication.api.isWXAppInstalled()) {
   ToastUtils.toast("您手机尚未安装微信,请安装后再登录");
   return;
  }
  WxApplication.api.registerApp(WxApplication.APP_ID);
  SendAuth.Req req = new SendAuth.Req();
  req.scope = "snsapi_userinfo";
  req.state = "wechat_sdk_xb_live_state";//官方说明:用于保持请求和回调的状态,授权请求后原样带回给第三方。该参数可用于防止csrf攻击(跨站请求伪造攻击),建议第三方带上该参数,可设置为简单的随机数加session进行校验
  WxApplication.api.sendReq(req);
 }

在AndroidManifest.xml中加入,(android:exported="true" 一定不能少)


<activity
   android:name=".wxapi.WXEntryActivity"
   android:exported="true" />

WXEntryActivity.java


public class WXEntryActivity extends AppCompatActivity implements IWXAPIEventHandler {
 public static final String TAG = WXEntryActivity.class.getSimpleName();
 public static String code;
 public static BaseResp resp = null;
 @Override
 protected void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  setContentView(R.layout.activity_wxentry);
  boolean handleIntent = XBLiveApplication.api.handleIntent(getIntent(), this);
     //下面代码是判断微信分享后返回WXEnteryActivity的,如果handleIntent==false,说明没有调用IWXAPIEventHandler,则需要在这里销毁这个透明的Activity;
  if(handleIntent==false){
   Log.d(TAG, "onCreate: "+handleIntent);
   finish();
  }
 }
 @Override
 protected void onNewIntent(Intent intent) {
  super.onNewIntent(intent);
  setIntent(intent);
  XBLiveApplication.api.handleIntent(intent, this);
 }
 @Override
 public void onReq(BaseReq baseReq) {
  Log.d(TAG, "onReq: ");
  finish();
 }
 @Override
 public void onResp(BaseResp baseResp) {
  if (baseResp != null) {
   resp = baseResp;
   code = ((SendAuth.Resp) baseResp).code; //即为所需的code
  }
  switch (baseResp.errCode) {
   case BaseResp.ErrCode.ERR_OK:
    Log.d(TAG, "onResp: 成功");
    finish();
    break;
   case BaseResp.ErrCode.ERR_USER_CANCEL:
    Log.d(TAG, "onResp: 用户取消");
    finish();
    break;
   case BaseResp.ErrCode.ERR_AUTH_DENIED:
    Log.d(TAG, "onResp: 发送请求被拒绝");
    finish();
    break;
  }
 }

resp和code定义成全局变量,在WXEntryWActivity页面销毁后登录页面会走onResume()方法,在这里开始其他操作

    5.2 拿到code后在登录页面通过code获取access_token,官网的说法是:“access_token是调用授权关系接口的调用凭证,由于access_token有效期(目前为2个小时)较短,当access_token超时后,可以使用refresh_token进行刷新”,所以拿到access_token后再次请求进行refresh_token,刷新后拿到access_token即可发送请求获取微信用户信息了;

    获取access_token的URL:AccessTokenUrl = "https://api.weixin.qq.com/sns/oauth2/access_token?appid=你的appid&secret=你的AppSecret&code=授权获取到的code&grant_type=authorization_code";

    刷新access_token的URL:Refresh_tokenUrl = "Https://api.weixin.qq.com/sns/oauth2/refresh_token?appid=你的appid&grant_type=refresh_token&refresh_token=上一步请求到的access_token;

    获取用户信息URL:UserInfoUrl = "https://api.weixin.qq.com/sns/userinfo?access_token=刷新的access_token&openid=刷新access_token时获取的openid;


@Override
 protected void onResume() {
  Log.d(TAG, "onResume: 1");
  super.onResume();
  //这里的判断是为了区分如果不是不是从WXEntryActivity页面销毁重启的,不走下面的代码
  if (WXEntryActivity.resp != null) {
   if (WXEntryActivity.resp.getType() == ConstantsAPI.COMMAND_SENDAUTH) {
    Thread thread = new Thread(downloadRun);
    thread.start();
    try {
     thread.join();
    } catch (InterruptedException e) {
     // TODO Auto-generated catch block
     e.printStackTrace();
    }
   }
  }
 }
 public Runnable downloadRun = new Runnable() {
  @Override
  public void run() {
   WXGetAccessToken();
  }
 };
 //根据code获取access_token,这里用第三方volley框架进行post请求
 private void WXGetAccessToken() {
  String getAccessTokenUrl = AccessTokenUrl;
  StringRequest request = new StringRequest(Request.Method.GET, getAccessTokenUrl, new Response.Listener<String>() {
   @Override
   public void onResponse(String response) {
    Log.d(TAG, "onResponse: " + response);
    Gson gson = new Gson();
    WeChatLoginTokenModel tokenModel = gson.fromJSON(response, WeChatLoginTokenModel.class);
    refresh_token = tokenModel.getRefresh_token();
    WXGetRefreshAccessToken();
   }
  }, new Response.ErrorListener() {
   @Override
   public void onErrorResponse(VolleyError error) {
   }
  });
  request.setTag("weChatGetToken");
  XBLiveApplication.getHttpRequestQueue().add(request);
 }
 //拿到access_token后再次发送请求进行刷新access_token,拿到access_refresh和openid
 private void WXGetRefreshAccessToken() {
  String getRefresh_tokenUrl =Refresh_tokenUrl ;
  StringRequest request = new StringRequest(Request.Method.GET, getRefresh_tokenUrl, new Response.Listener<String>() {
   @Override
   public void onResponse(String response) {
    Gson gson = new Gson();
    WeChatLoginTokenModel tokenModel = gson.fromjson(response, WeChatLoginTokenModel.class);
    String access_token = tokenModel.getAccess_token();
    String openid = tokenModel.getOpenid();
    WXGetUserInfo(access_token, openid);
   }
  }, new Response.ErrorListener() {
   @Override
   public void onErrorResponse(VolleyError error) {
   }
  });
  request.setTag("weChatGetRefreshToken");
  XBLiveApplication.getHttpRequestQueue().add(request);
 }
 //获取用户信息
 private void WXGetUserInfo(String access_token, String openid) {
  String getUserInfoUrl =UserInfoUr;
  StringRequest request = new StringRequest(Request.Method.GET, getUserInfoUrl, new Response.Listener<String>() {
   @Override
   public void onResponse(String response) {
    Log.d(TAG, "onResponse3: " + response);
    Gson gson = new Gson();
    WeChatUserInfoModel userInfoModel = gson.fromJson(response, WeChatUserInfoModel.class);
    String city = userInfoModel.getCity();
    String userName = userInfoModel.getNickname();
    String userIcon = userInfoModel.getHeadimgurl();
    int sex = userInfoModel.getSex();//1:男;0:女;2:未知
    String province = userInfoModel.getProvince();
    openId_WX = userInfoModel.getOpenid();
    ToastUtils.toast("登录成功");
   }
  }, new Response.ErrorListener() {
   @Override
   public void onErrorResponse(VolleyError error) {
   }
  });
    //下面代码是volley框架注册,请忽视
  request.setTag("weChatGetUserInfo");
  XBLiveApplication.getHttpRequestQueue().add(request);
 }

注意一点:在做测试时,微信的应用签名必须要保持一致,比如你在官网填写的是没有打包签名的应用签名,你测试的APP也没有打包签名,那么是没有问题,但是如果你微信官网上填写的是已经上线经过打包签名的应用签名,那你在做测试时必须要用打包签名的应用去做测试。

第六步:微信分享到朋友圈:

第七步:微信分享到微信好友:

您可能感兴趣的文章:Android 类似微信登录输入框效果Android微信第三方登录(个人笔记)Android开发:微信授权登录与微信分享完全解析Android实现使用微信登录第三方APP的方法微信第三方登录Android实现代码Android集成微信登录的步骤详解Android 实现微信登录详解android实现微信联合登录开发示例


--结束END--

本文标题: 详解Android微信登录与分享

本文链接: https://lsjlt.com/news/22533.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • 详解Android微信登录与分享
    Android 使用微信登录、分享功能 具体的文档详情微信官网上介绍(微信官网文档),本人直接按照项目部署步骤进行讲解: 第一步:申请你的AppID; 第二步:依赖 depe...
    99+
    2022-06-06
    Android
  • Android开发:微信授权登录与微信分享完全解析
     前言 在移动互联网浪潮中,联网APP已经把单机拍死在沙滩上,很多公司都希望自家应用能够有一套帐号系统,可是许多用户却并不一定买账:我凭啥注册你家应用的帐号?微博,微...
    99+
    2022-06-06
    授权 android开发 微信分享 Android
  • Android 实现微信登录详解
    前言  分享到微信朋友圈的功能早已经有了,但微信登录推出并不久,文档写的也并不是很清楚,这里记录分享一下。  正文  一、准备  &nb...
    99+
    2022-06-06
    Android
  • Android开发中实现登录微信与分享的方法
    本篇文章给大家分享的是有关Android开发中实现登录微信与分享的方法,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。第一步:申请你的AppID;第二步:依赖dependenci...
    99+
    2023-05-31
    android roi
  • Android集成微信登录的步骤详解
    一、首先在Application的onCreate中写: // GeneralAppliction.java public static IWXAPI sApi; @Ove...
    99+
    2022-06-06
    Android
  • flutter 集成微信登录、分享功能
    1.微信开放平台创建应用 点击“创建移动应用”,填写相关信息后提交审核 审核通过后申请分享和登录的权限 2.ios相关配置 Associated Domains: 在xcode中依次点击:左侧根目录Runner--》TARGETS下的R...
    99+
    2023-08-31
    xcode macos ide
  • Android调用微信登陆、分享、支付
    用了微信sdk各种痛苦,感觉比qq sdk调用麻烦多了,回调过于麻烦,还必须要在指定包名下的actvity进行回调,所以我在这里写一篇博客,有这个需求的朋友可以借鉴一下,以后自...
    99+
    2022-06-06
    登陆 Android
  • 记录Android微信分享功能的吐槽与思考
    在App内潜入分享到微信好友或朋友圈的功能想必大家已经屡见不鲜了,比如Android分享一个网页信息(URL)到微信客户端的代码: public static voi...
    99+
    2022-06-06
    android微信分享 Android
  • Android微信SDK实现分享
    用微信提供的SDK来实现分享: 从http://open.weixin.qq.com下载Android相关的jar包,将libammsdk.jar加入到项目中。 微信分享的核心...
    99+
    2022-06-06
    sdk Android
  • android微信支付源码分享
    本文为大家分享了android微信支付源码,供大家参考,具体内容如下 参数配置 public static final String APP_ID ; public sta...
    99+
    2022-06-06
    源码分享 源码 Android
  • 分享Android微信红包插件
    本文实例为大家分享了Android微信红包插件,供大家参考,具体内容如下 效果图: 具体代码 @TargetApi(Build.VERSION_CODES.JELLY_BE...
    99+
    2022-06-06
    插件 Android
  • Android 微信图片分享功能
    我们都知道,通过 微信官方 分享sdk 支持图片分享,而且有多种方式。官方链接 可直接查看,不再赘述。 本文要解决的问题是,分享本地带二维码的图片给微信好友和朋友圈。朋友圈图...
    99+
    2022-06-06
    图片 Android
  • 微信小程序登录与注册功能的实现详解
    目录小程序中的登录用户注册用户信息修改总结小程序中的登录 在小程序中有一个概念叫openid,这个相当于登录小程序用户的唯一标识,每个微信用户都不同。那要如何拿到用户的唯一标识呢?在...
    99+
    2022-11-13
    微信小程序登录 微信小程序注册
  • 在vue-cli中如何使用微信自动登录和分享
    这篇文章给大家分享的是有关在vue-cli中如何使用微信自动登录和分享的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。一、微信自动登录 //定义事件  meth...
    99+
    2024-04-02
  • 详解SpringBoot如何实现整合微信登录
    目录1.准备工作1.1 获取微信登录凭证1.2 配置文件1.3 添加依赖1.4 创建读取公共常量的工具类1.5 HttpClient工具类2.实现微信登录2.1 具体流程2.2 生成...
    99+
    2024-04-02
  • Android 实现微信,微博,微信朋友圈,QQ分享的功能
    Android 实现微信,微博,微信朋友圈,QQ分享的功能 一、去各自所在的开发者平台注册相应的Key值;引入相关jar包、权限等 二、ShareUtil工具类 impor...
    99+
    2022-06-06
    朋友圈 Android
  • Android怎么实现微信登录功能
    这篇文章主要讲解了“Android怎么实现微信登录功能”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Android怎么实现微信登录功能”吧!目录一、布局界面二、MainActivity.ja...
    99+
    2023-06-20
  • 微信域名检测api接口分享与使用方法详解
    微信域名检测可以让我们很方便的了解所有推广域名在微信中的状态,实时检测出在微信中有问题的域名,减少域名无法打开而带来的损失。那么微信域名检测api接口如何使用呢?今天给大家分享一个微信域名检测api接口,以及详解使用方法。微信域名检测api...
    99+
    2023-06-04
  • 微信小程序微信登录的实现方法详解(JAVA后台)
    目录1. 前提2. 开发流程2.1 小程序端2.2 Java后端接口总结官方文档:https://developers.weixin.qq.com/miniprogram/dev/f...
    99+
    2024-04-02
  • 微信扫码登录功能在PHP中的实现方法分享
    微信扫码登录功能在PHP中的实现方法分享 随着移动互联网的快速发展,微信作为一款使用广泛的社交软件,已成为人们生活中不可或缺的一部分。为了方便用户快速登录网站,许多网站纷纷引入了微信扫...
    99+
    2024-03-04
    php实现 微信登录 扫码 作用域
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作