来oschina这么久了,其实平时也就读的比较多,今天也来写一点儿东西吧。

核心技术NativeBridge


我们先来看一下现在的互联网项目需要哪些部分组成,比如淘宝,天猫,京东,
微博,等等.我们会发现现阶段一个互联网项目它同时具有网页端,app甚至还有一个微信入口,在过去我们的程序员选择工作的时候,可以选择做网页开发,做网站又或者选择学习安卓然后做app开发.


我们现在来看一些实际的例子,在微信群看文字分享的朋友可以看一下我们发送的截图,这些项目都是使用NativeBridge技术来实现的,我们说的FaceBook的框架ReactNative以及著名的混合App框架PhoneGap等也是使用的类似NativeBridge原理.

必发娱乐官方网站 1

1.png

京东的活动页面,点击进去,是一个app的详情页,是用原生的来写的


在微信火起来以后,外面就出现了很多微信公众平台开发的岗位,然而现在企业需求的并不是我有一个企业官网,然后再做一个app,而是一个完备的系统.它的数据业务应该是一个整体它的入口有很多,如网页,app,微信,微博等,都可以是整个平台的流量入口,而整个产品也可以通过各个不同的端口来为用户提供服务


这们的设计整个技术栈层级很深,通常企业要维系这样的一个项目运营,需要有Liunx运维人员,然后需要有数据库管理员,需要Web后端开发人员如PHP,Java


若是做网页端则需要H5前端工程师,做App的话需要分别有IOS,Android两套


若是在加上WinPhone以及其它那些市场占有率不太高的平台,则开发人员的数量会变得更多


这样导致的直接后果就是项目开发运营成本高,开发周期长,团队管理难度大.
人才储备困难,到项目稳定运营后各岗位工作饱和度并不高.却要维系一个庞大的团队来运营一个项目,如果从考虑项目稳定性出发,所有的岗位都需要冗余,这样算下来,有那么多移动互联网项目跨掉就不奇怪了


基于上述原因催生了全栈工程师这样一类技术人员的火爆,我们常常在招聘网站上看到这样的岗位,招聘移动互联网项目开发的php程序员,招聘混合app开发的H5程序员,招聘微信开发的Java程序员等诸如此类的岗位.其实这些岗位都是全栈工程师能轻松拿下的岗位


可是在过去的几年中,全栈工程师的发展却没有那么快.根本原因在于一个人要同时掌握那么多技能并灵活运用,不是一件容易的事情.好在大公司给我们指明了方向国内以腾讯,阿里为首;而国外最大的网络社区facebook,它们都采用了同一种方式来解决这一问题


我们知道做为单一程序员精通的技能越多越好,然而做为企业解决方案应该尽可能的减少不同种类的技术引用,因为每多引入一种技术,就要配备相应技能的人员,尤其是引入了使用面不那么广的技术,可能导致招聘都困难


同时精通PHP,Java,JS,OC,Linux以及Mysql这样的程序员肯定不多见.如果有这样的程序员也就大概三五个,便能将传统开发模式下几十人运营和维护的项目拿下来.可这种程序员却实是太少了,即便是像京东,百度这样的公司里面传统意义上的全栈工程师数量也不多.我们来看看这些大公司是如何解决这些问题的.市场上最多的就是Web程序员,徜若我们给Web开发程序员增加一些额外的技能,能不能让他们完成全栈工程师完成的工作呢?


当然可以了,答案就是我们今天要给大家介绍的Native
Bridge技术.普通Web程序员通常会掌握一门后端开发语言以及前端Web开发语言JS,比如你之前学的是JavaEE那么你肯定会Java语言和JS语言,如果你学的是PHP,那么你精通的是PHP语言和JS语言.如果你专门去学H5在涉及到Ajax与服务器通信的时候,你也需要同PHP或者是Java等后端语言进行交互


