位置: 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中文教程)

  • 微信接龙怎么接上一个(微信接龙怎么接到上一次了)

    微信接龙怎么接上一个(微信接龙怎么接到上一次了)

  • 荣耀手表2可以升级鸿蒙吗(荣耀手表2可以戴着洗澡吗)

    荣耀手表2可以升级鸿蒙吗(荣耀手表2可以戴着洗澡吗)

  • 京东自营过了7天还能退货吗(京东自营过了7天不能退货怎么办)

    京东自营过了7天还能退货吗(京东自营过了7天不能退货怎么办)

  • 斗鱼直播怎么领取免费礼物(斗鱼直播怎么领花)

    斗鱼直播怎么领取免费礼物(斗鱼直播怎么领花)

  • 淘宝两个钻石是多少信誉(淘宝两个钻石是几心)

    淘宝两个钻石是多少信誉(淘宝两个钻石是几心)

  • 快手怎么设置联系电话(快手怎么设置联系我们导航到店)

    快手怎么设置联系电话(快手怎么设置联系我们导航到店)

  • 如何获得抖音钻卡(要怎么抽到抖音钻卡)

    如何获得抖音钻卡(要怎么抽到抖音钻卡)

  • 荣耀9x是华为手机吗(荣耀9x是华为手机型号吗)

    荣耀9x是华为手机吗(荣耀9x是华为手机型号吗)

  • 新买的手机发热正常吗(新买的手机发热可以退换吗)

    新买的手机发热正常吗(新买的手机发热可以退换吗)

  • 微信怎么突然没有一个好友了(微信怎么突然没有提取文字功能)

    微信怎么突然没有一个好友了(微信怎么突然没有提取文字功能)

  • word裁剪工具在哪里找(word的裁剪工具)

    word裁剪工具在哪里找(word的裁剪工具)

  • 充电宝20000m什么意思(充电宝20000是什么意思)

    充电宝20000m什么意思(充电宝20000是什么意思)

  • 音响是否属于表现媒体(音响属于哪一类)

    音响是否属于表现媒体(音响属于哪一类)

  • 随机误差和系统误差的区别(随机误差和系统误差有何区别)

    随机误差和系统误差的区别(随机误差和系统误差有何区别)

  • 被移出群聊是什么意思(被移出群聊是什么意思还在群里吗?)

    被移出群聊是什么意思(被移出群聊是什么意思还在群里吗?)

  • wifi为什么连上不能用(wifi为什么连上就断开)

    wifi为什么连上不能用(wifi为什么连上就断开)

  • iqoopro5g什么时候上市(iqoopro5g什么时候停产)

    iqoopro5g什么时候上市(iqoopro5g什么时候停产)

  • 拼多多怎么取消退款(拼多多怎么取消0元下单)

    拼多多怎么取消退款(拼多多怎么取消0元下单)

  • 网易云音乐拉黑后对方会知道吗(网易云音乐拉黑对方会怎么样)

    网易云音乐拉黑后对方会知道吗(网易云音乐拉黑对方会怎么样)

  • 微信朋友验证消息太长怎么看完(微信朋友验证消息怎么关闭)

    微信朋友验证消息太长怎么看完(微信朋友验证消息怎么关闭)

  • xsmax双卡双待怎么弄(xsmax双卡双待怎么装)

    xsmax双卡双待怎么弄(xsmax双卡双待怎么装)

  • 如何做滴滴司机(如何成为滴滴网约车司机)

    如何做滴滴司机(如何成为滴滴网约车司机)

  • 此推文可能包含敏感内容怎么设置(此推文可能包含隐藏内容怎么解除苹果手机)

    此推文可能包含敏感内容怎么设置(此推文可能包含隐藏内容怎么解除苹果手机)

  • 怎么用iphone制作视频(怎么用iphone制作长图)

    怎么用iphone制作视频(怎么用iphone制作长图)

  • 电脑office是什么(电脑office是什么版本在哪里看)

    电脑office是什么(电脑office是什么版本在哪里看)

  • 手机屏幕白斑会扩散吗(手机屏幕白斑会自己消失吗)

    手机屏幕白斑会扩散吗(手机屏幕白斑会自己消失吗)

  • Windows11预览体验计划空白该如何解决(Windows11预览体验)

    Windows11预览体验计划空白该如何解决(Windows11预览体验)

  • 文件夹选项打开方法win10(电脑打开文件夹选项)

    文件夹选项打开方法win10(电脑打开文件夹选项)

  • logrotate命令  管理记录文件(logread命令)

    logrotate命令 管理记录文件(logread命令)

  • 一般纳税人公司抵扣
  • 关税计入存货成本分录
  • 增值税纳税申报表模板
  • 附加税减半征收政策从什么时候开始
  • 公司购车预计净残值率怎么计算
  • 经营租赁违约金可以直接冲租赁费
  • 中小企业所得税优惠政策有哪些
  • 已经退税的增票怎么做账
  • 招拍挂方式取得土地,应该取得土地后立项
  • 异地施工如何缴工会经费
  • 外商投资企业国内上市最新政策
  • 贷款逾期的本金怎么计算
  • 事假扣薪
  • 财务部门使用固定资产的折旧计入管理费用
  • 预收帐款一直挂账好吗
  • 上个月的进项发票可以这个月勾选吗
  • 房地产开发企业销售自行开发的房地产项目
  • 劳动合同解除和终止的经济补偿
  • 合同和付款单位不一致发票应该开给谁
  • 跨年度收入计算的增值税如何入账?
  • 哪些人可以享受4050社保补贴
  • 银行存款明细账怎么登记及范本
  • 总公司和分公司的合作协议
  • 物业公司物业费都交什么税
  • 办理股权转让麻烦吗
  • 收到场地租赁费入什么科目
  • 营改增后的增值税税率
  • 公司注销时账面处理
  • windows11怎么显示桌面图标
  • 电脑上一键复制是哪个键
  • 在windows7操作具有
  • nerosmartstart.exe - nerosmartstart是什么进程 作用是什么
  • mac应用程序图标
  • 在企业扶贫捐赠活动上的讲话
  • 无偿划转股权
  • 个体户变更为有限公司成立时间
  • 存货损失账务处理新规定
  • 常用的前端大屏软件
  • 怎么计算土地增值税金额
  • 将自产的应税消费品用于连续生产应税消费品
  • 金融企业呆账核销管理办法
  • 纳税调整项目明细表30行怎么填写
  • 增值税纳税申报表怎么填
  • 一定要确认收入的时候才能开票吗
  • c语言中函数的数据类型是指
  • 法人给对公账户转账
  • 月底如何结转成本
  • 固定资产处置的会计科目
  • 银行承兑汇票的特点
  • 物流辅助服务费属于什么费用
  • 决算清理期和库款报解整理期
  • 没进项发票开销项发票可以吗?
  • 自产自用进项税额
  • 余额调节表的模板
  • 报销餐费属于什么费用
  • ubuntu12.04 amd64系统中lamp环境搭建方法
  • 如何查看苹果mac系统
  • Windows XP Vista 2006 简体中文版下载
  • mac应用程序安装失败
  • win7开始菜单没有启动文件夹
  • openssl 用法
  • javascript继承原理
  • bootstrap步骤
  • 简述javascript执行原理
  • egret引擎基础入门
  • python 效率优化
  • python难度
  • androidui布局
  • linux rsync命令详解
  • js 函数写法
  • 手机端apk反编译工具_android反编译工具
  • windows,linux
  • javascript的代码
  • python else用法
  • 回家税务总局全国增值税发票查询
  • 10%加计抵减政策条件
  • 医保报销是按自然年计算吗
  • 进口天然气定价机制
  • 贵州省地方税务局公告2016年第13号
  • 辽宁社保缴费公众号
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设