前言

不知道什么时候开始, QQ oauth登陆, 不再让你在网页输入账号密码了. 页面提示正在拉起QQ手机版. 然后程序就在这里没有然后了.

可能有人会问, 为什么不使用QQ sdk做登陆. 这里提2点:

Android, iOS, Web 3端需要打通, 才能确保一个QQ用户唯一.

平台sdk, 封装了QQ登陆, 对外多个应用提供. 比如常见的游戏sdk.

搜索了下这个sdk就无法QQ登陆了, 应该是QQ web页面不让输入账号密码之后出现的.

QQ只有一键登录,无法输入账号密码

解决问题

首先在webview的shouldOverrideUrlLoading(WebView view, String url)方法里打印下url. 会发现输出

wtloginmqq://ptlogin/qlogin?p=xxxxxxxxxxxxxxxxxxxxxxxxxxxx

这是个非http开头的地址, 内嵌的webview无法识别. 可以联想到QQ应该是走了定制的uri协议来跳转手机QQ. 我们可以通过intent来让系统帮我们跳转到QQ.

if (url.startsWith("wtloginmqq://ptlogin/qlogin")) {

Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(url));

startActivity(intent);

}

加了上述代码, 就能启动QQ并登陆了. 登陆完了, 还会提示跳转到浏览器. 但是这样有个问题, 我们应用拿不到oauth要用到的code了.

既然QQ会登陆完毕会跳转浏览器, 那就让我们应用也能接收url跳转.

android:name=".ui.activity.QQActivity"

android:label="@string/app_name"

android:screenOrientation="portrait"

android:theme="@style/TransparentTheme">

开始测试时只加了scheme限定, 得到地址规则后, 再加的host和path限定符.

然后QQ登陆完毕后, 就是提示应用选择框

这里在做登陆前, 加个引导让用户点自己应用, 否则没有后续了.

选择我们的应用, 在对应的上述我们定义的QQActivity的onCreate或onNewIntent(如果该activity在栈里出现过)里就能响应了. 通过intent取出url, 找了url特征字符没有发现token或code. 才发现在系统浏览器里最终会跳转到我们指定的REDIRECT_URI. 我们让之前那个内嵌webview的执行

mWebView.loadUrl(intent.getData().toString());

shouldOverrideUrlLoading里就能拦截到REDIRECT_URI, 以前不能跳转的代码就又续上了...

当然我们也可以自己发起http请求, 获取跳转地址. 代码如下

@Override

protected void onNewIntent(Intent intent) {

super.onNewIntent(intent);

if (Intent.ACTION_VIEW.equals(intent.getAction()) && intent.getData() != null) {

String url = intent.getData().toString();

StringRequest request = new StringRequest();

request.setMethod("GET");

request.setUrl(url);

request.setListener(new Listener() {

@Override

public void onResponse(int code, String response, Map headers) {

if (code == 302 && headers.containsKey("Location")) {

String url = headers.get("Location");

//url结果为http://你填的REDIRECT_URI?code=aaaaaaaaaaa&state=bbbb

}

}

@Override

public void onError(Response.ResponseError error) {

int w = 0;

}

});

AsyncHttp.get().executeAsync(request);

}

}

备注: 测试手机小米mix2, 未测过其它手机