我们知道全球有82%的网站是用PHP做的,PHP程序员都会PHP和JS,如果我们仅使用两种编程语言甚至是一种编程语言,就能完成一个拥有网页端,微信端,app端的多端应用.那么我们将能培养大量的全栈工程师,这批全栈工程师可以胜任移动互联网领域所有的开发岗位


现在市面上流行的混合app框架有很多,这些构架大部分都是国外的.比如
FaceBook开源的ReactNative就是其中的佼佼者,在加上单页App技术成熟与普及使得仅使用PHP加JS就可以完成整个项目开发


那么是不是我们只学习类似ReactNative构架就可以做全栈工程师了呢?问题没那么简单,如果你在国外或许还真行,可是在国内我们要想精通混合App开发模式,我们需要了解混合App实现原理也就是NativeBridge技术,因为国外的框架是不会集成支付宝和微信的,而国外集成的很多好用的组件也因为国内网络的特殊性导致我们部分组件无法正常使用


要能灵活地使用NativeBridge完成自己的项目开发,我们除了必要的编程语言技能外,还需要对移动互联网的整个生态与行业特点,比如说在国内我们很多的项目会接入微信公众平台,并且微信也有提供相应的JSSDK让我们的网页拥有调用扫码,语音识别的能力.那么我们开发的平台要想让我们的程序做到一次开发多端兼容,那么我们除了兼容IOS,Android以外还应把微信,支付宝,微博这样的行业巨头考虑进去


NativeBridge的实现原理其实并不复杂,大的原则来说就是讲数据渲染,用户交互,流程控制等核心业务类开发需求交给Web程序员来完成.而涉及到手机硬件和第三方平台提供的功能则使用底层封装并提供统一的JS与PHP接口,这种封装技术叫做NativeBridge


那么我们下面在来看一下Android和IOS分别是如何实现NativeBridge的.以下的演示是为了方便大家看懂原理,所以对代码进行了大量的简化,与兄弟会在商业项目中正在大量使用的封装存在较大差距.如果是把商业级代码直接摆出来不利于大家理解,也违反公司规定


Objective-C怎么访问JavaScript呢?


在我们iOS应用里面会嵌套一个叫UIWebView的类似浏览器的组件,可以展示HTML


UIWebView对象有一个方法
- (NSString *)stringByEvaluatingJavaScriptFromString:(NSString *)script
该方法能够执行一段JavaScript字符串, 并返回字符串类型的返回值


在iOS里面,JavaScript
是不能直接调用Objective-C的,在ios7以前我们会用拦截协议的形式实现。这个适合一些比较简单的情况,不需要引入框架,只需要web前端配合就可以


拦截协议。其实就是URL请求截获。在UIWebView的浏览器的JavaScript中,
没有相关的接口可以调用Objective-C的相 关方法. 一般采用JavaScript
在浏览器环境中发出URL请求, Objective-C 截获请 求以获取相关请求的思路.
在Objective-C 中在实现UIWebViewDelegate 时截获请求


我们来看demo的效果

必发娱乐官方网站 2

2.png


JS 调用 Native 方法 :在网页里面的输入框里面输入文本,然后作为参数传递到
Native,Native接受参数后在界面进行展示。

必发娱乐官方网站 3

3.png


Native 调用 JS 的方法
:在Native里面也有2个输入框接收用户输入,将输入作为参数传递给JS之后,JS控制在网页里面显示。

必发娱乐官方网站 4

4.png


我们首先来看看大家比较关心的HTML是怎么写的

必发娱乐官方网站 5

5.png


JS实现如下

必发娱乐官方网站 6

6.png

JS调用Native,就是在这里和iOS还有安卓约定好一个jsObj对象,
这个jsObj对象是移动端提供的,大家在HTML代码里是没有看到的。
其实移动端在加载HTML的时候,会在上下文中注入这个对象到咱们JS中。咱们就可以直接调用这个对象的方法
这个对象提供了一个HtmlcallJava方法,并接受2个参数,JS用
window.jsObj.HtmlcallJava(username, password);调用就行。类似的还需要其他方法,跟移动端约定好后往jsObj对象里面添加就行,然后可以直接调用了


