apicloud模块开发提供了js与底层交互的接口,官方的sdk用于方便开发模块,总结一下与js交互常用的方法
读取接口参数
引入NSDirectionaryUtil.h
头文件
- (void)printLog:(NSDirectionary *) paramsDict_ {
NSString *imagePath = [paramsDirect_ stringValueForKey:@"image" defaultValue:(NSString *)];
NSLog(@"params %@", imagePath);
}
文件读取
NSString *imageRealPath = [self getPathWithUZSchemaURL:imagePath];
NSLog(@"imageRealPath: %@", imagePath);
获取图片显示在当前页面
UIImage *image = [UIImage imageWithContentsOfFile:imageRealPath];
UIImage *imageview = [[UIImageView alloc]initWithImage:image];
imageview.frame = CGRectMake(0,0,320,300);
[self addSubview:imageview fixedOn:nil fixed:YES];
模块默认图片
在模块下面新建res_moduleDemo文件夹,获取res_moduleDemo文件下面图片路径
// res_moduleDemo/test.png
NSString *defaultImgPath = [[NSBundle mainBundle]pathForResource:@"res_moduleDemo/test", ofType:@"png"];
js回调原生实现
// UZModuleDemo.m
@interface UZModuleDemo () {
NSInteger canBackCbid;
int count;
}
@end
// 初始化操作
- (id)initWithUZWebView:(id)webView {
self = [super initWithUZWebView:webView];
if (self != nil) {
canBackCbid = -1;
}
return self;
}
// js接口
-(void)canBack:(NSDirectionary *)paramsDict_ {
canBackCbid = [paramsDict_ integerValueForKey:@"cbId" defaultValue:-1];
// 定时器
[NSTimer scheduleTimerWithTimerInterval:1 target:self selector:@selector(continuouCallback) userInfo:nil repeats:YES];
}
// 定义回调函数
-(void)continuouCallback {
if (canBackCbid >= 0) {
NSMutableDictionary *sendDict = [NSMutableDictionary dictionary];
NSString *msgStr = [NSString stringWithFormat:@"计数: %d", count];
count ++;
// 设置对象 { msg: msgStr }
[sendDict setObject:msgStr forKey:@"msg"];
[self sendResultEventWithCallbackId:canBackCbid dataDict:sendDict errDict:nil doDelete:NO];
}
}
js调用方法
var moduleDemo = api.require("moduleDemo");
moduleDemo.canBack(function(ret, err) {
alert(ret.msg);
})
模块生命周期
// 模块第一次调用,调用初始化函数
- (id)initWithUZWebView:(id)webView;
// 页面关闭,释放函数
- (void)dispose;
原生向前端发数据
两种实现方法,一种是直接声明函数,一种是监听
function nativeMessage(ret) {
alert(JSON.stringify(ret));
}
api.addEventListener({
name: "nativeEvent"
}, function(ret, err) {
alert(JSON.stringify(ret));
})
原生代码向前端发数据
- (void)sendMessageByEvaljs:(NSDictionary *)paramsDict_ {
// 发送自定义事件
[self sendCustomEvent:@"nativeEvent" extra:@"{ 'content': 'hello' }"];
return;
// 直接发送事件给nativeMessage
NSString *jsStr = @"nativeMessage({ 'count': '参数' })";
[self evalJs:jsStr];
}
appDelegate实现,使用第三方sdk初始化操作
// MyAppDelegate.h头文件
#import <Foundation/Foundation.h>
#import "UZAppDelegate.h"
@interface MyAppDelegate: NSObject
<UIApplicationDelgate>
@end
// MyAppDelegate.m文件
#import "MyAppDelegate.h"
@implementation MyAppDelegate
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
NSLog(@"didFinishLaunchingWithOptions");
return YES;
}
@end
在模块入口引入,在模块静态方法内调用addAppHandle来执行
#import "MyApplication.h"
+ (void)launch {
MyAppDelegate *appDele = [[MyAppDelegate alloc]init];
[theApp addAppHandle:appDele];
}
注:模块静态方法在module.json定义
{
"name": "moduleDemo",
"class": "UZModuleDemo",
"methods": ["printLog"],
"launchClassMethod": "launch"
}
读取config.xml文件
在widget包定义的config.xml
文件如下
<feature name="wx">
<param name="url" value="wx213123213213" />
</feature>
NSDictionary *moduleInfo = [self getFeatureByName:@"wx"];
NSString *moduleKey = [moduleInfo stringValueForKey:@"url" defaultValue:@""];
读取加密的配置文件
存放在widget包下res/key.xml定义如下
<security>
<item name="wxPay_appId" value="wx12424123sadsakj"/>
</security>
NSString *wxPayAppid = [self securityValueForKey:@"wxPay_appId"];