位置: IT常识 - 正文

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

编辑:rootadmin
基于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中文教程)

  • 小微企业税收新政
  • 行政事业单位决算编制流程图
  • 企业给员工的福利取消了可以劳动仲裁么
  • 国际货运代理一个月大概有多少收入
  • 会计调转是什么意思
  • 承兑汇票大回头票是什么意思
  • 暂估的应付账款无法开具发票在金蝶云星空怎么操作
  • 上期有留抵进项税额,本期如何转,如何做账
  • 无偿划拨资产的入账价值
  • 生育津贴需要连续缴纳社保满一年吗
  • 不进行工商登记会怎样
  • 进项发票失控账务处理
  • 2018年城镇医保
  • 行政单位的会计要素
  • 支付土地出让金怎样做账
  • 快递公司之间的合作模式
  • 投资合伙企业对公司有债务责任吗
  • 银行与银行之间转账会计摘要
  • award bios设置详解
  • 企业重组后的债务怎么算
  • 抵扣了的进项税可以冲销么
  • 无形资产初始计量的表述
  • PHP:pg_get_result()的用法_PostgreSQL函数
  • 固定资产一次性扣除后第二年账务处理
  • windows7旗舰版最新版本
  • 红字发票负数要怎么抵掉
  • jetson nano nvidia-smi
  • react最新教程
  • 行走在奥卡万戈河中的大象,博茨瓦纳,非洲南部 (© Markus Pavlowsky/Getty Images)
  • 利润分配的会计分录怎么写
  • 一次性扣除固定资产汇算清缴
  • oauth2 sso单点登录
  • 利润表利息费用怎么填
  • uni-swiper-dot
  • 块元素和行内元素区别
  • 芒果sdk
  • vue 如何使用
  • 损失函数解读例题
  • 农产品收购发票是普票还是专票
  • 期末调整汇兑损益计算
  • 增值税发票超过一年未抵扣
  • 企业低值易耗品的摊销方法有
  • 平时加班和节假日加班工资
  • 收据4联
  • 延期付款利息收入要交增值税吗
  • 一般纳税人无形资产税率
  • 未开发票如何确认收入并进行申报?
  • 陕西省跨区域企业所得税征收
  • 公对公退款是不是很麻烦
  • 工资与社保的关系图
  • 银行承兑汇票到期日后多久可以承兑
  • 公司注销应付款如何办理
  • 手工账做账流程总结
  • 预提费用在汇算清缴时调整
  • 销售退货成本如何计算
  • 简易征收怎么申报
  • 进项发票已入账进项税,但是未抵扣怎么办
  • 物流运输业务
  • 仲裁是什么意思举个例子
  • 内帐与外帐的哪个更好
  • window mysql
  • xp系统如何安装
  • 软碟通可以制作uefi启动盘吗
  • 升级完鸿蒙系统5G咋没有了
  • winXP系统下qq不能视频聊天该怎么办?
  • apache是什么文件
  • 如何隐藏文件夹并显示隐藏的文件夹
  • macbookpro如何开启查找我的mac
  • 怎么学linux
  • win7自动更新失败怎么删除更新启动
  • win7怎么连接手机上网
  • win8应用商店无法使用
  • cocos2dx屏幕适配解决方案
  • unity shader lod
  • nodejs代码规范
  • linuxtop命令详解
  • 浅析2种JavaScript继承方式
  • 电子发票怎么汇总清卡
  • 2023居民医保怎么交
  • 徐州第三税务分局
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设