提供给Native调用的方法就简单了,按照约定好方法名和参数,接受参数后实现我们的业务就行


还是相对比较简单,但在我们的业务里面是远远不够的,往往参数很多,传参的时候可能要序列化成json格式,有必要的时候还要加密,还有和移动端交互的方法很多,还要便于管理。当然在这里我们只是给大家提供一个思路,原理和实现,在我们实际开发中会有一套严格的规范,在后续的直播课或者咱们兄弟连的全栈班里面会陆续给大家讲解

HTML是可以放在服务器里面,提供URL给客户端调用,在这里我们为了方便调用放在客户端本地

必发娱乐官方网站 7

7.png

很简单,没有做大的布置。界面里面嵌套了一个web组件,下面是iOS放置的一些控件提供输入还有提交

必发娱乐官方网站 8

8.png

必发娱乐官方网站 9

9.png

先来说说JS调用iOS:在HTML加载完毕时注入
JS对象jsObj,当JS调用相应方法时候由注入的jsObj对象对应的方法发送一个URL,这个URL带上了该方法名,还有参数

必发娱乐官方网站 10

10.png

当JS调用的时候,也即URL触发的时候,会在web组件的代理即回调里面相应。截取该URL,然后根据截取URL后的信息,解析出来方法名,还有参数

必发娱乐官方网站 11

11.png

这个时候就会调用iOS已经写好的提供的方法了,例子的方法接收参数,给加界面上的组件赋值就可以展示
iOS调用JS就比较简单了,用web组件提供的方法
- (NSString *)stringByEvaluatingJavaScriptFromString:(NSString *)script
执行JS代码就行了

必发娱乐官方网站 12

12.png

以上就是ios和js的应用

我们先来看一下现在的互联网项目需要哪些部分组成,比如淘宝,天猫,京东,
微博,等等.我们会发现现阶段一个互联网项目它同时具有网页端,app甚至还有一个微信入口,在过去我们的程序员选择工作的时候,可以选择做网页开发,做网站又或者选择学习安卓然后做app开发.

       
先说下自己吧,我现在大四,做过腾讯实习生,现在准备到阿里巴巴接受洗脑了。

我们现在来看一些实际的例子,在微信群看文字分享的朋友可以看一下我们发送的截图,这些项目都是使用NativeBridge技术来实现的,我们说的FaceBook的框架ReactNative以及著名的混合App框架PhoneGap等也是使用的类似NativeBridge原理.

       
网上随意百度一下,关于PHP和Java语言孰优孰劣的文章比比皆是,有时候看着这些文章,感觉真心的无聊啊,就像大家在争吵eclipse和netbeans谁谁更好用一样,没什么意义,其实,语言,在我看来,只是一个工具而已,而且精于一门语言之后,另外语言的学习也蛮easy的。

必发娱乐官方网站 13

       
我大一才开始接触编程,按照学校的路子C,C++,Java,汇编都学过。我记得是大一寒假的时候,我高中一个很要好的哥们想创业,他的第一想法就是做一个网站,他找到我,然后,我们就一起开始做网站进行所谓的“创业”了。

Paste_Image.png

       
下学期一到学校,我就开始疯狂google资料,看到网上有很多开源的网站项目,我也下了很多的源码,可惜,当时能力太有限了,自己不会配置服务器这些,所以后面用dreamweaver做了一个全HTML的网站,后面为了实现登陆,注册这些功能,我到图书馆找了一些书,当时asp,jsp,php的书籍都蛮多的,百度了一下,他们说PHP比较容易上手,所以我就开始学PHP。

京东的活动页面,点击进去,是一个app的详情页,是用原生的来写的

     
PHP的确是容易上手,在Windows上面下载一个wamp
server,用记事本建立一个文件,再按照书上的代码敲一遍,再打开浏览器,就可以看到结果了。

