前提:微信授权登录接入需要先到微信开放平台申请好应用的APPID。

接入的两种方式

  • 微信SDK接入:使用微信官方SDK接入,需要分“获取code票据”和“获取access_token”两步来获得授权关系接口的调用凭证
  • 友盟SDK接入:友盟已集成各种接口接入,直接一个方法搞定

ps:

  1. 如果App中只有微信第三方,推荐是使用微信SDK接入,简单,易粘贴。
  2. 如果有QQ、微信、支付宝等等一种以上的第三方推荐使用友盟SDK接入。

通俗易懂的讲就是友盟包含着很多三方,只需要申请一个友盟账号即可。微信只能微信登录,其它的你还得申请其它平台的账号。

微信SDK接入

这篇文章记录的是微信SDK接入实现微信登录并获取用户信息用SharedPreferences把信息保存在本地的代码。

我复制的是这两位大佬的博客。在此附上链接。Teck12、LMYU阿雨
我只是把这两位大佬写的结合了一下。

第一步:build.gradle 文件中,添加如下依赖

api 'com.tencent.mm.opensdk:wechat-sdk-android-without-mta:+'

第二步:清单文件中添加微信登录所需的权限

<uses-permission android:name="android.permission.INTERNET" />
<!-- for mta statistics, not necessary-->
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>
<uses-permission android:name="android.permission.READ_PHONE_STATE"/>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>

第三步:APP_ID最好是存放在我们的变量类是方便我们调用,做微信其他功能时也方便使用

public class ApiConstant{public static final String APP_ID = "微信开放平台申请好应用的APPID";public static final String APP_SECRET = "微信开放平台申请好应用的APPSECRET";public static IWXAPI wx_api;
}

第四步:初始化操作,一般放在Application里

@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {super.onCreate(savedInstanceState);// 通过WXAPIFactory工厂,获取IWXAPI的实例ApiConstant.wx_api = WXAPIFactory.createWXAPI(getApplicationContext(), Constants.APP_ID, true);// 将应用的appId注册到微信ApiConstant.wx_api.registerApp(Constants.APP_ID);
}

第五步:接下来到我们点击登录了,当我们登录时我们的我们的第三方app端会带着我们的APP_ID、包名、签名信息去到微信客户端,微信客户端会带着这些信息去到微信服务器校验注册时的信息,校验成功通知微信客户端唤起微信授权页。

//发送请求唤起收起授权页
public void wxLogin() {if (!ApiConstant.wx_api.isWXAppInstalled()) {ToastUtils.show( "您的设备未安装微信客户端");} else {final SendAuth.Req req = new SendAuth.Req();//应用授权作用域,如获取用户个人信息则填写 snsapi_userinforeq.scope = "snsapi_userinfo";//用于保持请求和回调的状态,授权请求后原样带回给第三方。//该参数可用于防止 csrf 攻击(跨站请求伪造攻击),//建议第三方带上该参数,可设置为简单的随机数加 session 进行校验req.state = "wechat_sdk_demo_test";ApiConstant.wx_api.sendReq(req);}}

第六步:我们要创建微信回调类接收登录授权页登陆状态,在你的包下创建包名为:wxapi、类名为:WXEntryActivity,!包名类名必须相同,实现IWXAPIEventHandle从写onReq、onResp方法,在onResp方法中处理回调信息

public class WXEntryActivity extends Activity implements IWXAPIEventHandler{@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);}@Overridepublic void onReq(BaseReq baseReq) {}@Overridepublic void onResp(BaseResp baseResp) {}
}

第七步:创建完后在我们的清单文件application中注册我们的WXEntryActivity类,exported必须为true

<activityandroid:name=".wxapi.WXEntryActivity"android:exported="true"android:launchMode="singleTop"android:taskAffinity="!放app包名"android:theme="@android:style/Theme.NoDisplay" />

第八步:接下来在我们的WXEntryActivity类中接收,拉起微信登录成功之后,回调的数据会在onResp(BaseResp baseResp)方法里面。

