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