在微信火起来以后,外面就出现了很多微信公众平台开发的岗位,然而现在企业需求的并不是我有一个企业官网,然后再做一个app,而是一个完备的系统.它的数据业务应该是一个整体它的入口有很多,如网页,app,微信,微博等,都可以是整个平台的流量入口,而整个产品也可以通过各个不同的端口来为用户提供服务

   
 通过不断的做一些垃圾项目(所谓垃圾项目,就是学校里面做的那种自己都不会用的项目),到大二上学期结束也算有点小成了,那个时候就感觉到学习PHP的劲头不那么足了,感觉到自己提升的空间比较小,成长比较慢了,幸亏当时我自己还在看PHP100的视频教程,在第100讲的视频中,张恩明老师也谈到了这个问题,学习的路线是:自己感觉什么都不会-》自己感觉什么都会-》自己感觉什么都不会,他在视频中鼓励我们去找点项目来做,锻炼一下自己的能力,所以大二下学期就开始在学校外面接一些小公司的项目来做,自己感觉基本上也就是CMS这种。

这们的设计整个技术栈层级很深,通常企业要维系这样的一个项目运营,需要有Liunx运维人员,然后需要有数据库管理员,需要Web后端开发人员如PHP,Java

     
大二下的时候,自己运气也比较好,刚好当时我们辅导员的同学刚创业,他们公司需要几个廉价的码农,我就去了,虽然去的时间只有短短两个月,但是那次真的让我收获了很多,不仅仅是开始接触PHP的Framework,了解还有版本控制,项目必须要按照规范走,更重要的是了解了团队合作。

若是做网页端则需要H5前端工程师,做App的话需要分别有IOS,Android两套

     
 从那儿回来之后,紧接着就接到一个项目,管理他们公司店铺,账单,员工等信息的一个系统,这个项目对我的意义比较重大。因为功能比较复杂,我准备建一个团队,团队规模不大,3个人,一个是当时和我一起当廉价码农的同学,他负责部分后端逻辑的处理,另外找了一个女同学做美工,由于工期特别有限,所以我们三个人在经过一天的讨论分出了模块,设计好数据库之后就开始编码了,由于美工的进度要稍慢于我们另外两个,所以界面我们做的比较慢
,我们测模块的时候都先测功能,后看界面。当主要功能完成之后,我感觉到自己学到的东西真的蛮多,当然也挺累的。

若是在加上WinPhone以及其它那些市场占有率不太高的平台,则开发人员的数量会变得更多

     
 客户看到我们做出来的东西之后,很不满意,为什么,因为界面太丑了,后面我们就得出经验了,不管你后端处理的再好,客户不关心,他关心的只是他看得到的,他只会用它的方式来判定我们这个系统的好坏。

这样导致的直接后果就是项目开发运营成本高,开发周期长,团队管理难度大.人才储备困难,到项目稳定运营后各岗位工作饱和度并不高.却要维系一个庞大的团队来运营一个项目,如果从考虑项目稳定性出发,所有的岗位都需要冗余,这样算下来,有那么多移动互联网项目跨掉就不奇怪了

       
再界面进行了大幅度改动之后,客户终于对界面看的过去了,当看到功能的时候,他突发奇想,又要添加一些额外功能,而这些额外功能和我们当时的设计完全冲突,导致后面大幅度代码不断修改,后面当这个项目最终完工的时候,我们都已经累得趴下了。

基于上述原因催生了全栈工程师这样一类技术人员的火爆,我们常常在招聘网站上看到这样的岗位,招聘移动互联网项目开发的php程序员,招聘混合app开发的H5程序员,招聘微信开发的Java程序员等诸如此类的岗位.其实这些岗位都是全栈工程师能轻松拿下的岗位

     
 之后再接项目的时候,我们就很注重代码的分层了,基本上都是采用MVC这种方式,保证即使客户需求变更也不会导致大幅度代码的修改。