public class WXEntryActivity extends Activity implements IWXAPIEventHandler{private String code;@Overrideprotected void onCreate(@Nullable Bundle savedInstanceState) {super.onCreate(savedInstanceState);//对象传递给 IWXAPI 接口的 handleIntent 方法ApiConstant.wx_api.handleIntent(getIntent(), this);}@Overridepublic void onReq(BaseReq baseReq) {}@Overridepublic void onResp(BaseResp resp) {switch (resp.errCode) {case BaseResp.ErrCode.ERR_OK:Log.i("WXTest", "onResp OK");if (resp instanceof SendAuth.Resp) {SendAuth.Resp newResp = (SendAuth.Resp) resp;//获取微信传回的codecode = newResp.code;//!!!到这我们就获得code值了,可以进行下面自己服务器的操作了//拿到用户信息并保存getAccessToken(code);}break;case BaseResp.ErrCode.ERR_USER_CANCEL:Log.i("WXTest", "onResp ERR_USER_CANCEL ");//发送取消break;case BaseResp.ErrCode.ERR_AUTH_DENIED:Log.i("WXTest", "onResp ERR_AUTH_DENIED");//发送被拒绝break;default:Log.i("WXTest", "onResp default errCode " + resp.errCode);//发送返回break;}finish();}private void getAccessToken(String code) {/***        access_token:接口调用凭证*        appid:应用唯一标识,在微信开放平台提交应用审核通过后获得。*        secret:应用密钥AppSecret,在微信开放平台提交应用审核通过后获得。*        code:填写第一步获取的code参数。*        grant_type:填authorization_code。*/StringBuffer loginUrl = new StringBuffer();loginUrl.append("https://api.weixin.qq.com/sns/oauth2/access_token").append("?appid=").append(ApiConstant.APP_ID).append("&secret=").append(ApiConstant.APP_SECRET).append("&code=").append(code).append("&grant_type=authorization_code");OkHttpClient okHttpClient = new OkHttpClient();Request request = new Request.Builder().url(loginUrl.toString()).get().build();Call call = okHttpClient.newCall(request);call.enqueue(new Callback() {@Overridepublic void onFailure(Call call, IOException e) {Log.e("onFailure1", call.toString());}@Overridepublic void onResponse(Call call, Response response) throws IOException {String responseInfo = response.body().string();String access = null;String openid = null;//用json去解析返回来的access和token值try {JSONObject jsonObject = new JSONObject(responseInfo);access = jsonObject.getString("access_token");openid = jsonObject.getString("openid");} catch (JSONException e) {e.printStackTrace();}getUserInfo(access, openid);}});}private void getUserInfo(String access, String openid) {String getUserInfoUrl = "https://api.weixin.qq.com/sns/userinfo?access_token=" + access + "&openid=" + openid;OkHttpClient okHttpClient = new OkHttpClient();Request request = new Request.Builder().url(getUserInfoUrl).get().build();Call call = okHttpClient.newCall(request);call.enqueue(new Callback() {@Overridepublic void onFailure(Call call, IOException e) {Log.e("onFailure2", call.toString());}@Overridepublic void onResponse(Call call, Response response) throws IOException {String responseInfo = response.body().string();Log.e("onResponse2", responseInfo);//用SharedPreference来缓存字符串SharedPreferences.Editor editor = getSharedPreferences("userInfo", MODE_PRIVATE).edit();editor.putString("responseInfo", responseInfo);editor.commit();ToastUtils.show("登陆成功");Intent intent = new Intent(WXEntryActivity.this, XXXActivity.class);startActivity(intent);finish();}});}
}

友盟SDK接入

这篇文章记录的是友盟SDK实现微信登录并获取用户信息的代码。

第一步:在工程build.gradle配置脚本中buildscript和allprojects段中添加【友盟+】sdk maven仓库地址。

maven { url 'https://dl.bintray.com/umsdk/release' }

第二步:在工程App 对应build.gradle配置脚本dependencies段中添加基础组件库和分享核心库依赖。

