最近公司有使用APICloud发开的需求,需要我这边提供一些模块包得封装。因为没有也是刚接触APICloud,所以也就在看官方文档 。下面讲一讲我再使用过程中得一点点东西。

首先,下载官方SDK,下载最新版本的模块开发SDK,找到里面的ModulesDevProject_iOS.zip,这里面包含ModuleDemo、ModulesDevProject和说明文件。ModuleDemo是一个官方的模块包封装和静态库生成的工程。ModulesDevProject则是可以让我们自己调试的工程。

模块类实现

2.1. 新建模块类

新建一个UZModuleDemo类,继承于UZModule类,其中UZModule类为模块的基类。模块开发过程中文件命名时提倡加前缀,以避免和其它模块冲突。

2.2. 模块生命周期

当前端js中调用模块方法时,模块首先会被初始化,引擎会调用其 - (id)initWithUZWebView:(UZWebView *)webView 方法;

当模块所在的页面被销毁时,引擎会调用其 - (void)dispose 方法。

2.3. 启动方法

如果模块需要在应用启动的时候就执行一些操作,那么首先得在module.json里面配置launchClassMethod,例如配置的方法为launch,然后在模块里面实现该方法,当应用启动时该方法就会被执行。

  1. + (void)launch{
  2. //在module.json里面配置的launchClassMethod,必须为类方法,引擎会在应用启动时调用配置的方法,模块可以在其中做一些初始化操作;下面代码为注册一个实现了UIApplicationDelegate协议方法的对象,该对象中方法就会在需要的时候被调用,通过此方式可以实现第三方应用回调url解析、推送等常用功能
  3. //UZApphandler 基础Object基类 可以做一些需要AppDelegate 实现的初始化 如初始化推送的AppKey等等
  4. // UZAppHandler *appHandler = [[UZAppHandler alloc] init];
  5. // [theApp addAppHandle:appHandler];
  6. }

2.4. 方法调用

实现 - (void)showAlert:(NSDictionary *)paramDict 方法,用于显示一个对话框,该方法需要在module.json里面配置,然后在前端js里面才可以调用该方法。

如果前端调用该方法时传入了一个function,那么在这里可以通过cbId字段获取该function对应的id,然后在需要的时候把数据通过该function回调给js。

  1. - (void)showAlert:(NSDictionary *)paramDict {
  2. _cbId = [paramDict integerValueForKey:@"cbId" defaultValue:-1];
  3. NSString *message = [paramDict stringValueForKey:@"msg" defaultValue:nil];
  4. UIAlertView *alert = [[UIAlertView alloc] initWithTitle:nil message:message delegate:self cancelButtonTitle:@"取消" otherButtonTitles:@"确定", nil nil];
  5. [alert show];
  6. }

2.5. 回调

我们在这里实现UIAlertViewDelegate中的 - (void)alertView:(UIAlertView *)alertView didDismissWithButtonIndex:(NSInteger)buttonIndex 方法,将用户点击的按钮index回调给js端,代码如下:

  1. - (void)alertView:(UIAlertView *)alertView didDismissWithButtonIndex:(NSInteger)buttonIndex {
  2. if (_cbId >= 0) {
  3. NSDictionary *ret = @{@"index":@(buttonIndex)};
  4. [self sendResultEventWithCallbackId:_cbId dataDict:ret errDict:nil doDelete:YES];
  5. }
  6. }

当然,也可以定义自己的方法method,同时要修改module.json的配置 注意不要[+]以及引号的英 汉。

  1. {
  2. "name":"moduleDemo",//模块包名一致
  3. "class":"UZModuleDemo",//模块类名
  4. "methods":["showAlert","method"],//自己定义的方法名
  5. "launchClassMethod":"launch"//是否执行launc类方法
  6. }

找到widget目录下html目录里面的module-con.html,我们在这里面调用showAlert等方法,如下

  1. var param = {
  2. msg:"Hello App!"
  3. };
  4. var demo = api.require('moduleDemo');//模块包名称 (module.json 这里 模块包名称 三者要一致)
  5. demo.showAlert(param, callBack);//传参数调用方法 和回调
  6. function callBack(ret, err){
  7. var msg;
  8. if (ret.index == 0){
  9. msg = "点击了第一个按钮";
  10. } else {
  11. msg = "点击了第二个按钮";
  12. }
  13. api.toast({
  14. msg:msg
  15. });
  16. }

调试好了之后,把添加 修改的文件 加入ModuleDemo的静态库工程(也可以自己创建),去掉没用的,选择iOS device编译,复制静态库文件。 创建文件夹名称和模块包一致,里面在创建target文件夹,把静态库文件粘贴进来,加入用到了第三方的Framework和bundle束也放进来。 target同级目录粘贴module.json文件,返回压缩成zip文件. 获取在apicloud创建的应用的Id 修改widget下config.xml 顶部的id,复制压缩widget文件。在apicloud控制台,转到该应用,选择代码部分,上传widget.zip 跳转模块中自定义模块上传模块包,名称必须和模块包名称一致。保存 编译,如果没有意外,你就能扫二维码 下载安装你的应用到手机了。 这里默认的时apicloud提供的证书,加入要改自己的就看证书栏目,都有教程的。Mark!