可是在过去的几年中,全栈工程师的发展却没有那么快.根本原因在于一个人要同时掌握那么多技能并灵活运用,不是一件容易的事情.好在大公司给我们指明了方向国内以腾讯,阿里为首;而国外最大的网络社区facebook,它们都采用了同一种方式来解决这一问题

     
 通过大二下和大三上的一年在外面接项目的时间,我前后端都会了,后端逻辑采用PHP,前端展现采用smarty+css+js,在做了一年这种简单的网站之后,突然感觉这些没什么意思了,我可以做,其他人也可以做出来,的确,做网站难度是比较小的,所以我开始往深层次去挖掘。

我们知道做为单一程序员精通的技能越多越好,然而做为企业解决方案应该尽可能的减少不同种类的技术引用,因为每多引入一种技术,就要配备相应技能的人员,尤其是引入了使用面不那么广的技术,可能导致招聘都困难

       大三寒假,开始我准备是去学习一下zend framework
和thinkphp,因为这两个都是我觉得很不错的PHP的框架,但是学了两天之后,我突然想,别人都可以写得出来框架,为什么我不写一个呢?

同时精通PHP,Java,JS,OC,Linux以及Mysql这样的程序员肯定不多见.如果有这样的程序员也就大概三五个,便能将传统开发模式下几十人运营和维护的项目拿下来.可这种程序员却实是太少了,即便是像京东,百度这样的公司里面传统意义上的全栈工程师数量也不多.我们来看看这些大公司是如何解决这些问题的.市场上最多的就是Web程序员,徜若我们给Web开发程序员增加一些额外的技能,能不能让他们完成全栈工程师完成的工作呢?

       
 说干就干,我就开始疯狂读thinkphp的源码,开始的时候真心的很痛苦,因为没有写框架的基础,所以碰到了很多问题,但是后面不断不断的,我也写出了一个可以使用的框架Toper,寓意走向顶端的人,这个框架从哪个寒假到现在已经走向了v0.5,为什么我称为v0.5,因为我觉得这和成熟的框架比差距还很多,我仍然需要不断学习。

当然可以了,答案就是我们今天要给大家介绍的Native
Bridge技术.普通Web程序员通常会掌握一门后端开发语言以及前端Web开发语言JS,比如你之前学的是JavaEE那么你肯定会Java语言和JS语言,如果你学的是PHP,那么你精通的是PHP语言和JS语言.如果你专门去学H5在涉及到Ajax与服务器通信的时候,你也需要同PHP或者是Java等后端语言进行交互

         
开始的时候,Toper里面各种乱七八糟的功能都有,但是当我使用toper为学校写了一个网站zzb.scu.edu.cn的时候,我突然感觉到很多功能都没什么用,所以后面重构的时候就把Toper变成了core+extend这种方式,并且核心里面只实现mvc的构架,用户使用的时候可以最小化到只包含core的内容,当用户需要extend的内容的时候,只需要把extend的文件拷贝进来即可,extend的类之间完全独立,core里面db实现了简单的ORM,view实现了taglib等等。

我们知道全球有82%的网站是用PHP做的,PHP程序员都会PHP和JS,如果我们仅使用两种编程语言甚至是一种编程语言,就能完成一个拥有网页端,微信端,app端的多端应用.那么我们将能培养大量的全栈工程师,这批全栈工程师可以胜任移动互联网领域所有的开发岗位

         
在编写Toper的时候,我突然就感觉到自己的PHP真心弱爆了,沉下心来,开始使用SVN做版本控制,将开发平台从windows转向了fedora,使用phpdocumentor开始编写文档,使用xdebug调试代码,使用phpunit做单元,使用phing做自动化部署,也开始了解PHP的反射,SPL,设计模式,apc缓存,memcached缓存,nosql等等。

