# iOS开发:
# hatom插件开发
定义:hatom插件是一种原生能力的封装组件,以接口的形式暴露给前端开发调用,前端集成hatom.js或使用hatom脚手架创建工程即可使用hatom能力及其他hatom插件能力。
开发:
插件开发分两种方式:
1、主动注册:引入hatom框架(#import <Hatom/Hatom.h>),在任意方法中通过调用 registH5Interface
方法注册接口给前端调用,如:
oc方式:
[HatomCommon registH5Interface:@"GetRootInfoPlugin.getRootInfo" handler:^(id data, HatomH5ResponseCallback responseCallback, id ext) {
/// ext:为当前显示的js页面的HatomWebViewConroller,data:前端调用传过来的数据
/// TODO
/// ------
// responseCallback:前端调用回调
responseCallback([HatomCommon formatResponseStringByCode:0 data:@{@"statusBarHeight":@20}]);
}];
swift方式:
HatomCommon.registH5Interface("GetRootInfoPlugin.getRootInfo") { (res, callback, info) in
if callback != nil {
/// TODO
/// callback:前端调用回调
callback!(HatomCommon.formatResponseString(byCode: 0, data: ["statusBarHeight": 20]))
}
}
2、被动发现:引入hatom框架(#import <Hatom/Hatom.h>),定义类 GetRootInfoPlugin
,继承自 HatomPlugin
,实现方法 getRootInfo
,如:
oc方式:
- (void) getRootInfo:(id)data {
[HatomLog log:HLogDebug content:[NSString stringWithFormat:@"js-->native %s called: %@", __FUNCTION__, data]];
/// TODO
/// self.callback:前端调用回调
self.callback([HatomCommon formatResponseStringByCode:0 data:@{@"statusBarHeight":@20}]);
}
swift方式:
/// 插件类
@objc(GetRootInfoPlugin) //swift实现的插件类,需要声明为objc类型。
open class GetRootInfoPlugin: HatomPlugin {
/// 插件方法
@objc func getRootInfo(data: Any?) {
/// self.callback:前端调用回调
self.callback([HatomCommon formatResponseStringByCode:0 data:@{@"statusBarHeight":@20}])
}
}
# hatom框架使用
主要指原生集成hatom框架,使用hatom提供的webview能力,加载显示静态HTML 或 集成基于hatom框架(主要指使用hatom-hybrid能力)开发的前端应用菜单。
1、目前hatom对外暴露的类 HatomWeb
,提供一键加载URL,返回UIViewController(类型实际为HatomWebViewController)
,以及重新加载和调用JS接口功能。加载URL时支持导航标题设置、cookie设置及透传数据到前端页面等基本功能。
2、hatom仅提供了 视图控制器 形式的HatomWeb,未提供 视图层面的 HatomWeb,如有需要,可自行使用 addChildCtl 的方式完成功能。
3、如有更多接口或功能需求可联系我们,完善hatom框架或加入hatom框架的维护,共同丰富功能接口。
UIViewController* ctl = [HatomWeb loadUrl:@"https://10.17.68.222:8081/index.html" pageSetting:[HatomWebPageSetting defaultSetting] userData:nil failed:^(NSError * _Nonnull error) {
NSLog(@"%@", error.localizedDescription);
}];
[self.navigationController pushViewController:ctl animated:YES];