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交互实现方式相关推荐

  1. h5 和native 交互那些事儿

    前端菜菜一枚,写下关于h5 和native 交互那些事情.偏前端,各种理论知识,不在赘述.之前有各位大牛已经写过.我只写代码,有问题,下面留言 /* 关于h5 和native 之间的交互 JSBrid ...

  2. [转]Android中程序与Service交互的方式——交互方式

    本文转自:http://blog.csdn.net/yihongyuelan/article/details/7216188 上一篇文章:Android中程序与Service交互的方式--综述 简述了 ...

  3. H5与Native交互之JSBridge技术

    一.原理篇 下面分别介绍IOS和Android与Javascript的底层交互原理 IOS 在讲解原理之前,首先来了解下iOS的UIWebView组件,先来看一下苹果官方的介绍: You can us ...

  4. 【quickhybrid】H5和Native交互原理

    前言 Hybrid架构的核心就是JSBridge交互,而实现这个交互的前提是弄清楚H5和Native端的交互 本文主要介绍Native端(Android/iOS)和H5端(泛指前端)的交互原理 (之前 ...

  5. H5与Native交互之JSBridge技术 1

    做过混合开发的很多人都知道Ionic和PhoneGap之类的框架,这些框架在web基础上包了一层Native,然后通过Bridge技术使得js可以调用视频.位置.音频等功能.本文就是介绍这层Bridg ...

  6. 移动端 h5和原生交互的方式

    一.h5传递给原生WebView的数据协议 传递的是个json字符串: {"id": "random_value","action": &q ...

  7. Android 和H5之间的交互-框架篇

    就目前而言,app的开发主要分三个方向:native app.hybrid app以及web app.个人感觉三种app的体验感是逐渐递减的. hybrid app和web app的开发的不同之处就是 ...

  8. android与h5交互设计,H5与native交互之JSBridge

    JSBridge 1.  Why do we need JSBridge? 2.  Why is "JS"Bridge? 3.  What is JSBridge? Why do ...

  9. Android中程序与Service交互的方式

    本文将通过三大部分来讲解Android中程序与Service的交互方式,这里说的交互方式指的是如何与Service进行消息的传递,比如:从Service中获取信息,向Service发送信息等等.举个简 ...

最新文章

  1. Libvirt — 4 种主机虚拟化网络模式
  2. NTU课程笔记 mas714复习:例题
  3. pytorch选出数据中的前k个最大(最小)值及其索引
  4. 网页的js源文件被加密解决方案
  5. gcc编译流程及中间表示层RTL的探索
  6. JavaNIO - Scatter Gather
  7. python开发精典课程_Andrew Ng经典机器学习课程的Python实现(第1部分)
  8. 在CAD中容易混淆的概念
  9. js基础-8-浅拷贝和深拷贝
  10. 什么时候需要用到RCC_APB2Periph_AFIO–复用IO时钟的使用
  11. 8个国外在线学习网课的网站
  12. 计算机网络资源的资源子网是什么,资源子网
  13. ubuntu系统安装记录
  14. 嵌入式培训怎么学?嵌入式开发培训学什么内容
  15. K线形态识别—多K线之卖出型多日K线组合
  16. java根据业务排序利用Comparator.comparing自定义排序规则
  17. 一文读懂VargFacenet
  18. 微信服务器 移动信号,微信消息延迟,只需更改手机这5个设置,效果“立竿见影”...
  19. 新一代DaaS产品:数聚核DataN产品社区交流会 | 华坤道威专访
  20. 【软件测试】与【硬件测试】到底有何不同?

热门文章

  1. WOWWEE ROVIO小车改造思路
  2. Python之——实现网卡流量图表绘制
  3. 按关键词搜索商品详情商品销量
  4. 需求产程项目,项目产生分层,分层构成框架--快刀斩乱麻
  5. Elasticsearch全文检索实战小结——复盘我带的第二个项目
  6. 背上儿子,带着工作,她敲开了千名贫困绣娘的幸福之门
  7. 嵌入式产品测控组件——ETest
  8. 在Mac下安装nvm管理node 1
  9. SAP--SD2-后台基础配置笔记
  10. PPT怎么插入视频?3个视频插入方法分享!