现在市面上流行的混合app框架有很多,这些构架大部分都是国外的.比如
FaceBook开源的ReactNative就是其中的佼佼者,在加上单页App技术成熟与普及使得仅使用PHP加JS就可以完成整个项目开发

         
 之后我开始认真学习JavaEE,C++等等,我学这些语言不是准备拿它来做开发,而是我知道PHP有很多它自己的弱点,我可以把其他语言的优点吸收过来,转而将Toper做的更好,比如我就把Java的过滤器拿过来用在了Toper中,同样,由于前后端天然的不可分离,我开始编写Toper的JS代码,当然,这个才开始。

那么是不是我们只学习类似ReactNative构架就可以做全栈工程师了呢?问题没那么简单,如果你在国外或许还真行,可是在国内我们要想精通混合App开发模式,我们需要了解混合App实现原理也就是NativeBridge技术,因为国外的框架是不会集成支付宝和微信的,而国外集成的很多好用的组件也因为国内网络的特殊性导致我们部分组件无法正常使用

         
 如果大家对Toper有兴趣,可以通过这个去看看:

要能灵活地使用NativeBridge完成自己的项目开发,我们除了必要的编程语言技能外,还需要对移动互联网的整个生态与行业特点,比如说在国内我们很多的项目会接入微信公众平台,并且微信也有提供相应的JSSDK让我们的网页拥有调用扫码,语音识别的能力.那么我们开发的平台要想让我们的程序做到一次开发多端兼容,那么我们除了兼容IOS,Android以外还应把微信,支付宝,微博这样的行业巨头考虑进去

         
 之后,我成为腾讯实习生,被分到北京的OMG,负责腾讯微博开发,虽然只在腾讯呆了短短两个月就回来找工作了,但是在这段时间我真的成长特别大。

PHP接口,这种封装技术叫做NativeBridge
那么我们下面在来看一下Android和IOS分别是如何实现NativeBridge的.以下的演示是为了方便大家看懂原理,所以对代码进行了大量的简化,与兄弟会在商业项目中正在大量使用的封装存在较大差距.如果是把商业级代码直接摆出来不利于大家理解,也违反公司规定

           
在微博的这段时间,我开始疯狂利用内部资源,比如KM平台,看关于系统构架的分享,比如怎么构架1亿PV的网站,要构架这样的网站,可能涉及到这样几点:lvs,数据库的分区分表,多域名,反向代理来缓存静态资源,数据容灾,防攻击等。

Objective-C怎么访问JavaScript呢?

         
 由于实习生比较闲,也就顺便看了看PHP的源码,了解了一下PHP的垃圾回收机制,PHP怎么实现动态类型等等。

在我们iOS应用里面会嵌套一个叫UIWebView的类似浏览器的组件,可以展示HTML

           从腾讯回来之后,由于忙着找工作,所以PHP的学习暂时中止了。

UIWebView对象有一个方法

         
 学到现在,我真的觉得我对PHP一无所知,很多东西我都不会,所以,我觉得与其争论语言的好与坏,倒不如踏踏实实把一门语言学好一点,当你一门语言学好之后,其他语言也许并不是那么难以入手。

  • (NSString *)stringByEvaluatingJavaScriptFromString:(NSString
    *)script
    该方法能够执行一段JavaScript字符串, 并返回字符串类型的返回值
    在iOS里面,JavaScript
    是不能直接调用Objective-C的,在ios7以前我们会用拦截协议的形式实现。这个适合一些比较简单的情况,不需要引入框架,只需要web前端配合就可以

         
 在这儿,我想给大家出一道题,这道题是我阿里巴巴二面的面试题,看看大家怎么解决:

拦截协议。其实就是URL请求截获。在UIWebView的浏览器的JavaScript中,
没有相关的接口可以调用Objective-C的相 关方法. 一般采用JavaScript
在浏览器环境中发出URL请求, Objective-C 截获请 求以获取相关请求的思路.
在Objective-C 中在实现UIWebViewDelegate 时截获请求
我们来看demo的效果

         
 在微博中,关系链是很重要的,我们可以通过一个QQ号找到他的好友,然后通过好友再找到好友的好友……,那么如果你们在负责腾讯微博,你会怎么通过一个uin(QQ号)找到整个关系链的信息呢?

