apicloud之ios模块开发基础

apicloud之ios模块开发基础

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"];