在shouldOverrideUrlLoading(WebView view, WebResourceRequest request)方法打印URL
这是个非http开头的地址, 内嵌的webview无法识别。可以联想到QQ应该是走了定制的uri协议来跳转手机QQ开始测试时只加了 scheme 限定, 得到地址规则后, 再加的 host 和 path 限定符。选择我们的应用,在对应的上述我们定义的QQActivity的onCreate或onNewIntent(如果该activity在栈里出现过)里就能响应了.。通过intent取出url,找了url特征字符没有发现token或code。才发现在系统浏览器里最终会跳转到我们指定的REDIRECT_URI. 我们让之前那个内嵌webview的执行。
<activityandroid:name=".activity.LoginActivity"android:screenOrientation="portrait"android:windowSoftInputMode="stateHidden|adjustResize"><intent-filter><action android:name="android.intent.action.MAIN" /><category android:name="android.intent.category.LAUNCHER" /></intent-filter><!--QQ登陆--><intent-filter><category android:name="android.intent.category.DEFAULT" /><action android:name="android.intent.action.VIEW" /><category android:name="android.intent.category.BROWSABLE" /><dataandroid:host="ssl.ptlogin2.qq.com"android:path="/jump"android:scheme="https" /></intent-filter>
</activity>
@Override
protected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_login);setUnBinder(ButterKnife.bind(this));Intent intent = getIntent();if (Intent.ACTION_VIEW.equals(intent.getAction()) && intent.getData() != null) {loginWeb.loadUrl(intent.getData().toString());}
}
loginWeb.setWebViewClient(new WebViewClient() {@RequiresApi(api = Build.VERSION_CODES.LOLLIPOP)@Overridepublic boolean shouldOverrideUrlLoading(WebView view, WebResourceRequest request) {String payment_url = SPUtill.getString("payment_url", "0", LoginActivity.this);//判断支付宝和微信手机上是否安装boolean alipay = WhetherUtill.checkAliPayInstalled(LoginActivity.this);boolean wxpay = WhetherUtill.isWeixinAvilible(LoginActivity.this);String url = request.getUrl().toString();if (url == null) return false;int i = 0;if (url.startsWith("weixin://wap/pay?") && wxpay == true) {startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse(url)));return true;} else if (url.startsWith("alipays://") && alipay == true) {if (i == 0) {startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse(url)));Log.e("---https", url);} else {view.loadUrl(payment_url);SPUtill.remove("payment_url", LoginActivity.this);}i++;return true;//我们可以通过Intent让系统帮我们跳转到QQ} else if (url.startsWith("wtloginmqq://ptlogin/qlogin")){startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse(url)));Log.e("---https", url);return true;} else {Map<String, String> extraHeaders = new HashMap<String, String>();extraHeaders.put("Referer", “https://blog.csdn.net/weixin_40780294);view.loadUrl(url, extraHeaders);}return true;}
});
public class WhetherUtill {/*** 检测是否安装支付宝* @param context* @return*/public static boolean checkAliPayInstalled(Context context) {Uri uri = Uri.parse("alipays://platformapi/startApp");Intent intent = new Intent(Intent.ACTION_VIEW, uri);ComponentName componentName = intent.resolveActivity(context.getPackageManager());return componentName != null;}/*** 判断 用户是否安装微信客户端*/public static boolean isWeixinAvilible(Context context) {final PackageManager packageManager = context.getPackageManager();// 获取packagemanagerList<PackageInfo> pinfo = packageManager.getInstalledPackages(0);// 获取所有已安装程序的包信息if (pinfo != null) {for (int i = 0; i < pinfo.size(); i++) {String pn = pinfo.get(i).packageName;if (pn.equals("com.tencent.mm")) {return true;}}}return false;}/*** 判断 用户是否安装QQ客户端*/public static boolean isQQClientAvailable(Context context) {final PackageManager packageManager = context.getPackageManager();List<PackageInfo> pinfo = packageManager.getInstalledPackages(0);if (pinfo != null) {for (int i = 0; i < pinfo.size(); i++) {String pn = pinfo.get(i).packageName;if (pn.equalsIgnoreCase("com.tencent.qqlite") || pn.equalsIgnoreCase("com.tencent.mobileqq")) {return true;}}}return false;}/*** sina* 判断是否安装新浪微博*/public static boolean isSinaInstalled(Context context){final PackageManager packageManager = context.getPackageManager();// 获取packagemanagerList<PackageInfo> pinfo = packageManager.getInstalledPackages(0);// 获取所有已安装程序的包信息if (pinfo != null) {for (int i = 0; i < pinfo.size(); i++) {String pn = pinfo.get(i).packageName;if (pn.equals("com.sina.weibo")) {return true;}}}return false;}}

webview 支付宝、微信支付 QQ登录相关推荐

  1. 【安卓学习之第三方库】 Rxpay学习:支付宝微信支付

    █ [安卓学习之第三方库] Rxpay学习:支付宝微信支付 █ 相关文章: [安卓学习之第三方库]库的使用2-jar类库的使用(以dom4j为例)和升级(以极光推送为例) [安卓学习之第三方库] 消息 ...

  2. WooCommerce接入支付宝微信支付

    WooCommerce接入支付宝微信支付 前言 安装支付宝插件(方法一) 安装配置 获取注册信息 安装支付宝插件(方法二) 安装微信支付插件 下载及安装 获取微信公众号APPID,微信支付密钥 获取微 ...

  3. ajax余额支付宝微信支付(多种情况调用同一个接口、jquery创建新对象设置属性)

    需求:需要用余额.支付宝.微信支付方式支付会员,余额支付显示余额其余支付不显示余额.余额点支付直接成功或失败,支付宝/微信支付弹出相应的二维码.支付接口为同一个,但要处理三种情况. 用到了ajax的c ...

  4. MongoDB Ubuntu安装 APP 支付宝微信支付

    mongo安装: 1.apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv 7F0CEB10 2.echo "deb ht ...

  5. WebView支付宝wap支付转支付宝客户端支付

    android WebView支付宝wap支付转支付宝客户端支付重写WebViewClient的以下方法即可.可参考 支付宝平台文档商户APP的WebView处理alipays协议 public bo ...

  6. springboot整合支付宝微信支付案例+代码

    springboot支付宝微信支付 每天多学一点点~ 之前写好了一篇,不下心被覆盖的,我的锅....下次写博客记得导出来!!!! 话不多说,这就开始吧- 文章目录 springboot支付宝微信支付 ...

  7. php调用支付宝微信支付接口 免签约 实测能用

    找了很多支付宝微信支付收款的办法,接入的时候发现根本不靠谱,终于实测到了一个可以用的,(验证效果不用改代码,php环境下Demo.php直接打开看就行了 附件放在下面了) 支付宝收款实测有效,微信支付 ...

  8. android支付宝支付微信支付封装,Android仿支付宝微信支付密码界面弹窗封装dialog...

    一,功能效果 二,实现过程 1,先写xml文件:dialog_keyboard.xml 注意事项 (1),密码部分用的是一个线性布局中6个TextView,并设置android:inputType=& ...

  9. native react 集成微信登录_React Native 接入微博、微信、QQ 登录功能

    在 App 开发中我们经常需要在用户登录模块接入 SNS 登录组件,这样会大大提高用户的注册体验.特别当一个不是刚性需求 App 推广的时候,这样会很大的降低用户体验的成本,没有人愿意忍受输入邮箱.手 ...

  10. 微信QQ第三方登录分享和支付宝微信支付

    登录是使用的是友盟第三方登录:APPID 和APPKEY都是成对出现的,改一个都要改不然出错. QQ第三方登录: APPID ,APPKEY: 微信第三方登录:WEIXINID, WEIXINKEY ...

最新文章

  1. ICML 2020 | 小样本学习首次引入领域迁移技术,屡获新SOTA结果
  2. 使用JavaScript的FormData向SAP ABAP系统发起登录请求
  3. 先序中序数组推后序数组
  4. 分段二次插值例题_分段三次插值
  5. 报错, nested exception is com.fasterxml.jackson.databind.exc.MismatchedInputException
  6. C++小游戏——海战棋
  7. Request header field storeid is not allowed by Access-Control-Allow-Headers in preflight response.
  8. solidity 合约权限授权_Curve + zkSync L2:以太坊的ZK Rollup智能合约
  9. Axure RP原型
  10. 算法竞赛入门经典(第2版)-刘汝佳-第九章例题解题源码(C++语言)(部分)
  11. SCI顶级牛刊《Nature》合集PDF(2018~2020年度)
  12. linux 10247 java_linux kubernetes
  13. 知识图谱关键技术及行业应用解读
  14. Android使用百度地图定位SDK在wifi下位置偏差
  15. PointNeXt: 通过改进的训练以及模型缩放策略重新探究PointNet++
  16. 新手小白如何画中世纪骑士铠甲?有什么需要注意?
  17. 【谷粒学院】001-项目概述、Mybatis Plus入门
  18. 计算机网络期末考试知识点汇总
  19. 非计算机专业学生计算机基础知识和应用能力,全国高校非计算机专业学生计算机基础知识和应用能力等级考试大纲...
  20. 小组取什么名字好_寓意好的公司名字大全 公司名字取什么好

热门文章

  1. Word中公式编辑的快捷键
  2. java计算机毕业设计文档资料管理系统源码+系统+数据库+lw文档+mybatis+运行部署
  3. mantis最正确的安装步骤详解,不能实现你找我
  4. 以实例说明,网吧组网方案详解!(转)
  5. Dns数据包内容分析
  6. python多个文件打包成exe_多个py文件生成一个可运行exe文件
  7. CCF CSP 中国计算机学会-CCF计算机软件能力认证(计算机水平测试)-简介-详情
  8. 请谈谈你对volatile的理解?--最近小李子与面试官的一场“硬核较量”
  9. der解码规则_DER 编码规范理解
  10. P1540 机器翻译洛谷题解