必发娱乐官方网站 14

           注:腾讯微博使用的数据库是mysql的集群,微博用户的数据是亿级的

Paste_Image.png

         
 虽然我认为语言只是一个工具,但对我个人来说,我还是喜欢PHP和JS,因为它们都非常的灵活。

JS 调用 Native 方法 :在网页里面的输入框里面输入文本,然后作为参数传递到
Native,Native接受参数后在界面进行展示。

           我还想说一下,PHP
并不是只能做小型的应用,大型应用也是可以的,其实当一个应用大了之后,语言层面的东西我感觉都不值一提,只要你你构架做的足够好,就像facebook的XXX说的:Languages’s
don’t Scale, Architecture Scale。

必发娱乐官方网站 15

           
 PS一下:腾讯朋友网后端数据处理就是用PHP做的,当然,是用c写的PHP的扩展。

Paste_Image.png

             
在这儿,我推荐一本书,我觉得这本书我看了启发很大:《高可用mysql》

Native 调用 JS 的方法
:在Native里面也有2个输入框接收用户输入,将输入作为参数传递给JS之后,JS控制在网页里面显示。

             
 我再推荐一个人,PHP中国顶级牛人,他貌似现在从百度跳槽到新浪微博了,他的博客是:

必发娱乐官方网站 16

转自 

Paste_Image.png


我们首先来看看大家比较关心的HTML是怎么写的

必发娱乐官方网站 17

Paste_Image.png

JS实现如下

必发娱乐官方网站 18

Paste_Image.png

JS调用Native,就是在这里和iOS还有安卓约定好一个jsObj对象,
这个jsObj对象是移动端提供的,大家在HTML代码里是没有看到的。

其实移动端在加载HTML的时候,会在上下文中注入这个对象到咱们JS中。咱们就可以直接调用这个对象的方法

这个对象提供了一个HtmlcallJava方法,并接受2个参数,JS用
window.jsObj.HtmlcallJava(username,
password);调用就行。类似的还需要其他方法,跟移动端约定好后往jsObj对象里面添加就行,然后可以直接调用了

提供给Native调用的方法就简单了,按照约定好方法名和参数,接受参数后实现我们的业务就行

还是相对比较简单,但在我们的业务里面是远远不够的,往往参数很多,传参的时候可能要序列化成json格式,有必要的时候还要加密,还有和移动端交互的方法很多,还要便于管理。当然在这里我们只是给大家提供一个思路,原理和实现,在我们实际开发中会有一套严格的规范,在后续的直播课或者咱们兄弟连的全栈班里面会陆续给大家讲解
陈玉龙:
HTML是可以放在服务器里面,提供URL给客户端调用,在这里我们为了方便调用放在客户端本地

必发娱乐官方网站 19

Paste_Image.png

很简单,没有做大的布置。界面里面嵌套了一个web组件,下面是iOS放置的一些控件提供输入还有提交

必发娱乐官方网站 20

Paste_Image.png

必发娱乐官方网站 21

Paste_Image.png

先来说说JS调用iOS:在HTML加载完毕时注入
JS对象jsObj,当JS调用相应方法时候由注入的jsObj对象对应的方法发送一个URL,这个URL带上了该方法名,还有参数

必发娱乐官方网站 22

Paste_Image.png

当JS调用的时候,也即URL触发的时候,会在web组件的代理即回调里面相应。截取该URL,然后根据截取URL后的信息,解析出来方法名,还有参数

必发娱乐官方网站 23

Paste_Image.png

这个时候就会调用iOS已经写好的提供的方法了,例子的方法接收参数,给加界面上的组件赋值就可以展示

iOS调用JS就比较简单了,用web组件提供的方法

  • (NSString )stringByEvaluatingJavaScriptFromString:(NSString )script

执行JS代码就行了

必发娱乐官方网站 24

Paste_Image.png

Author

发表评论

电子邮件地址不会被公开。 必填项已用*标注