博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【转】学习apicloud和IOS之间的模块化使用
阅读量:5950 次
发布时间:2019-06-19

本文共 2862 字,大约阅读时间需要 9 分钟。

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

  首先,下载官方,下载最新版本的模块开发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,然后在模块里面实现该方法,当应用启动时该方法就会被执行。

 

[objc] 
 
  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.   
  7. }  

 

2.4. 方法调用

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

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

 

[objc] 
 
  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端,代码如下:

[objc] 
 
  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的配置 注意不要[+]以及引号的英 汉。

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

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

 

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

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

转载地址:http://ynsxx.baihongyu.com/

你可能感兴趣的文章
[转]html5 Canvas画图教程(7)—canvas里画曲线之quadraticCurveTo方法
查看>>
[水]三个数学的小技巧题
查看>>
[leetcode-342-Power of Four]
查看>>
MongoDB3.0 创建用户
查看>>
2017-2018-1 20155319 《信息安全系统设计基础》第3周学习总结
查看>>
express 3.0.x 中默认不支持flash() 的解决方法
查看>>
uva-111-dp
查看>>
算法学习1——矩阵转置
查看>>
Tcl与Design Compiler (九)——综合后的形式验证
查看>>
跨页数据传递
查看>>
Linux查看系统负载(CPU和MEM考虑)
查看>>
Codeforces Round #249 (Div. 2) B. Pasha Maximizes
查看>>
【Android游戏开发十一】手把手让你爱上Android sdk自带“9妹”(9patch 工具),让Android游戏开发更方便!...
查看>>
【查找算法】基于存储的查找算法(哈希查找)
查看>>
JavaWeb网上图书商城完整项目--day02-10.提交注册表单功能之页面实现
查看>>
记录一下这次web实训的两个网站
查看>>
POJ-1830 开关问题 高斯消元
查看>>
HDU-4366 Successor 线段树+预处理
查看>>
做程序开发的你如果经常用Redis,这些问题肯定会遇到
查看>>
CAS-认证流程
查看>>