android h5 qq登录,Android webview一键登录手机QQ(2018.11)相关推荐

  1. 公众号微信一键登录 app微信一键登录

    公众号微信一键登录 app微信一键登录 1.公众号微信一键登录 getCode() { // 非静默授权,第一次有弹框this.code = ''var local = location.href;/ ...

  2. 可以把对方卡掉线的代码_2015最新卡死安卓QQ代码 卡到让对方手机QQ无响应及代码分享...

    利用代码让别人手机无法打开,应该算是手机QQ的一个小BUG吧,最新卡死安卓QQ代码 卡到让对方手机QQ无响应方法以及代码分享.本代码亲测只适用于安卓手机,对苹果手机无效. 1.看下诱 导的效果图,和点 ...

  3. uniapp获取微信授权登录和手机号一键登录(保姆教程)

    uniapp获取微信授权登录(保姆教程) 第一步 下载官方给的解密文件'mWXBizDataCrypt' 没有文件就复制该文件的代码创建一个 var crypto = require('crypto' ...

  4. 通过winform+模拟登录实现快速一键登录到人才招聘网站

    之前为了便于人事部门招聘登录网站更简洁高效,免去每天频繁输网址.用户名.密码等相关登录信息,特基于winform+HttpWebRequest实现模拟请求登录,最终达到一键登录到招聘网站后台的效果. ...

  5. android qq传文件怎么打开方式,手机QQ传文件到我的电脑功能(QQ数据线)的使用方法...

    5月8日,全新手机QQ Android 4.1全线发布,目前已经可以下载.其中一项功能引起了广大网友的好评,那就是"传文件到我的电脑",大家也可以称之为"QQ数据线&qu ...

  6. android 注销功能,你会注销吗?手机QQ安卓版增账号注销功能

    中关村在线消息:北京时间3月13日,今日腾讯更新了Android手机版本QQ(QQ7.9.9版本),并正式上线了账号注销功能. 手机QQ安卓版增账号注销功能(图片来自https://news.mydr ...

  7. Android之自制一个(以假乱真的)山寨的手机QQ

    概述 当前中国最主流的及时通讯工具之一腾讯QQ,经历过这么多年的更迭,其代码繁杂度可想而知,我闲着没事,就仿造手机QQ的布局写了个山寨货,只是长得像QQ而已,肚子里还没装货,并没有实现那些繁杂的功能, ...

  8. uniapp实现小程序登录,微信一键登录,获取token,iv,code,ncryptedData

    首先布局登录按钮(触发登录的一定要是button,button才有获取用户的方法) <buttonopen-type="getPhoneNumber"@click.stop= ...

  9. android 根据滑动隐藏或显示导航 类似手机QQ好友个人信息

    //重写ScrollViewpublic class NotifyingScrollView extends ScrollView {/*** @author Cyril Mottier*/publi ...

  10. android qq 铃声大小设置,手机QQ自定义铃声怎么设置?手机QQ自定义铃声设置教程...

    怎么设置手机QQ自定义铃声?手机QQ提示声怎么自定义?关于自定义手机QQ铃声的教程尽在腾牛个性网,本站提供无需ROOT,超级简单的修改提示音方法,相信对大家有所帮助. 对于手机QQ万年不变提示铃声我想 ...

最新文章

  1. Fragment有直接关系的关键性类FragmentManager,FragmentTransaction,FragmentActivity
  2. adb devices检测不到夜神模拟器的解决办法
  3. static在C和C++语言中的作用
  4. elasticsearch dump 教程
  5. 偷学Office 2007之易用性改造
  6. 管理软件实施(4)——如何编写售前解决方案
  7. Cannot run program /usr/local/android-sdk-linux/build-tools/23.0.2/aapt: error=2, No such file or
  8. 汇编实验----电话号码
  9. matlab解三角函数方程某值附近,matlab解三角函数已知参数方程
  10. MySQL: GTID简介,gtid_executed和gtid_purged概念
  11. elasticserach安装的安全插件
  12. matlab 判断鼠标按下_如何让MATLAB控制你的鼠标和键盘
  13. 定义一个长方形类,求周长和面积--学习笔记--16
  14. Linux GCC 编译过程分析及常用检错的编译选项
  15. mysql数据库查询工具''_数据库查询工具
  16. 学习笔记 | 二八定律、ABC分析法
  17. bootstrap切换tab页局部刷新_Rails 用 RJS 简单有效的实现页面局部刷新
  18. 几何学的公理化:塔尔斯基 pk 希尔伯特,谁能取胜?
  19. 微信小程序学习day02-WXSS 模板样式
  20. Java,完全一头雾水,求大shen们指点

热门文章

  1. VMware虚拟机NAT模式共享主机无线网络的配置方法
  2. mantis 邮件配置 linux,Linux系统 mantis 1.0.6工单系统配置安装
  3. c 语言 如何优化cpu占用率,C#程序优化-有效减少CPU占用率
  4. C语言实现数字全排列
  5. Unity Shader混合模式笔记(Blend)
  6. WTL 自绘控件库 (CQsCheckBox)
  7. leaflet快速渲染聚合矢量瓦片(附源码下载)
  8. 2019-08-27-Seo基础知识
  9. PyCharm 的调试功能
  10. dxf解析python_Python 读取DXF文件