    // 友盟统计SDKimplementation  'com.umeng.umsdk:common:9.3.3' // 版本号(必选)implementation  'com.umeng.umsdk:asms:1.1.4' // asms包依赖(必选)//分享登录implementation  'com.umeng.umsdk:share-core:7.1.3'implementation  'com.umeng.umsdk:share-board:7.1.3'implementation  'com.umeng.umsdk:share-wx:7.1.3'

第三步:添加回调Activity,在包名目录下创建wxapi文件夹,新建一个名为WXEntryActivity的activity继承WXCallbackActivity。

public class WXEntryActivity extends WXCallbackActivity {}

第四步:在工程AndroidManifest.xml清单文件中增加

<activityandroid:name=".wxapi.WXEntryActivity"android:configChanges="keyboardHidden|orientation|screenSize"android:exported="true"android:theme="@android:style/Theme.Translucent.NoTitleBar" /><providerandroid:name="androidx.core.content.FileProvider"android:authorities="你的应用包名.fileprovider"android:exported="false"android:grantUriPermissions="true"><meta-dataandroid:name="android.support.FILE_PROVIDER_PATHS"android:resource="@xml/file_paths" />
</provider>

第五步:在res/xml目录(如果没有xml目录,则新建一个)下,添加文件file_paths.xml。

<?xml version="1.0" encoding="utf-8"?>
<paths xmlns:android="http://schemas.android.com/apk/res/android"><external-files-path name="umeng_cache" path="umeng_cache/"/>
</paths>

第六步:添加权限

<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.INTERNET" />

第七步:初始化设置,初始化需要在你的Application中调用友盟的初始化接口。

@Overridepublic void onCreate() {super.onCreate();UMConfigure.init(this,"友盟创建应用的Appkey","umeng",UMConfigure.DEVICE_TYPE_PHONE,"");// 微信设置PlatformConfig.setWeixin("微信开放平台申请好应用的APPID", "微信开放平台申请好应用的APPSECRET");}

第八步:发送请求唤起授权页

 //设置每次登录拉取确认界面(如果不添加以上这几行会造成用户切换会捕获不到用户已切换账号,获取到的OpenID也会重复一致)UMShareConfig config = new UMShareConfig();config.isNeedAuthOnGetUserInfo(true);UMShareAPI.get(this).setShareConfig(config);
//发送请求唤起授权页UMShareAPI mShareAPI = UMShareAPI.get(this);mShareAPI.getPlatformInfo(this, SHARE_MEDIA.WEIXIN, umAuthListener);

第九步:umAuthListener

private UMAuthListener umAuthListener = new UMAuthListener() {@Overridepublic void onStart(SHARE_MEDIA share_media) {}@Overridepublic void onComplete(SHARE_MEDIA share_media, int i, Map<String, String> map) {/*** 微信返回的openID和unionID都可以实现用户标识的需求,二者的区别在于,unionID可以实现同一个开发者账号下的应用之间账号打通的需求* openid:uid* unionid:unionid* accesstoken: accessToken (6.2以前用access_token)* refreshtoken: refreshtoken: (6.2以前用refresh_token)* 过期时间:expiration (6.2以前用expires_in)* name:name(6.2以前用screen_name)* 城市:city* 省份:province* 国家:country* 性别:gender* 头像:iconurl(6.2以前用profile_image_url)* *//*String name = map.get("name");Log.i("wechatuserinfo", name + "用户昵称");//拿到信息去请求登录接口。。。*/ToastUtils.show("授权成功");}@Overridepublic void onError(SHARE_MEDIA share_media, int i, Throwable throwable) {ToastUtils.show("授权失败");}@Overridepublic void onCancel(SHARE_MEDIA share_media, int i) {}};

超简单微信登录(微信SDK接入、友盟SDK接入)相关推荐

  1. iOS 调试友盟SDK和微信SDK集成后的兼容性

    为了解决App在通过微信登录.分享时提示"未验证的应用"这个问题,更新了友盟SDK,同时也更新了微信SDK. 最新版本的微信SDK,需要设置Universal Links,同时需要 ...

  2. uniapp接入友盟(全网唯一 很全!!!)

    uniapp接入友盟以及埋点监控 1.首先进入友盟官网,注册账号 => 友盟官网 2.点击产品 => 小程序统计U-Mini ,进入控制台 3.在应用列表里面可以看见之前创建的应用,点击添 ...

  3. Android Studio集成友盟SDK

    为什么要集成友盟? 在企业开发中往往会给开发人员提出很多的开发要求,如做商城APP的时候,产品经理希望统计某个商品的购买量,或者运营的同事要求你统计APP的启动数,新增客户量,有时候开发人员需要监控A ...

  4. android友盟微信授权登录清除,【转载】Android友盟SDK微信授权登录接入

    微信授权登录接入需要先到微信开放平台申请好应用的APPID,交纳300大洋费用得到授权登录权限后才能使用,此处不再赘述. 接入的两种方式 -- 微信SDK接入:使用微信官方SDK接入,需要分" ...

  5. 试用友盟SDK实现Android第三方登录(以QQ登录为例)

    虽然自己在日常工作中用不到第三方登录,但是它的重要性无可厚非. 废话不多说,接下来跟着步骤走,轻松集成第三方登陆. 一,在友盟注册应用 注册好友盟账户后,在http://www.umeng.com/s ...

  6. 使用友盟SDK实现新浪微博登录

    项目需求实现新浪微博登录,并实现文章对第三方平台的分享,使用友盟SDK实现以上功能,在实现的过程中,踩了一些坑,记录下来和大家分享一下. 友盟提供了SSO(免登录)以及非SSO的方式.所谓SSO的方式 ...

  7. unity 接入友盟数据统计SDK

    1.下载UnitySDK 友盟SDK官网链接:SDK_开发者中心 - 友盟+ (umeng.com) 如下图. 解压后长这样 然后进入Unity3D文件夹,分别导入两个unitypackge包 ①.导 ...

  8. 1个小时接入友盟+ U-APM:解决移动应用崩溃、性能、内存的云监控分析

    目录 背景和痛点 需求分析 维度分析 技术实现 1.注册友盟+会员 2.新建应用 3.集成U-APM的SDK 4.配置必要的权限清单 5.初始化接入 6.集成平台 功能简介: 分析 云真机测试 总结和 ...

  9. 友盟SDK升级(手动集成)

    友盟SDK升级 友盟官方地址:https://developer.umeng.com 1,下载SDK jar包 2,导入项目中 3,添加回调Activity 4,申请第三方账号 5,需要在工程Andr ...

  10. 友盟php接入统计,ionic2 接入友盟统计

    SDK下载 ionic2是基于cordova来实现移动app开发的,因此我们需要先下载友盟的cordova sdk:http://dev.umeng.com/analytic... Android配置 ...

最新文章

  1. 开发日记 20200129 新年这几天的总结
  2. 自助用户选择VM Network
  3. Python面向对象进阶及类成员
  4. 容器set和multiset
  5. 场景创新,推动金融行业数字化转型
  6. python课程的中期报告_电子课程设计中期报告
  7. node.js简单爬虫
  8. dbms数据库管理系统_DBMS中的数据库语言
  9. mysql命令面板数据更改_宝塔面板数据库自动停止解决办法,宝塔面板MySQL数据库自动重启shell脚本...
  10. 风雨秋招路-CV太难了-记得复盘
  11. java工程师青春饭吗_Java工程师是青春饭吗?
  12. 柳传志:联想发展过程中的三大突破
  13. python下载谷歌地图瓦片_openLayers TMS加载谷歌地图瓦片
  14. 详解CSS3 3D的perspective属性
  15. 共享丢失、找不到网络名、访问拒绝等问题的解决
  16. git将master主分支最新代码合并到自己的分支
  17. 起点中文网月票等字体数据爬取Python
  18. openstack创建虚机的过程
  19. C语言—— 闰年判断
  20. 基于opencv的绿背景抠图

热门文章

  1. 计算机科学与技术专业大学排名及录取分数,计算机科学与技术专业分数线各大学排名(湖南)...
  2. 解决win7下Realtek声卡有噪音的问题
  3. word打开html显示空白,电脑打开Word文档内容显示不全或显示空白怎么办
  4. ME909 ECM拨号上网总结
  5. 前端必备的开发工具推荐——VScode代码编辑器
  6. 错误:VM5729:1 Blocked script execution in ‘about:blank‘
  7. 【GCC】warning: pointer targets in passing argument 1 of 'strlen' differ in signedness
  8. 企业信息化有哪些好处?
  9. gnome 如何自定义样式_在Gnome 3中自定义字体
  10. ubuntu 串口调试助手