android 调起h5页面微信支付
来源:互联网 发布:windows群集有什么用 编辑:程序博客网 时间:2024/05/17 03:39
最近在做app的支付功能。具体过程在app中获取后台支付url(聚合支付)直接调起微信支付页面。app向webview传入url直接调起网页。以下为webview的部分代码:
webView.getSettings().setJavaScriptEnabled(true);//支持js webView.setWebViewClient(new WebViewClient());//对webview页面加载管理、如url重定向private WebViewClient webViewClient = new WebViewClient() { @Override public boolean shouldOverrideUrlLoading(WebView view, String url) { if (url.startsWith("weixin://")) { Intent intent = new Intent(); intent.setAction(Intent.ACTION_VIEW); intent.setData(Uri.parse(url)); startActivity(intent); return true; } return false; } };
先简单分析一下上面的代码,webViewClient 类是对于网页中url加载和重定向的拦截,当url以weixin://开头就对他进行处理跳转到微信页面。为什么会有这种处理,这就不得不说一下app的scheme机制。android中可以通过intent的隐式启动,添加相关界面activity的包路径,来打开对应的应用和界面。但别人的app包路径不通过逆向手段是无法获取到的,并且有些界面需要传递一些参数,所以这种方法很难实现。因此scheme应运而生,开发商提供一个scheme供其他应用进入。
方法很简单在AndroidManifest.xml文件中的activity标签中添加intent-filter,并且添加data的scheme、host等。
<activity android:name=".module.user.ui.LoginAct" android:screenOrientation="portrait"> <intent-filter> <data android:scheme="test" android:host="hello"> </data> </intent-filter> </activity>
上面的代码产生的scheme为test://hello
String url = "test:/hello" Intent in = new Intent(Intent.ACTION_VIEW, Uri.parse(url)); startActivity(in);
当然也可以传递参数
String url = "test:/hello?key=传递的参数" Intent in = new Intent(Intent.ACTION_VIEW, Uri.parse(url)); startActivity(in);
在目的页面进行接收
Intent intent = getIntent(); String scheme = intent.getScheme(); Uri uri = intent.getData() if (uri != null) { String host = uri.getHost(); //获得参数值 String key1 = uri.getQueryParameter("key1"); }
言归正传,我在开发的时候跳转不过去,截取到的url是intent://开头的,经过测试发现在chrome浏览器是无法跳转的,其他浏览器可以,但webview正好是chrome内核。。。
这是通过网页的形式启动app,以前通过网页启动 app 是通过设置 iframe 的 src 属性例如
<iframe src="paulsawesomeapp://page1"> </iframe>
此方法适用 version 18 或者更早版本。其他 android 浏览器也适用。 这个功能在安卓 chrome 浏览器 version 25 之后版本发生了改变。不能在通过设置 iframe 标签的 src 属性来启动 app 了。取而代之的是你应该通过自定义 scheme 实现用户手势启动 app 或者使用本文描述的“intent:”语法。
所以上面程序修改成:
private WebViewClient webViewClient = new WebViewClient() { @Override public boolean shouldOverrideUrlLoading(WebView view, String url) { if (url.startsWith("intent://")) { Intent intent = Intent.parseUri(uri); intent.addCategory("android.intent.category.BROWSABLE"); intent.setComponent(null); intent.setSelector(null); startActivity(intent); return true; } return false; } };
感谢Android 解析 Intent 协议并打开程序
- android 调起h5页面微信支付
- 微信支付之微信内H5调起支付
- android微信支付之调起支付和支付结果页面回调
- Java微信支付开发之公众号支付(微信内H5调起支付)
- Android微信支付 调起支付流程
- Android微信支付只能调起一次的问题
- Android微信支付只能调起一次的问题
- 微信支付无法调起支付页面的部分原因
- Android使用微信H5支付
- 微信支付 h5
- h5微信支付
- 微信h5支付
- 微信H5支付
- 微信h5支付
- 微信支付 h5 支付
- Android微信支付无法掉起支付的原因
- 安卓端支付宝集成后支付宝H5页面无法调起的问题
- Android使用微信、支付宝、qq钱包H5支付
- 最近玩了一下nordic
- 状态栏与全屏的处理
- YII2框架中统计图插件highcharts所有属性和方法
- poj3624——charm bracelet
- echarts x轴坐标文字显示不全
- android 调起h5页面微信支付
- 使用svn-all-fast-export将SVN转为Git
- 学习笔记第四天
- java(10):jdbc的简单使用和操作
- 循环结构【C语言程序设计】
- 垃圾回收器的工作机制
- 南通青鸟 IT 教育 96 班同学在 3 教室上陆老师的 Java 课
- 实现发邮件方法,随机返回失败成功,50个线程同时调用sendEmail发送1000封邮件,统计发送失败和成功的个数
- 基于Arduino Due的FreeRTOS程序设计(AtmelSAM3X8E)--第一篇