App与Js交互(三)Android、iOS通用解决方案推荐

目录

示例代码

Demo: https://github.com/gwpp/jsinterface

正文

在前两篇文章中我们分别详细的列举了Android、iOS两端与JS的交互方式,iOS有5种,Android有3种,如果还有其他,还请读者继续补充一起学习。这么多的交互方式我们应该怎么去选择呢?看过前两篇文章的同学应该能看一些点:

  • 方法很多,但是难度系数是不同的,有些东西如果要在团队中用起来是需要时间成本、学习成本的。
  • 有些引进了三方库,有些是原生支持的。
  • 有些是Android、iOS两端通用的解决方案,有些是各平台特有的。

技术选型的几项原则

我们做技术选型的时候一般会有几个原则:

  • 易用性。团队的能力要hold住,如果整个团队没有一个人会,那还是要慎重考虑一下学习成本的。
  • 平台通用性。在端与端的交互中我们非常重视这一点,我们希望有一种解决方案可以完美的兼容所有平台,而不是两两之间相互约定一种方式。
  • 社区支持。自己一个人或者一个小团队闷头干是很难的,除了问题都没地方询问、讨论,想想都很蛋疼。
  • 侵入性。如果一种方案可以简单集成,相关代码聚集在一两个文件中;另一种方案会写的到处都是,你会选择哪一个?
  • 可维护性。我们需要的是引进这个方案之后只需要封装一下或者沉淀一份内部的技术文档,就可以让任意同学去进行修改。而不是只有特定的一个人或几个人知道。
  • 其他....

一点推荐

罗里吧嗦说了很多有的没的,那我们究竟应该怎样选择呢?推荐如下:

  1. 拦截跳转(入门级)

    • 适用场景:嵌入页面不多、团队技术能力不强

    • iOS:UIWebView/WKWebView 都可以,使用拦截跳转的形式,具体操作见 《App与Js交互(一)iOS》的方案一、方案二。

    • Android:拦截跳转的形式,具体操作见 《App与Js交互(二)Android》的方案一。

    • 推荐原因:

      1. 跨平台。JS端不需要关心是Android端还是iOS端,约定好跳转链接后就可以两端统一。
      2. 简单易用。JS端只需要window.location=xxxx就好了,Android、iOS也仅仅只是拦截跳转,网上教程很多,不太容易出错。
    • 缺点:

      1. 大量的硬编码代码,约定好的链接都是写死的。
      2. 因为不支持return和callback,所以通信只能是单向的,只能做send操作,做不了get操作。
  2. 暴露Native对象供JS调用 (进阶级)

    • 适用场景:嵌入页面很多、团队技术能力较强

    • iOS:仅支持 UIWebView,暴露出去一个Objective-C对象供JS调用,具体操作见 《App与Js交互(一)iOS》的方案三。

    • Android:暴露出去一个Java对象供JS调用,具体操作见 《App与Js交互(二)Android》的方案二。

    • 推荐原因:

      1. 跨平台。JS端不需要关心是Android端还是iOS端,约定好跳转链接后就可以两端统一。
      2. 移动端不需要再拦截跳转链接,硬编码减少。
      3. 支持双向return。即JS调Native方法可以拿到return,Native调用JS也可以拿到return。
      4. JS端很容易就可以把交互相关的代码封装成一个lib,可以所有页面任意调用。
    • 缺点:

      1. iOS端只支持UIWebView,而UIWebView的内存优化、加载速度等都没有WKWebView做得好,为了用这种交互方式而舍弃WKWebView,这不是一个很好的选择。
      2. Android API 16 之前有安全性问题,详情见 https://jaq.alibaba.com/blog.htm?id=48
      3. 只支持return,不支持callback。所以在异步调用的时候拿不到返回值,比如我要JS调起APP的登录,登录完成后把用户信息返回给JS,这是一个很常规的需求,但这种交互方式却是做不到的。
      4. JS端调用很方便,但是APP端的初始化会比较麻烦,特别是iOS。
  3. JSBridge (成熟级)

    • 适用场景:嵌入页面很多,团队技术能力强,APP、JS团队愿意一起折腾

    • iOS:UIWebView/WKWebView都可以,使用桥接的方式,具体操作见 《App与Js交互(一)iOS》的方案四、方案五。

    • Android:使用桥接方式,具体操作见《App与Js交互(二)Android》的方案三。

    • 推荐原因:

      1. 跨平台。JS端不需要关心是Android端还是iOS端,约定好跳转链接后就可以两端统一。
      2. 移动端不需要再拦截跳转链接,硬编码减少。
      3. 支持双向callback,可以异步回调。
      4. JS端可以封装成lib,可以任意页面发起调用。
      5. 安全性高。
    • 缺点:

      1. 只支持callback,不支持return,使用起来会相对麻烦一些。
      2. JS、Android、iOS三端的初始化代码都很多、很复杂。出现错误排查起来比较麻烦,团队内部最好有一个三端通吃的大佬,否则有时候出了BUG真的会疯掉。

写在最后

可以看见我推荐的三种解决方案都是跨平台的,因为这一点真的很重要,否则页面多起来JS同学会疯掉的。

这三种方案我们团队都用过,【1】是很早就被废弃的,代码太冗余,前端小手一抖APP的拦截就挂了。【2】、【3】我们犹豫了很久,因为都可以达到我们的需求,【2】简单些,网上资料多,但是iOS不能用WKWebView,不支持异步回调。【3】复杂了一点,刚开始用的时候经常出问题,因为JS那边初始化经常出问题,后来才知道是因为代码执行顺序的问题,init还没走完就调了APP的方法,这种情况在web前端有新人入职的时候出现的最多。

最终我们选择的是【3】,尽管它不支持return,但是callback起码可以完成所有需求,只是有时候没有return用的爽而已。至于初始化代码复杂的问题,坑踩过一遍也就过去了,之后都是顺风顺水的。

APP与JS的交互确实是很多坑,越深入越觉得坑,以后有新发现了再和大家一起分享,本系列也就到此为止了,谢谢所有耐着性子看完的同学,哈哈~~

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 206,482评论 6 481
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 88,377评论 2 382
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 152,762评论 0 342
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 55,273评论 1 279
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 64,289评论 5 373
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,046评论 1 285
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,351评论 3 400
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,988评论 0 259
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,476评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,948评论 2 324
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,064评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,712评论 4 323
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,261评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,264评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,486评论 1 262
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,511评论 2 354
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,802评论 2 345