Android内部h5和native交互实现方式
Android具体实现方式
一、实现方式
a、h5调用native:
Android实现h5到native的方式为截获h5调用的特定url,一般url都是http://**这种,为了能够捕获h5调用的native。
我们采用mdshaction作为scheme,这种string客户端会截获,然后不调用webview的loadurl,而是自己做处理。
规则是 mdshaction://(方法名)?data=(参数)&sign=(标记)
如果没有参数只需要传
mdshaction://方法名
如果有参数的话,参数需要做urlencode,因为传输的参数如果不做urlencode,可能含有空格或者&等等特殊字符,或者可能是json格式
客户端会对这个data做urldecode获取原始的参数来做处理
sign是用来做为h5与native交互后,反馈给h5的一个标记,由h5给客户端
b、native调用h5
native直接调用h5的javascript 即可
c、Android之所以不使用由h5调用js来触发native调用(mWebView.addJavascriptInterface(new JSInterface(), "jsInterface");)的原因是在4.2系统下存有有严重的安全漏洞
详细见http://blog.csdn.net/leehong2005/article/details/11808557
二、实现详情
1、关闭当前界面
h5打开
mdshaction://close
举例说明(以下情况如需必要,否则不再举例,可以去 三 里面看实际例子):
<a href="mdshaction://close" wdfield="kw" onmousedown="return c({'fm':'tab','tab':'tieba'})">close</a>
或者
window.location.href="mdshaction://close";
2、调用登录注册页
h5打开
mdshaction://loginRegist
客户端成功后
调用 webView.loadUrl("javascript:naLoginSuccess('" +userid + "')");
传给服务端调用成功后的userid
举例说明
function naLoginSuccess(userid){window.location.href="mdshaction://showToast?data="+userid;
}
3、调用提交订单(确认订单)页
h5打开
mdshaction://gotoPay?data=(具体参数)
订单参数的格式为json格式,需要urlencode(如无必要,不再说明),就是neworder后那个订单提交时候的那个详细结果的json格式,具体找shuming.ai调
举例
{id="143887303655480955", content=[{id="5fdb355b00de2848c7ecad2bcccf14e1", price="18.9", title="澳洲贵族芒果 1个约600克 ", count="2"}], money="37.8", add_time="2015-08-06 22:57:16", store_name="鲜果汇", is_online_pay="1", volume={enablecount="10", useful="null", description="暂无可用优惠劵~", rows=[{id="zfTWDtnQ", value="1", status="1", is_disable="0", expire_time="2015-07-02至2015-09-02可用", title=""}]}, distributiontime={rows=[{time="立即送货"}]}, address={address_id="7a5baa93fa100a53b16444d8bc41edb9", name="啦啦啦", mobile="15555555555", community="韩国明星国际抗衰(第三置业店)", sex="1", address="86", detail_address="韩国明星国际抗衰(第三置业店) 86", lon="null", lat="null"}, discount_money="37.8", is_need_show_alert="0", alert_text="下单吧", time_alert="0", support_pay_type="alipay,weixin,cashpay", msg="", support_preferential=[]}
<a href="mdshaction://gotoPay?data=%7bid%3d%22143887303655480955%22%2c+content%3d%5b%7bid%3d%225fdb355b00de2848c7ecad2bcccf14e1%22%2c+price%3d%2218.9%22%2c+title%3d%22%e6%be%b3%e6%b4%b2%e8%b4%b5%e6%97%8f%e8%8a%92%e6%9e%9c+1%e4%b8%aa%e7%ba%a6600%e5%85%8b+%22%2c+count%3d%222%22%7d%5d%2c+money%3d%2237.8%22%2c+add_time%3d%222015-08-06+22%3a57%3a16%22%2c+store_name%3d%22%e9%b2%9c%e6%9e%9c%e6%b1%87%22%2c+is_online_pay%3d%221%22%2c+volume%3d%7benablecount%3d%2210%22%2c+useful%3d%22null%22%2c+description%3d%22%e6%9a%82%e6%97%a0%e5%8f%af%e7%94%a8%e4%bc%98%e6%83%a0%e5%8a%b5%7e%22%2c+rows%3d%5b%7bid%3d%22zfTWDtnQ%22%2c+value%3d%221%22%2c+status%3d%221%22%2c+is_disable%3d%220%22%2c+expire_time%3d%222015-07-02%e8%87%b32015-09-02%e5%8f%af%e7%94%a8%22%2c+title%3d%22%22%7d%5d%7d%2c+distributiontime%3d%7brows%3d%5b%7btime%3d%22%e7%ab%8b%e5%8d%b3%e9%80%81%e8%b4%a7%22%7d%5d%7d%2c+address%3d%7baddress_id%3d%227a5baa93fa100a53b16444d8bc41edb9%22%2c+name%3d%22%e5%95%a6%e5%95%a6%e5%95%a6%22%2c+mobile%3d%2215555555555%22%2c+community%3d%22%e9%9f%a9%e5%9b%bd%e6%98%8e%e6%98%9f%e5%9b%bd%e9%99%85%e6%8a%97%e8%a1%b0(%e7%ac%ac%e4%b8%89%e7%bd%ae%e4%b8%9a%e5%ba%97)%22%2c+sex%3d%221%22%2c+address%3d%2286%22%2c+detail_address%3d%22%e9%9f%a9%e5%9b%bd%e6%98%8e%e6%98%9f%e5%9b%bd%e9%99%85%e6%8a%97%e8%a1%b0(%e7%ac%ac%e4%b8%89%e7%bd%ae%e4%b8%9a%e5%ba%97)+86%22%2c+lon%3d%22null%22%2c+lat%3d%22null%22%7d%2c+discount_money%3d%2237.8%22%2c+is_need_show_alert%3d%220%22%2c+alert_text%3d%22%e4%b8%8b%e5%8d%95%e5%90%a7%22%2c+time_alert%3d%220%22%2c+support_pay_type%3d%22alipay%2cweixin%2ccashpay%22%2c+msg%3d%22%22%2c+support_preferential%3d%5b%5d%7d" wdfield="kw" onmousedown="return c({'fm':'tab','tab':'tieba'})">gotoPay</a>
4、调用商店的商品货架页
h5打开
mdshaction://gotoStore?data=(具体参数)
商店参数的格式为json格式,需要urlencode(如无必要,不再说明),具体找shuming.ai调
举例
{storeId=0831135ca8c913e013234560428d1895,city=bj,community_id=cceeea22f74011e4920a52548617546e,is_can_neworder=0}
<a href="mdshaction://gotoStore?data=%7bstoreId%3d0831135ca8c913e013234560428d1895%2ccity%3dbj%2ccommunity_id%3dcceeea22f74011e4920a52548617546e%2cis_can_neworder%3d0%7d" wdfield="kw" onmousedown="return c({'fm':'tab','tab':'tieba'})">gotoStore</a>
5、html5界面是否能够分享
h5显示分享按钮
mdshaction://canShare?data=(参数)
参数为"true"表示显示分享按钮,"false"表示不显示分享按钮
举例
<>showShareButton</>
<>hideShareButton</>
6、调用分享功能(h5调客户端以及客户端点击分享按钮调h5)
h5分享功能
mdshaction://share?data=(参数)&sign=(标记)
参数为json格式,与上期分享功能参数差不多,具体找shuming.ai调。
举例
{share_types=["session","timeline","sina"],title="title",share_title="share_title",share_sub_title="share_sub_title",share_url="http://apic.meidaoshenghuo.com/activity/activityindex/anniversary",share_image_url="http://v.xiaobangshou.cc/Public/Uploads/7b81008ab52625f66ec4210c172b3ba9_M",description="description"}
<a href="mdshaction://share?data=%7bshare_types%3d%5b%22session%22%2c%22timeline%22%2c%22sina%22%5d%2ctitle%3d%22title%22%2cshare_title%3d%22share_title%22%2cshare_sub_title%3d%22share_sub_title%22%2cshare_url%3d%22http%3a%2f%2fapic.meidaoshenghuo.com%2factivity%2factivityindex%2fanniversary%22%2cshare_image_url%3d%22http%3a%2f%2fv.xiaobangshou.cc%2fPublic%2fUploads%2f7b81008ab52625f66ec4210c172b3ba9_M%22%2cdescription%3d%22description%22%7d" wdfield="kw" onmousedown="return c({'fm':'tab','tab':'tieba'})">share</a>
客户端点击分享按钮
调用 webView.loadUrl("javascript:naGetShareData()");
举例说明
function naGetShareData(){window.location.href="mdshaction://share?data=%7bshare_types%3d%5b%22session%22%2c%22timeline%22%2c%22sina%22%5d%2ctitle%3d%22title%22%2cshare_title%3d%22share_title%22%2cshare_sub_title%3d%22share_sub_title%22%2cshare_url%3d%22http%3a%2f%2fapic.meidaoshenghuo.com%2factivity%2factivityindex%2fanniversary%22%2cshare_image_url%3d%22http%3a%2f%2fv.xiaobangshou.cc%2fPublic%2fUploads%2f7b81008ab52625f66ec4210c172b3ba9_M%22%2cdescription%3d%22description%22%7d&sign=kkk";
}
分享成功后,客户端调用
webView.loadUrl("javascript:naShareSuccess('"+sign+"')");
举例说明
function naShareSuccess(sign){window.location.href="mdshaction://showToast?data=share+success";
}
7、添加货架对应商品
h5添加货架商品
mdshaction://addProductInShopCar?data=(参数)&sign=(标记)
参数为json格式,与上期再来一单参数差不多,具体找shuming.ai调。
举例
{rows=[{count="3", product={product_id="56cb02a3cf854940059b813dac69c692", goods_id="af175b1c0aed39dae05a93eda6f60ae3", type="global", title="白心火龙果 1个(约1.2斤) ", pic_url="http://cos.myqcloud.com/1003080/qrhdstore/c5233e858440c7705858b32d92aa9c87", price="8.5", online="1", status="1", sort_id="39a18d21c1e96fba0180b36d3a163b70", sort_name="进口果", top_sort_id="09faee2df155aa058aa4790ae1555afd", top_sort_name="水果", store_id="0831135ca8c913e013234560428d1895"}}, {count="2", product={product_id="5fdb355b00de2848c7ecad2bcccf14e1", goods_id="2b95983da6b4e4c4c996dc90804a8d94", type="global", title="澳洲贵族芒果 1个约600克 ", pic_url="http://cos.myqcloud.com/1003080/qrhdstore/2/b9/2b95983da6b4e4c4c996dc90804a8d94", price="18.9", online="1", status="1", sort_id="39a18d21c1e96fba0180b36d3a163b70", sort_name="进口果", top_sort_id="09faee2df155aa058aa4790ae1555afd", top_sort_name="水果", store_id="0831135ca8c913e013234560428d1895"}}]}
<a href="mdshaction://addProductInShopCar?data=%7brows%3d%5b%7bcount%3d%223%22%2c+product%3d%7bproduct_id%3d%2256cb02a3cf854940059b813dac69c692%22%2c+goods_id%3d%22af175b1c0aed39dae05a93eda6f60ae3%22%2c+type%3d%22global%22%2c+title%3d%22%e7%99%bd%e5%bf%83%e7%81%ab%e9%be%99%e6%9e%9c+1%e4%b8%aa%ef%bc%88%e7%ba%a61.2%e6%96%a4%ef%bc%89+%22%2c+pic_url%3d%22http%3a%2f%2fcos.myqcloud.com%2f1003080%2fqrhdstore%2fc5233e858440c7705858b32d92aa9c87%22%2c+price%3d%228.5%22%2c+online%3d%221%22%2c+status%3d%221%22%2c+sort_id%3d%2239a18d21c1e96fba0180b36d3a163b70%22%2c+sort_name%3d%22%e8%bf%9b%e5%8f%a3%e6%9e%9c%22%2c+top_sort_id%3d%2209faee2df155aa058aa4790ae1555afd%22%2c+top_sort_name%3d%22%e6%b0%b4%e6%9e%9c%22%2c+store_id%3d%220831135ca8c913e013234560428d1895%22%7d%7d%2c+%7bcount%3d%222%22%2c+product%3d%7bproduct_id%3d%225fdb355b00de2848c7ecad2bcccf14e1%22%2c+goods_id%3d%222b95983da6b4e4c4c996dc90804a8d94%22%2c+type%3d%22global%22%2c+title%3d%22%e6%be%b3%e6%b4%b2%e8%b4%b5%e6%97%8f%e8%8a%92%e6%9e%9c+1%e4%b8%aa%e7%ba%a6600%e5%85%8b+%22%2c+pic_url%3d%22http%3a%2f%2fcos.myqcloud.com%2f1003080%2fqrhdstore%2f2%2fb9%2f2b95983da6b4e4c4c996dc90804a8d94%22%2c+price%3d%2218.9%22%2c+online%3d%221%22%2c+status%3d%221%22%2c+sort_id%3d%2239a18d21c1e96fba0180b36d3a163b70%22%2c+sort_name%3d%22%e8%bf%9b%e5%8f%a3%e6%9e%9c%22%2c+top_sort_id%3d%2209faee2df155aa058aa4790ae1555afd%22%2c+top_sort_name%3d%22%e6%b0%b4%e6%9e%9c%22%2c+store_id%3d%220831135ca8c913e013234560428d1895%22%7d%7d%5d%7d&sign=kk" wdfield="kw" onmousedown="return c({'fm':'tab','tab':'tieba'})">addProductInShopCar</a>
客户端成功后
调用 webView.loadUrl("javascript:naAddInShopCarSuccess('"+sign+"')");
举例说明
function naAddInShopCarSuccess(sign){window.location.href="mdshaction://showToast?data=add+product+success";
}
8、移除某个商店货架的所有商品
h5移除货架商品
mdshaction://removeShopCar?data=(参数)&sign=(标记)
参数为具体商店的id
举例
<a href="mdshaction://removeShopCar?data=0831135ca8c913e013234560428d1895&sign=kkk" wdfield="kw" onmousedown="return c({'fm':'tab','tab':'tieba'})">removeShopCar</a>
客户端成功后
调用 webView.loadUrl("javascript:naRemoveShopCarSuccess('"+sign+"')");
举例说明
function naRemoveShopCarSuccess(sign){window.location.href="mdshaction://showToast?data=remove+success";
}
9、移除某个商店货架的某个商品的某些数量
h5移除货架指定个数的某种商品
mdshaction://delProductFromShopCar?data=(参数)&sign=(标记)
参数为json格式,具体找shuming.ai调。
举例
{storeId=0831135ca8c913e013234560428d1895,productId=5fdb355b00de2848c7ecad2bcccf14e1,count=1}
<a href="mdshaction://delProductFromShopCar?data=%7bstoreId%3d0831135ca8c913e013234560428d1895%2cproductId%3d5fdb355b00de2848c7ecad2bcccf14e1%2ccount%3d1%7d&sign=kkk" wdfield="kw" onmousedown="return c({'fm':'tab','tab':'tieba'})">delProductFromShopCar</a>
客户端成功后
调用 webView.loadUrl("javascript:naDelProductFromShopCarSuccess('"+sign+"')");
举例说明
function naDelProductFromShopCarSuccess(sign){window.location.href="mdshaction://showToast?data=remove+product+success";
}
10、显示alert提示窗口
h5显示alert
mdshaction://showAlert?data=(参数)&sign=(标记)
参数为alert的提示文本
举例
<a href="mdshaction://showAlert?data=alerttext&sign=kkk" wdfield="kw" onmousedown="return c({'fm':'tab','tab':'tieba'})">showAlert</a>
客户端确定后
调用 webView.loadUrl("javascript:naClickAlertOk('"+sign+"')");
客户端取消后
调用 webView.loadUrl("javascript:naClickAlertCancel('"+sign+"')");
举例说明
function naClickAlertOk(sign){window.location.href="mdshaction://showToast?data=alert+ok";
}
function naClickAlertCancel(sign){window.location.href="mdshaction://showToast?data=alert+cancel";
}
11、显示/取消 loading动效
h5显示loading
mdshaction://showLoading?data=(参数)
参数为loading的提示文本
h5取消loading
mdshaction://hideLoading?data=(参数)
举例
<>showLoading</>
<>hideLoading</>
12、显示提示 Toast
h5显示toast
mdshaction://showToast?data=(参数)
参数为toast的提示文本
举例
<a href="mdshaction://showToast?data=toasttext" wdfield="kw" onmousedown="return c({'fm':'tab','tab':'tieba'})">showToast</a>
13、调用我的优惠券界面
h5调用我的优惠券
mdshaction://gotoMyCoupon
举例
<a href="mdshaction://gotoMyCoupon" wdfield="kw" onmousedown="return c({'fm':'tab','tab':'tieba'})">gotoMyCoupon</a>
14、调用我的退款界面
h5调用我的退款
mdshaction://gotoMyRefund
举例
<a href="mdshaction://gotoMyRefund" wdfield="kw" onmousedown="return c({'fm':'tab','tab':'tieba'})">gotoMyRefund</a>
15、调用邀请好友界面
h5调用邀请好友界面
mdshaction://gotoInviteFriends
举例
<a href="mdshaction://gotoInviteFriends" wdfield="kw" onmousedown="return c({'fm':'tab','tab':'tieba'})">gotoInviteFriends</a>
16、调用订单详情
h5调用订单详情
mdshaction://gotoOrderDetail?data=(参数)
参数为订单id
举例
<a href="mdshaction://gotoOrderDetail?data=143670851928783777" wdfield="kw" onmousedown="return c({'fm':'tab','tab':'tieba'})">gotoOrderDetail</a>
17、获取api版本号
h5获取客户端api的版本号
mdshaction://getVersion
参数为alert的提示文本
举例
<a href="mdshaction://getVersion" wdfield="kw" onmousedown="return c({'fm':'tab','tab':'tieba'})">getVersion</a>
客户端返回api版本号
调用 webView.loadUrl("javascript:naVersion('" + apiVersion + "')");
举例说明
function naVersion(version){window.location.href="mdshaction://showToast?data="+version;
}
转载于:https://my.oschina.net/u/1168748/blog/507740
Android内部h5和native交互实现方式相关推荐
- h5 和native 交互那些事儿
前端菜菜一枚,写下关于h5 和native 交互那些事情.偏前端,各种理论知识,不在赘述.之前有各位大牛已经写过.我只写代码,有问题,下面留言 /* 关于h5 和native 之间的交互 JSBrid ...
- [转]Android中程序与Service交互的方式——交互方式
本文转自:http://blog.csdn.net/yihongyuelan/article/details/7216188 上一篇文章:Android中程序与Service交互的方式--综述 简述了 ...
- H5与Native交互之JSBridge技术
一.原理篇 下面分别介绍IOS和Android与Javascript的底层交互原理 IOS 在讲解原理之前,首先来了解下iOS的UIWebView组件,先来看一下苹果官方的介绍: You can us ...
- 【quickhybrid】H5和Native交互原理
前言 Hybrid架构的核心就是JSBridge交互,而实现这个交互的前提是弄清楚H5和Native端的交互 本文主要介绍Native端(Android/iOS)和H5端(泛指前端)的交互原理 (之前 ...
- H5与Native交互之JSBridge技术 1
做过混合开发的很多人都知道Ionic和PhoneGap之类的框架,这些框架在web基础上包了一层Native,然后通过Bridge技术使得js可以调用视频.位置.音频等功能.本文就是介绍这层Bridg ...
- 移动端 h5和原生交互的方式
一.h5传递给原生WebView的数据协议 传递的是个json字符串: {"id": "random_value","action": &q ...
- Android 和H5之间的交互-框架篇
就目前而言,app的开发主要分三个方向:native app.hybrid app以及web app.个人感觉三种app的体验感是逐渐递减的. hybrid app和web app的开发的不同之处就是 ...
- android与h5交互设计,H5与native交互之JSBridge
JSBridge 1. Why do we need JSBridge? 2. Why is "JS"Bridge? 3. What is JSBridge? Why do ...
- Android中程序与Service交互的方式
本文将通过三大部分来讲解Android中程序与Service的交互方式,这里说的交互方式指的是如何与Service进行消息的传递,比如:从Service中获取信息,向Service发送信息等等.举个简 ...
最新文章
- Libvirt — 4 种主机虚拟化网络模式
- NTU课程笔记 mas714复习:例题
- pytorch选出数据中的前k个最大(最小)值及其索引
- 网页的js源文件被加密解决方案
- gcc编译流程及中间表示层RTL的探索
- JavaNIO - Scatter Gather
- python开发精典课程_Andrew Ng经典机器学习课程的Python实现(第1部分)
- 在CAD中容易混淆的概念
- js基础-8-浅拷贝和深拷贝
- 什么时候需要用到RCC_APB2Periph_AFIO–复用IO时钟的使用
- 8个国外在线学习网课的网站
- 计算机网络资源的资源子网是什么,资源子网
- ubuntu系统安装记录
- 嵌入式培训怎么学?嵌入式开发培训学什么内容
- K线形态识别—多K线之卖出型多日K线组合
- java根据业务排序利用Comparator.comparing自定义排序规则
- 一文读懂VargFacenet
- 微信服务器 移动信号,微信消息延迟,只需更改手机这5个设置,效果“立竿见影”...
- 新一代DaaS产品:数聚核DataN产品社区交流会 | 华坤道威专访
- 【软件测试】与【硬件测试】到底有何不同?