Android微信第三方登录(个人笔记)

今天在写微信登录,花了半天时间搞定、然后写下自己的笔记,希望帮助更多的人。欢迎各位指教。

微信授权登录,官方说的不是很清楚、所以导致有一部分的坑。

微信注册应用平台的应用签名,下载 微信签名生成工具 输入项目的packageName也可以查看到。

注意:debug、Release 一定要区分,因为2种生成的微信签名不一致,会导致没有跳转、回调。。。。一般在微信开发者上面注册的是正式环境打包好的、)

申请微信开发者账号、应用申请省略。

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

2.在图一按钮上面,加上微信跳转方法、也就是启动微信登录的方法

private void loginToWeiXin(){
  IWXAPI mApi = WXAPIFactory.createWXAPI(this, WXEntryActivity.WEIXIN_APP_ID, true);
  mApi.registerApp(WXEntryActivity.WEIXIN_APP_ID);

  if (mApi != null && mApi.isWXAppInstalled()) {
   SendAuth.Req req = new SendAuth.Req();
   req.scope = "snsapi_userinfo";
   req.state = "wechat_sdk_demo_test_neng";
   mApi.sendReq(req);
  } else
   Toast.makeText(this, "用户未安装微信", Toast.LENGTH_SHORT).show();
 }

3.在你的包名相应目录下新建一个wxapi目录,并在该wxapi目录下新增一个WXEntryActivity类,该类继承自Activity

package(项目报名).wxapi.WXEntryActivity.Java

回调方法onResp() 方法没有触发回调、请监测WXEntryActivity onCreate中是否调用此方法  mApi.handleIntent(this.getIntent(), this);

package com.xxx.xxxx.android.wxapi;
/**
 * 微信登录页面
 * @author kevin_chen 2016-12-10 下午19:03:45
 * @version v1.0
 */
public class WXEntryActivity extends Activity implements IWXAPIEventHandler {
 private static final String APP_SECRET = "填写自己的AppSecret";
 private IWXAPI mWeixinAPI;
 public static final String WEIXIN_APP_ID = "填写自己的APP_id";
 private static String uuid;

 @Override
 public void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  mWeixinAPI = WXAPIFactory.createWXAPI(this, WEIXIN_APP_ID, true);
  mWeixinAPI.handleIntent(this.getIntent(), this);
 }

 @Override
 protected void onNewIntent(Intent intent) {
  super.onNewIntent(intent);
  setIntent(intent);
  mWeixinAPI.handleIntent(intent, this);//必须调用此句话
 }

 //微信发送的请求将回调到onReq方法
 @Override
 public void onReq(BaseReq req) {
  LogUtils.log("onReq");
 }

 //发送到微信请求的响应结果
 @Override
 public void onResp(BaseResp resp) {
  LogUtils.log("onResp");
  switch (resp.errCode) {
  case BaseResp.ErrCode.ERR_OK:
   LogUtils.log("ERR_OK");
   //发送成功
   SendAuth.Resp sendResp = (SendAuth.Resp) resp;
   if (sendResp != null) {
    String code = sendResp.code;
    getAccess_token(code);
   }
   break;
  case BaseResp.ErrCode.ERR_USER_CANCEL:
   LogUtils.log("ERR_USER_CANCEL");
   //发送取消
   break;
  case BaseResp.ErrCode.ERR_AUTH_DENIED:
   LogUtils.log("ERR_AUTH_DENIED");
   //发送被拒绝
   break;
  default:
   //发送返回
   break;
  }

 }

 /**
  * 获取openid accessToken值用于后期操作
  * @param code 请求码
  */
 private void getAccess_token(final String code) {
  String path = "https://api.weixin.qq.com/sns/oauth2/access_token?appid="
    + WEIXIN_APP_ID
    + "&secret="
    + APP_SECRET
    + "&code="
    + code
    + "&grant_type=authorization_code";
  LogUtils.log("getAccess_token:" + path);
  //网络请求,根据自己的请求方式
  VolleyRequest.get(this, path, "getAccess_token", false, null, new VolleyRequest.Callback() {
   @Override
   public void onSuccess(String result) {
    LogUtils.log("getAccess_token_result:" + result);
    JSONObject jsonObject = null;
    try {
     jsonObject = new JSONObject(result);
     String openid = jsonObject.getString("openid").toString().trim();
     String access_token = jsonObject.getString("access_token").toString().trim();
     getUserMesg(access_token, openid);
    } catch (JSONException e) {
     e.printStackTrace();
    }

   }

   @Override
   public void onError(String errorMessage) {

   }
  });
 }

 /**
  * 获取微信的个人信息
  * @param access_token
  * @param openid
  */
 private void getUserMesg(final String access_token, final String openid) {
  String path = "https://api.weixin.qq.com/sns/userinfo?access_token="
    + access_token
    + "&openid="
    + openid;
  LogUtils.log("getUserMesg:" + path);
  //网络请求,根据自己的请求方式
  VolleyRequest.get(this, path, "getAccess_token", false, null, new VolleyRequest.Callback() {
   @Override
   public void onSuccess(String result) {
    LogUtils.log("getUserMesg_result:" + result);
    JSONObject jsonObject = null;
    try {
     jsonObject = new JSONObject(result);
     String nickname = jsonObject.getString("nickname");
     int sex = Integer.parseInt(jsonObject.get("sex").toString());
     String headimgurl = jsonObject.getString("headimgurl");

     LogUtils.log("用户基本信息:");
     LogUtils.log("nickname:" + nickname);
     LogUtils.log("sex:" + sex);
     LogUtils.log("headimgurl:" + headimgurl);
    } catch (JSONException e) {
     e.printStackTrace();
    }
    finish();
   }

   @Override
   public void onError(String errorMessage) {

   }
  });
 }

}

