位置: IT常识 - 正文

基于OC端的Bridge-API组件化应用(oc底层原理)

发布时间:2024-01-17
基于OC端的Bridge-API组件化应用 前言

推荐整理分享基于OC端的Bridge-API组件化应用(oc底层原理),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:oc基础链,oc基础设置,基于odp,oc基础设置,oc基础设置,oc基础设置,oc guide,oc guide,内容如对您有帮助,希望把文章链接给更多的朋友!

在移动应用开发中,组件化可以提高代码的模块化和重用性,降低耦合度。当下大部分APP都至少包含一到两种Hybrid框架,H5基本是必要的,还可能叠加React Natvie、Weex或Flutter。

对于Hybird来说,Native的很多能力是其不具备的,需要通过各自的 Bridge / Plugin 来实现功能扩展,经过长时间的迭代后会产生大量的API。API的组件化可以让不同Hybrid平台甚至不同的APP使用同一份组件代码,抹平了跨平台以及跨应用的API实现差异,降低了API与工程的耦合度,同时也有利于API的统一管理,降低维护成本。

一、组件分类

将属性相同的API归为同一个组件。

二、组件设计1、制定API参数标准

1)入参规范

{ "pluginName": "http", // 组件名 "methodName": "dataRequest", // 接口名 "parameter": { // 入参数 "url": "https://domain/path/api.json", "method": "POST", "params":"{\"operation\":\"on\"}", "content-Type": "application/json" }, "callBackName": "callback_9d12ef83c2b245d7" // JS回调方法}

 2)出参规范

{ "code": "0", // 错误码 "message": "success", // 信息 "keepAlive": 0 // 是否保留回调方法 "data": {} // 返回数据}2、组件抽象类的定义

3、组件API的调用流程基于OC端的Bridge-API组件化应用(oc底层原理)

三、基础建设

1)HybridComponent:组件基类

@protocol HybridComponent <NSObject>@required+ (NSString *)getName;@optional- (NSDictionary *)methodsTestData;- (void)onReady;- (void)onUnload;@end

 2)HybridDataFormat:通用错误码定义、出参格式化工具

typedef NS_ENUM(NSInteger, HybridErrorCode){ HybridErrorCodeSuccess = 0, // 成功 HybridErrorCodePluginotExist = 100001, // 组件不存在 HybridErrorCodeMethodNotExist = 100002, // 组件方法不存在 HybridErrorCodeParamException = 100003, // 参数异常};@interface HybridDataFormat : NSObject+ (NSDictionary *)JSONObjectWithCode:(NSInteger)code message:(NSString *)message;+ (NSDictionary *)JSONObjectWithCode:(NSInteger)code message:(NSString *)message keepAlive:(BOOL)keepAlive;+ (NSDictionary *)JSONObjectWithData:(id)data code:(NSInteger)code message:(NSString *)message;+ (NSDictionary *)JSONObjectWithData:(id)data code:(NSInteger)code message:(NSString *)message keepAlive:(BOOL)keepAlive;@end

 3)HybridPluginProtocol:Hybrid容器代理方法

@protocol HybridPluginProtocol <NSObject>#pragma mark - 前端回调 -- (void)callbackName:(NSString *)callbackName params:(NSDictionary *)params;#pragma mark - 容器能力 -/// 设置NavigationBar属性 - { bgColor、bgImageName }- (void)setNavigationBarPropertys:(NSDictionary *)propertys;. . .@end

4)HybridInvokeModel:入参模型(params 、source、Hybrid容器代理、calBack)

5)HybridPluginManager:组件注册、组件注销、API参数配置

6)HybridPluginExecutor:执行API的分发,实现API到组件的具体方法桥接

四、实际应用1、OC端的组件封装

1)新建Class,继承于HybridComponent

#import "HybridComponent.h"@interface HybridHttp : HybridComponent@end

2) 组件注册 + API实现

#import "HybridHttp.h"@implementation HybridHttp#pragma mark - 组件注册 -+ (void)load { [[HybridPluginManager sharedInstance] regsiterImpClass:[self class]]; }#pragma mark - 组件名称 -+ (NSString *)getName { return @"http";}#pragma mark - API测试数据 - - (NSDictionary)methodsTestData { return @{ @"core.http.dataRequest": @{@"url": @"https://domain/path/api.json"} };} #pragma mark - method - METHOD_CHAIN_MOUNT(http, dataRequest)- (void)dataRequest:(HybridInvokeModel *)invokeModel { // do something and callback . . . if (invokeModel.callBack) { invokeModel.callBack([HybridDataFormat JSONObjectWithData:@{@"key": @"value"} code:HybridErrorCodeSuccess message:@"success"]); }}#pragma mark - 生命周期 -- (void)onReady { }- (void)onUnload { }@end2、Web端的API调用