【转】学习apicloud和IOS之间的模块化使用的更多相关文章

  1. Docker学习笔记 - Docker容器之间的连接

    学习目标: 容器之间可以相互连接访问:: --link redis:redisAlias 准备工作 FROM ubuntu:14.04 RUN apt-get install -y ping RUN  ...

  2. 【学习总结】iOS中NSNotification、delegate、KVO三者之间的区别与联系?

    在开发ios应用的时候,我们会经常遇到一个常见的问题:在不过分耦合的前提下,controllers间怎么进行通信.在IOS应用不断的出现三种模式来实现这种通信: 1.委托delegation: 2.通 ...

  3. iOS学习笔记(四)——iOS应用程序生命周期

    开发应用程序都要了解其生命周期,开始接触android时也是从应用程序生命周期开始的,android的应用程序生命周期更多是其组件的生命周期,例如Activity.Service.今天我们接触一下iO ...

  4. 李洪强iOS学习交流群-iOS大神群

    iOS学习大神群-群号:483959373

  5. (ios开发学习笔记一)ios项目文件结构

    转自:http://www.cnblogs.com/macroxu-1982/archive/2012/07/31/2616389.html 下面是单个窗体项目例子,我们从这个项目开始,说明ios项目 ...

  6. 如何学习一门新技术-iOS开发

    如何快速学习一门新技术 以CoreBluetooth 蓝牙开发为例.我们可以从官方获得的资源有:SampleCode, Documentation,API Reference. 先从Documenta ...

  7. CCNA学习笔记(1) IOS操作系统 路由器 交换机 启动 自检 以及部分命令

    注意:以下内容是以思科为学习环境 IOS操作系统启动: 路由和交换机和个人电脑启动没有区别,都会发送新号表示启动状态,也会进入系统自检.只得注意的是:1.一长两短的响声是显卡报警. 2.一声长鸣是内存 ...

  8. MyBatis学习(二)---数据表之间关联

    想要了解MyBatis基础的朋友可以通过传送门: MyBatis学习(一)---配置文件,Mapper接口和动态SQL http://www.cnblogs.com/ghq120/p/8322302. ...

  9. 学习笔记:iOS 视图控制器(UIViewController)剖析

    转自:http://www.cnblogs.com/martin1009/archive/2012/06/01/2531136.html 视图控制器在iOS编程中占据非常重要的位置,因此我们一定要掌握 ...

随机推荐

  1. Thinkphp5+plupload图片上传功能,支持实时预览图片。

    今天和大家分享一个国外的图片上传插件,这个插件支持分片上传大文件.其中著名的七牛云平台的jssdk就使用了puupload插件,可见这个插件还是相当牛叉的. 这个插件不仅仅支持图片上传,还支持大多数文 ...

  2. 微信公众号授权登录,提示“redirect_uri 参数错误”

    做微信公众号开发授权登录的时候遇到的坑... 后台服务用node,index.js相关代码如下: const oauth = new OAuth(conf.appid, conf.appsecret) ...

  3. 3d全景图

    http://www.cv-foundation.org/openaccess/content_cvpr_2016/papers/Aggarwal_Panoramic_Stereo_Videos_CV ...

  4. MySQL学习基础之一 — 数据库查询

    廖大神的练手神器:在线SQL: https://www.liaoxuefeng.com/wiki/1177760294764384/1179611432985088 运行MySQL等实际的数据库软件, ...

  5. 关于APICloud使用心得(原创)

    从最开始接触APICloud到现在已经有一段时间了.现在想说说自己对于APICloud开发移动端的想法,既有利又有弊. 以下都是我个人的观点. 先说优点吧: 1.APICloud平台文档.视频较多,很 ...

  6. C 语言实例 - 阶乘

    C 语言实例 - 阶乘 一个正整数的阶乘(英语:factorial)是所有小于及等于该数的正整数的积,并且0的阶乘为1.自然数n的阶乘写作n!. n!=×××...×n.阶乘亦可以递归方式定义:!=, ...

  7. maven 参考

    系列文章,通俗易懂,可以看看 http://www.cnblogs.com/AlanLee/category/918828.html

  8. python——函数重点总结

    参数的分类 形参:位置参数.默认参数.*args.命名关键字参数.**kwargs 实参:位置参数.关键字参数 命名关键字参数:定义在*后面的位置参数和默认参数叫作命名关键字参数:用来限制实参必须以关 ...

  9. BZOJ-3555:企鹅QQ(字符串哈希)

    PenguinQQ是中国最大.最具影响力的SNS(Social Networking Services)网站,以实名制为基础,为用户提供日志.群.即时通讯.相册.集市等丰富强大的互联网功能体验,满足用 ...

  10. jQuery基础(1)

    一.jQuery的介绍 1.为什么要使用jQuery? 在用js写代码时,会遇到一些问题,如下: 1)window.onload 事件有事件覆盖的问题,因此只能写一个事件: 2)代码容错性差: 3)浏 ...