简介

在我们的应用中,一般都有三方登录这个功能,对于这个常用的功能,我们一般会有如下处理方式

  • 导入三方sdk,按照文档开发
  • 使用如ShareSDK类三方组件来实现

ShareSDK

官方Demo: ThirdPartyLoginDemo
这个参照官方文档一步步的来,也是非常的简单.主要分为两步,
第一步,授权,第二步,获取用户资料

授权:

Platform weibo = ShareSDK.getPlatform(SinaWeibo.NAME);
weibo.setPlatformActionListener(paListener);
weibo.authorize();
//移除授权
//weibo.removeAccount(true);

调用authorize方法,会弹出一个基于ShareSDKUIShell的授权页面,填写账号和密码以后,会执行授权操作。这个方法的操作回调paListener并不实际带回什么数据,只是通过回调告知外部成功或者失败。

同时,这里也是需要修改assets目录下的ShareSDK.xml

获取用户资料:

上面只是完成了授权操作,但是并不会带回 实际的数据,那么一般我们都是需要带回用户的第三方信息的,那么这里就不是调用authorize(),而是showUser(null)

Platform weibo = ShareSDK.getPlatform(SinaWeibo.NAME);
weibo.setPlatformActionListener(paListener);
weibo.showUser(null);//获取用户资料

这里传递了一个paListener.授权回调,在回调中封装了用户的相关资料信息,拿到了用户信息后就好办了.

void onComplete(Platform platform, int action, HashMap<String, Object> res);
void onError(Platform platform, int action, Throwable t);
void onCancel(Platform platform, int action);

注意事项

  • SSO (Single Sign-On)
    SSO授权方式,简单来说就是优先使用目标平台客户端来完成授权。
Platform weibo = ShareSDK.getPlatform(SinaWeibo.NAME);
weibo.SSOSetting(false);  //设置false表示使用SSO授权方式
  • 自定义授权界面


当看到上面的powered by ShareSDK的时候,有些产品是需要去掉的,那么怎么办呢,答案在这里:
bbs.mob.com/thread-114-1-1.html

  • 删除授权信息

在使用ShareSDK三方登陆 的时候,会先判断是否已经完成授权,若已经完成授权,则会直接登陆,这时候如果用户想要切换一个账号.那么就只有清空数据了,这时候就可以用一个方法来清除用户授权信息

Platform qzone = ShareSDK.getPlatform(this, QZone.NAME);
qzone.removeAccount();

官方sdk

除了使用ShareSDK之外,使用官方sdk实现三方登陆也是很不错的选择.

QQ

根据官方文档的介绍一步步的来

  • 首先到[QQ互联]创建应用获取appidappkey
  • 下载SDK,将jar导入项目.
  • 修改Manifest 清单文件.
  • 调用登陆接口,获取用户数据.
// Tencent类是SDK的主要实现类,开发者可通过Tencent类访问腾讯开放的OpenAPI。// 其中APP_ID是分配给第三方应用的appid,类型为String。mTencent = Tencent.createInstance(APP_ID, this.getApplicationContext());// 1.4版本:此处需新增参数,传入应用程序的全局context,可通过activity的getApplicationContext方法获取//login ,BaseUiListener 回调中获取token
mTencent.login(activity, "all", new BaseUiListener(activity))
//根据token,获取用户信息UserInfo userInfo = new UserInfo(context, mTencent.getQQToken());userInfo.getUserInfo(new BaseUiListener(activity));

注意事项,QQ登录中需要先获取Token,然后根据Token获取UserInfo,并且需要重写onActivityResult方法才能回调

微博

  • 在微博开放平台创建应用,并获取appid
  • 下载sdk,将jar 包和so文件导入工程
  • 调用登陆接口,获取用户数据
      // 快速授权时,请不要传入 SCOPE,否则可能会授权不成功AuthInfo mAuthInfo = new AuthInfo(activity, wbAppKey, wbRedirectUrl, wbScope);mSsoHandler = new SsoHandler(activity, mAuthInfo);//login,AuthListener回调mSsoHandler.authorize(new AuthListener());
//根据token,获取用户信息UsersAPI mUserAPI = new UsersAPI(activity, wbAppKey, mAccessToken);long uid = Long.parseLong(mAccessToken.getUid());// 获取openidmUserAPI.show(uid, mListener);