1)上层API的调用方式

function dataRequest() { core.http.dataReqeust(parameter: @{url: 'https://domain/path/api.json'}, callback: (result) => { if(result.code) { console.log(result.message) } })}

2)底层API的具体实现(JSBridge参数转换、callback方法挂载)

function dataRequest() { let apiParams = {url: 'https://domain/path/api.json'} let invokeParams = {pluginName: 'http', methodName: 'dataRequest', parameter: JSON.stringify(apiParams), callBackName: 'callback_9d12ef83c2b245d7'} window.webkit.messageHandlers.core.postMessage({fuctionName: 'invokeAPI', parameter: JSON.stringify(invokeParams)})}
本文链接地址:https://www.jiuchutong.com/zhishi/300853.html 转载请保留说明!

上一篇:pytorch从零开始搭建神经网络(pytorch新手入门)

下一篇:【OpenFOAM】-olaFlow-算例1- baseWaveFlume(openfoam中文教程)

  • 哪些项目需要交环保税
  • 固定资产可以一次性摊销吗
  • 计提印花税会计分录最新
  • 算所得税要不要减去增值税
  • 金蝶软件制造费用结转步骤
  • 个体户电子发票怎么作废
  • 什么发票可以冲销
  • 通讯费可以个人承担吗
  • 计提的费用年底要冲回吗
  • 建安企业增值税预缴
  • 个人代持股票的交易流程
  • 母公司派遣员工到子公司解散补偿金
  • 房租税费计入什么会计科目
  • 小规模异地预缴增值税
  • 办理完税务手续是否还需要报税?
  • 营改增之后的增值税
  • 税后工资反推税前工资计算方法
  • 技术转让税收优惠政策500万
  • 一般纳税人能开3%的专票吗
  • 公司购买新办公楼装修计入什么科目
  • 机顶盒包括
  • 个税缴纳累计是每年一算吗
  • 基建管理费如何进行结转?
  • 银行要求的补偿性余额所占比例为20%
  • 公司技术服务部是干嘛的
  • 专票开票银行一定要对吗
  • 电脑检测不到税控盘原因
  • 年末商品库存属于什么指标
  • 酒店行业增值税加计抵减是10%还是15%
  • 预缴增值税会计处理
  • 商品房买卖合同面积差3%法律规定
  • 临时股东大会的召开情形
  • 分摊本月领用材料的成本差异
  • 存货 计价
  • 物流公司的收入怎么记账
  • php简单聊天室源码
  • yii2中LinkPager增加总页数和总记录数的实例
  • php resizeimage 部分jpg文件 生成缩略图失败的原因分析及解决办法
  • 配置nginx支持php
  • Gumbel-Softmax完全解析
  • 公司有收入可不交社保吗
  • 进项税额转出在申报的时候怎么填
  • 电子承兑利息
  • 以前月份多扣社保吗
  • 帝国cms自动更新
  • 织梦cms怎么样
  • 研发人员具备的条件
  • 股权变更涉及土地增值税吗
  • c#获取局域网ip
  • 滴滴电子普通发票能抵扣进项税吗
  • 哪些合同不用交社保
  • 应交税费要计提吗?
  • 公司货物发票进项高开还是低开
  • 会计事务所给的发票
  • 租车运货产生的费用
  • 两笔不同业务能转账吗
  • 盈利是不是利润的意思
  • 加油卡充值发票可以抵税吗
  • 印花税是本月交上个月的吗
  • 关税用什么会计科目
  • sql server2012操作步骤
  • delete from 表名 where
  • 磁盘碎片 win7
  • ubuntu 8.04.1 LTS 下的cpu温度监控软件lm-sensors
  • win10键盘大小写不能切换了
  • centos做bond4
  • linux如何安装wget命令
  • win7桌面右下角
  • hyper安装win7
  • 计算机图形学是什么专业
  • 创建nodejs 基于express项目
  • androidstudio调用so文件
  • nodejs的流处理模块
  • jquery 放大镜
  • 用python定义一个函数
  • python调用python脚本
  • 中国进口国外品牌排行榜
  • 房产交契税网上可以交吗
  • 小规模增值税减免会计科目
  • 党员逝世可否盖党旗
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号