5.在 AndroidManifest.xml 设置注册微信的页面

当授权时候进入WXEntryActivity、当前背景可能是黒或白,为了不影响用户体验,可以把当前Activity设置为透明:

android:theme="@android:style/Theme.Translucent"

<!--注册微信回调 WXEntryActivity -->
<activity
 android:name=".wxapi.WXEntryActivity"
 android:exported="true"
 android:label="@string/app_name"
 android:launchMode="singleTop"
 android:theme="@android:style/Theme.Translucent" />

具体可参考:微信授权登录取用户信息步骤

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • Android实现第三方授权登录、分享以及获取用户资料

    由于公司项目的需要,要实现在项目中使用第三方授权登录以及分享文字和图片等这样的效果,几经波折,查阅了一番资料,做了一个Demo.实现起来的效果还是不错的,不敢独享,决定写一个总结的教程,供大家互相交流.学习和参考,只求能和大家共同进步.希望能多多支持! 这篇文章中,我们使用到了Share SDK,它是为iOS.Android.WP8的APP提供社会化功能的一个组件,目前支持如QQ.微信.新浪微博.腾讯微博.开心网.人人网.豆瓣.网易微博.搜狐微博.facebook.twitter.google+

  • Android实现使用微信登录第三方APP的方法

    本文实例讲述了Android实现使用微信登录第三方APP的方法.分享给大家供大家参考,具体如下: 使用微信登录APP,免去注册过程,现在已经有很多的类似应用了.集成该功能过程不复杂,但还是有一些地方需要注意的. 开始之前,需要做下面的准备工作. 1.到微信开放平台注册你的APP,并申请开通微信登录的权限.参考这里: https://open.weixin.qq.com// 2.下载Android SDK和签名查看工具,请参考: https://open.weixin.qq.com/cgi-bin

  • Android第三方登录之腾讯QQ登录的实例代码

    布局文件 <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="登录成功" android:textSize="25sp" android:layout_marginTop="100dp" /> 清单文件中的配置 <activity android:n

  • Android 第三方登录、分享(ShareSDK、友盟)

    为下边的项目做准备,写一个第三方登录.分享的demo.分别使用sharesdk和友盟来实现. 先说一下我对两者的使用上的感觉,个人感觉sharesdk比友盟更好一点,好在哪里呢?好在人工服务上.在集成的过程中遇到了各种问题,但是sharesdk的人工服务做的很好,能给答疑解惑,提供解决问题的方法! 接下来上代码(本文使用android studio开发,sharesdk版本v2.7.7,友盟版本v6.0.0): 一.使用sharesdk(sharesdk版本v2.7.7)来集成: 1.要去官网:

  • Android集成新浪微博第三方登录的方法

    本文实例讲述了Android集成新浪微博第三方登录的方法.分享给大家供大家参考.具体实现方法如下: 1.下载微博的sdk ,导入微博的jar包两个 android-support-v4.jar和weibosdkcore.jar两个包 2.把新浪微博中的demo_src中SDK中的com,导入到项目中 3.用demo中的constants,主要是参数设置,将里面的参数改成自己的参数. 4.编写代码,主要步骤如下: 复制代码 代码如下: // 初始化微博对象 mWeiboAuth = new Wei

  • Android第三方登录之QQ登录

    本文实例为大家分享了Android第三方登录之QQ的具体代码,供大家参考,具体内容如下 第三方登录之QQ 代码区 public class MainActivity extends AppCompatActivity { private Button btn; private TextView tv; private ImageView image; @Override protected void onCreate(Bundle savedInstanceState) { super.onCr

  • 微信第三方登录Android实现代码

    记录一下微信第三方实现登录的方法.还是比较简单. 一.必要的准备工作 1.首先需要注册并被审核通过的微信开放平台帐号,然后创建一个移动应用,也需要被审核: 2.然后到资源中心下载开发微信所需的工具: 下载的网址:点击打开链接,有一个是SDK,一个是签名生成工具还有一个范例代码. 3.将SDK文件夹lib下的jar文件libammsdk.jar导入到项目工程中: 4.你的测试手机需要装好微信客户端: 5.在项目的AndroidManifest.xml文件中添加如下的权限: <uses-permis

  • Android实现第三方登录的上拉展开,下拉隐藏,下拉隐藏示例

    Android的UI和交互是很重要的一部分,直接影响到用户对软件的体验.随着项目经验的积累,发现Android中动画的运用越来越重要.本篇文章抽出了项目登录界面中实现的第三方登录,用户可以上拉展开,下拉隐藏第三方登录这么一个效果,提高用户和软件的交互性. 实现效果: (1)activity_main.xml <?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android=&q

  • Android调用第三方QQ登录代码分享

    本文为大家分享了调用QQ登录的相关代码,希望对大家有帮助,减少项目开发的时间,具体内容如下 1.去QQ开放平台注册帐号(http://open.qq.com/),为应用申请QQ的APP_ID , 并下载相关的jar包,放到工程的lib目录下. 2.在Manifest.xml里注册QQ相关的Activity,代码如下 <activity android:name="com.tencent.connect.common.AssistActivity" android:screenOr

  • Android微信第三方登录(个人笔记)

    今天在写微信登录,花了半天时间搞定.然后写下自己的笔记,希望帮助更多的人.欢迎各位指教. 微信授权登录,官方说的不是很清楚.所以导致有一部分的坑. 微信注册应用平台的应用签名,下载 微信签名生成工具 输入项目的packageName也可以查看到. (注意:debug.Release 一定要区分,因为2种生成的微信签名不一致,会导致没有跳转.回调....一般在微信开发者上面注册的是正式环境打包好的.) 申请微信开发者账号.应用申请省略. 1. AndroidManifest.xml 权限 <!--

  • iOS微信第三方登录实现

    一.接入微信第三方登录准备工作. 移动应用微信登录是基于OAuth2.0协议标准构建的微信OAuth2.0授权登录系统. 在进行微信OAuth2.0授权登录接入之前,在微信开放平台注册开发者帐号,并拥有一个已审核通过的移动应用,并获得相应的AppID和AppSecret,申请微信登录且通过审核后,可开始接入流程.(注意) 1.下载iOS微信SDK. 下载地址 2.将SDK放到工程目录中. 3.补充导入一些依赖框架. 4.添加URL Types 5.添加iOS9 URL Schemes. 注意:如

  • iOS微信第三方登录实例

    本文实例为大家分享了iOS微信第三方登录,供大家参考,具体内容如下 一.准备工作 1.到微信开放平台注册成开发者,获取appid 2.导入WeChatConnection.framework 3.配置URL Schemes  输入appid  例如wx29ce0f21ea982cb8 二.配置AppDelegate.m 1. 注册微信 //微信登陆 [WXApi registerApp:WeiXin_AppId withDescription:@"weixin"]; 2.设置函数 //

  • 微信第三方登录(原生)demo【必看篇】

    在一家ecstore二开公司有一段时间了,公司希望往自己研发产品上面走,一直在培养新人. 最近要自己去微信登录,自己就在ectore的框架基础上,写的原生微信第三方登录以此来熟悉微信第三方登录,在ecstore上面去写. 一个简单的demo,不是很好,分享给大家,希望能给想做微信第三方登录的朋友带来思路... 首先: 资料准备: 水印图片 28*28 png格式 公司logo 高清图片 108*108 png格式 公司logo 1.在微信开放平台 https://open.weixin.qq.c

  • laravel5实现微信第三方登录功能

    背景 最近手头一个项目需要实现用户在网站的第三方登录(微信和微博),后端框架laravel5.4. 实现过程以微信网页版第三方登录,其他于此类似,在此不做重复. 准备工作 网站应用微信登录是基于OAuth2.0协议标准构建的微信OAuth2.0授权登录系统. 在进行微信OAuth2.在进行微信OAuth2.0授权登录接入之前,在微信开放平台注册开发者帐号,并拥有一个已审核通过的网站应用,并获得相应的AppID和AppSecret,申请微信登录且通过审核后,可开始接入流程. 总结下来就是: 1.进

  • 友盟 微信第三方登录示例

    首先获取应用签名看下图 将签名配置到微信开发者平台 集成看官方文档即可 官方集成文档 http://dev.umeng.com/social/android/android-update?spm=0.0.0.0.qOAeOa#5 值得注意必须在调用授权接口mShareAPI.doOauthVerify(this, platform, umAuthListener) 之后才可以获取用户信息,建议在doOauthVerify方法完成的onComplete方法中调用获取用户信息方法mShareAPI.

  • Android开发:微信授权登录与微信分享完全解析

    前言 在移动互联网浪潮中,联网APP已经把单机拍死在沙滩上,很多公司都希望自家应用能够有一套帐号系统,可是许多用户却并不一定买账:我凭啥注册你家应用的帐号?微博,微信,QQ几乎成了每个人手机中的必装应用,于是微信,微博,QQ说了:来来来,你们都可以用我家的帐号登录你家应用,只要你遵循OAuth2.0协议标准就行.于是第三方社交帐号登陆成为了许多新兴应用的选择,由于腾讯官方微信开放平台的在线文档相对最新的SDK有些出入,并且登录相关的文档结构次序有些紊乱,今天就把我的一些经验记录在此,对微信开放平

随机推荐