注意事项,微博sso登录需要重写onActivityResult方法

微信

  • 在微信官方平台创建应用,获取appid
  • 下载sdk,并导入jar包,
  • 新建wxapi/WXEntryActivity,微信登陆回调类
  • 编辑Manifest添加回调Activity
  • 编写代码微信授权
    // 微信相关public static IWXAPI api;// 注册到微信private void rigistWeixin() {api = WXAPIFactory.createWXAPI(this,Constants.APP_ID);api.registerApp(Constants.APP_ID);}// 微信登陆请求private void weiXinLogin() {//判断微信是否安装if (api.isWXAppInstalled() && api.isWXAppSupportAPI()) {SendAuth.Req req = new SendAuth.Req();req.scope = "snsapi_userinfo";req.state = "wechat_sdk_demo_Drug A-Z";api.sendReq(req);//第三方发送消息给微信。} else {UIUtil.showToastSafe("没有安装微信");}}
//获取微信用户信息
/*** 授权登录,成功后会回调该方法*/@Override public void onResp(BaseResp resp) {switch (resp.errCode) {case BaseResp.ErrCode.ERR_OK:if (resp.getType() == TYPE_LOGIN) {if (resp instanceof SendAuth.Resp) {final String code = ((SendAuth.Resp) resp).code;ThreadManager.getShortPool().execute(new Runnable() {@Override public void run() {WeixinTokenModel accessToken =WechatApiService.getAccessToken(LoginBlock.getInstance().getWechatAppId(),LoginBlock.getInstance().getWechatAppSecret(), code);if (null != sILoginCallback) sILoginCallback.tokeCallBack(accessToken);if (null != accessToken) {WeixinInfoModel wechatUserInfo =WechatApiService.getWechatUserInfo(accessToken.access_token,accessToken.openid);if (null != sILoginCallback) sILoginCallback.infoCallBack(wechatUserInfo);}}});}}break;case BaseResp.ErrCode.ERR_USER_CANCEL://取消if (resp.getType() == TYPE_LOGIN) {if (resp instanceof SendAuth.Resp && null != sILoginCallback) {sILoginCallback.onCancel();}}break;case BaseResp.ErrCode.ERR_AUTH_DENIED:// 拒绝default://失败if (resp.getType() == TYPE_LOGIN) {if (resp instanceof SendAuth.Resp && null != sILoginCallback) {sILoginCallback.onError(new Exception(resp.errStr));}}break;}finish();}

封装

最后,根据上面SDK封装的ShareLoginPay,包含三方登录,三方分享和三方支付,只需要配置一下 appid等基本信息即可,

//微信登录为例
private LoginManager mLoginManager = LoginManager.INSTANCE;mLoginManager.loginClass(WeiXinLogin.class).loginCallback(new ILoginCallback() {@Override public void tokeCallBack(Object o) {final WeixinTokenModel tokenModel = (WeixinTokenModel) o;runOnUiThread(new Runnable() {@Override public void run() {Toast.makeText(MainActivity.this, tokenModel.toString(), Toast.LENGTH_SHORT).show();}});}@Override public void infoCallBack(Object o) {final WeixinInfoModel infoModel = (WeixinInfoModel) o;runOnUiThread(new Runnable() {@Override public void run() {Toast.makeText(MainActivity.this, infoModel.toString(), Toast.LENGTH_SHORT).show();}});}@Override public void onError(final Exception e) {runOnUiThread(new Runnable() {@Override public void run() {Toast.makeText(MainActivity.this, "onError()--->" + e.getMessage(), Toast.LENGTH_SHORT).show();}});}@Override public void onCancel() {runOnUiThread(new Runnable() {@Override public void run() {Toast.makeText(MainActivity.this, "onCancel()", Toast.LENGTH_SHORT).show();}});}}).doLogin(this);

Android三方登陆之QQ,微信,微博登录及注意事项相关推荐

  1. 实现在App端授权qq/微信/微博登录

    App端登陆相关的SDK需要在manifest中配置: 打开 manifest.json -> App模块权限配置,勾选 OAuth(登陆鉴权). 打开 manifest.json -> ...

  2. python 第三方登录_Python 第三方登录 实现QQ 微信 微博 登录

    本人写的AgentLogin,能快速返回QQ.微信.微博第三方用户名信息,主要用于快速登录 用 pip命令安装 pip install AgentLogin 用法 : 导入这个包 from Agent ...

  3. 安卓三方登录趟坑,QQ,微信,微博,Twitter,Facebook,Instagram

    前言 最近给app加入三方登录,由于比较多,所以就用的友盟统一登录,会比一个一个配置方便点 正文 先说QQ,微信,微博: 国内QQ,微信,微博三方登录其实还行,并没有太多坑,文档也挺完善的. 但是需要 ...

  4. Oauth2.0 QQ微信微博实现第三方登陆

    一.写在前面 目前对于大多数的App或Web网站都支持有第三方登陆这个功能,用户可使用 QQ/ 微信/ 微博 帐号快速登录你的网站,降低注册门槛,为你的网站带来海量新用户.最近在新项目上刚好用到了,在 ...

  5. 访问量分类统计(QQ,微信,微博,网页,网站APP,其他)

    刚准备敲键盘,突然想起今天已经星期五了,有点小兴奋,一周又这么愉快的结束,又可以休息了,等等..我好像是来写Java博客的,怎么变成了写日记,好吧,言归正传. 不知道大家有没有遇到过这样的需求:统计一 ...

  6. QQ微信可以登录但打不开网页

    QQ微信可以登录但打不开网页 方法1. 修改DNS地址 方法2. 关闭科学上网 又碰到这个垃圾问题... 来给自己MARK一下! 方法1. 修改DNS地址 这是网上常见的修改步骤,可以查到很多教程. ...

  7. vue+cordova 实现第三方登录( QQ 微信 微博)之微信登录

    概要 1.首先先到各个开放平台申请开发者账号 先申请,审核通过还需要一定时间 微信开放平台 https://open.weixin.qq.com/ 腾讯开放平台 http://open.qq.com/ ...

  8. QQ微信微博联合登录流程总结

    第三方联合登录一般可以降低网站的获客成本,所以一般的网站都会做一些联合登录,常用的就是QQ.微信.微博了,下面简单的介绍一下这些联合登录的方法. 看了一号店的QQ登录源码可知,点击图标直接访问的是这个 ...

  9. QQ 微信 第三方登录 分享

    </pre>一些基础性的东西我就不说了,至于怎么去下载SDK,什么的相信都知道<p></p><p>QQ </p><p>1.第三方 ...

最新文章

  1. Block的副本放置策略
  2. 大闸蟹谋定功能性养殖-丰收节交易会·李喜贵: 科技示范基地
  3. Python中的高级数据结构
  4. LeetCode之Power of Two
  5. [python opencv 计算机视觉零基础到实战] 一 opencv的helloworld
  6. c++面向对象高级编程 学习二 带指针的类
  7. 信息学奥赛一本通(1042:奇偶ASCII值判断)
  8. javascript焦点图
  9. 【英语学习】【WOTD】abecedarian 释义/词源/示例
  10. Java Web学习总结(40)——JSP中的Application对象和Session对象常用方法详解
  11. [并非笑话]当Borland的工程师向微软寻求技术支持时
  12. android虚拟机模糊,Android studio虚拟机在启动界面和桌面出现画面模糊花屏问题的解决方法...
  13. ROS(9):机器人开源项目poppy-project
  14. poj 3026 Borg Maze
  15. android 截图root权限,为什么 Android 截屏需要 root 权限
  16. 心理声学模型在感知音频编码中的应用
  17. 安卓Autojs逆向破解必备基础smail基础语法
  18. 蓝色音箱改装电源_JBL便携/无线音箱排行榜,JBL便携/无线音箱十大排名推荐
  19. 解决win10设备管理器及操作找不到蓝牙
  20. 游戏策划---ACTIONGAME游戏设计(转)

热门文章

  1. 小朱学英语------day 4 They become millionaires and retired at 31. You can do the same
  2. Unity项目运行时动态更新光照贴图 | LightMap
  3. 自动计算器c语言,C语言实现计算器
  4. QBASIC+dosbox成功实现声卡输出
  5. android运营商相关配置
  6. 2.1英语课本---流利说
  7. 手机存储卡知识及真假辨别 提防山寨卡
  8. 【Unity】自定义Untiy天空
  9. 微搭使用笔记(五) 通过数据源API写入数据并展示到页面
  10. 2021年十大医疗手术机器人公司(翻译)