使用OC开发phonegp 组件

 

使用OC开发phonegp 组件

 

 

1. 使用oc 对phonegp中的组件近些开发,首先具体的pgonegp跟nativecode之间的一些优劣就不说了,开发phonegp 

 

对应的组件主要就是使用nativecode开发一些具有某些功能的组件,然后这些类交付给js使用就可以了,说简单些就是使用OC开发一些类然后交付使用,这中间涉及一个最主要的问题就是,js如何实现与nativecode代码之间的通信问题,解决了这个麻烦一切问题迎刃而解,首先Cordova为我们提供了一个最核心的组件,依靠这个phonegp中精华的部分可以为我们提供很多方便。

 

2. 废话少说,直接切入正题,我们先解决一个问题,使用OC 开发一个组件,然后交付js

调用,一个最直接的例子

     (1). 首先我们创建一个OC 的类HelloPlugin  继承与 CDVPlugin1

 

  • (void)nativeFunction:(NSMutableArray*)arguments;  函数定义 

 

- (void)nativeFunction:(NSMutableArray*)arguments{

    NSLog(@"hello nativecode...");

}

 

这里面我们只需要定一个一个类就可以了,他只会打印一句nativecode的一句字符串

 

 

2.接下来我们实现我们的js代码模块,js   和nativecode都写好之后然后让他们相互调用

 

js代码:

 

首先创建一个js文件,HelloPlugin.js

定义一个js类,然后在接下来的时间里我们会使用这个类

 

var HelloPlugin = {

    callNativeFunction: function (success, fail, resultType)

    {

        return Cordova.exec( success, fail, "helloPlugin", "nativeFunction", []);

    }

};

 

这个类有一个函数,三个参数,我们回调用这个对象里面的函数接下来

 

 

  1. 接下来是正题,在index.html里面,这一块是前段的代码,引入js文件,这个不多说了

<script type="text/javascript"charset="utf-8"src="HelloPlugin.js"></script>

 

但是此处会有一个问题,刚第一次接触这个地方的时间发现js文件引用了可就是不成功,后来发现了问题(在Cordova工程的www目录下,这个目录的结构跟iOS自身工程目录结构不同,这个地方的目录 以及文件引用跟java C#中类似,你创建了文件只用放在硬盘上www目录下就行,在xcode里面直接在子目录下创建会有些问题,前提是HelloPlugin.js index.html一定都在www目录下同一文件夹目录下)这个问题搞定,接下来继续入题:

 

 

 

 

 

首先定一个一个块

 <div id="deviceready"class="blink">

         <p class="event listening">Connecting to Device43434343</p>

         <p class="event received">Device is Ready</p>

 </div>

 

 

接下来注册一个事件

 

 <script type="text/javascript">

         document.addEventListener("deviceready", onDeviceReady, false);

          

          document.addEventListener("btn", clickBtn, false);

          function onDeviceReady() {

              /**

               * 加载成功调用js

               */

              //MyPlugin.add("My","Plugin",addSuc,addFiald);

              MyPlugin.nativeFunction(

                                      ["HelloWorld"],

                                      function(result) {

                                      alert("Success: \r\n"+result);

                                      },

                                      function(error) {

                                      alert("Error: \r\n"+error);

                                      }

                                      );

          }

    </script>

 

这样js 通过网页事件调到对应的方法,这个事件解释下:

 

 

 

首先网页事件触发这个不说了,我们在网页里面通过js 触发事件调用到HelloPlugin.js

总的 MyPlugin.nativeFunction函数,参数一致都有,这个没问题,

 

接下来看这个函数里面到底写了什么

Cordova.exec( success, fail, "helloPlugin", "nativeFunction", []);

 

前两个参数分别是失败 成功走的函数,

这个类似与block, 接下俩一个是注册插件名字,以及插件里面的函数名, 最后一个是参数,

解释下,我们写的插件是用OC写的,叫HelloPlugin, 

 

我们在应用程序 config.xml里面配置了,  第一个name只是我们给插件定义的可以在js里面用的名字,第二个 ios-package: HelloPlugin,这个是对应的,我们把写好的OC类配置了一个插件名,可以理解为一个映射,在 js 中我们就用这个叫 helloPlugin的来对应我们用OC写的插件。

 

 <feature name="helloPlugin">

        <param name="ios-package"value="HelloPlugin" />

    </feature>

 

接下来: Cordova.exec( success, fail, "helloPlugin", "nativeFunction", []);

这个就是Cordova给我门提供的函数,字面意思执行函数,参数植入,有类名,函数名,具体什么类调用什么函数,OK,这样基本已经连接好了,直接Run,OK。。。

 

 

整体来讲,Cordova插件开发主要就是一个解决nativecode和js之间通信问题的,主要是两种语言之间互调,通信数据传输,H5可以更好的优化对应的界面,适应更多的平台,nativecode则更多的做一些局限于平台自身的一些问题的处理,这一点也是不可能逾越的。

posted @ 2014-04-17 18:43  ccguo  阅读(413)  评论(0编辑  收藏  举报
我要啦网店统计