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

  • 文件夹图片怎么变顺序(文件夹图片怎么打印出来)

    文件夹图片怎么变顺序(文件夹图片怎么打印出来)

  • 滴答顺风车一天可以接几单(滴答顺风车一天可以接几个单子)

    滴答顺风车一天可以接几单(滴答顺风车一天可以接几个单子)

  • 0x000000074蓝屏怎么弄(0x000000078蓝屏)

    0x000000074蓝屏怎么弄(0x000000078蓝屏)

  • 苹果手机连爱思没反应(苹果手机连爱思一直显示连接中)

    苹果手机连爱思没反应(苹果手机连爱思一直显示连接中)

  • 抖音极速版跟抖音短视频有什么区别(抖音极速版跟抖音是一样的吗)

    抖音极速版跟抖音短视频有什么区别(抖音极速版跟抖音是一样的吗)

  • 快手怎么举报人(快手怎么举报人他给我私信发不好的图片我怎么举报他)

    快手怎么举报人(快手怎么举报人他给我私信发不好的图片我怎么举报他)

  • 强行关机后电脑打不开怎么办(强行关机后电脑运行很卡)

    强行关机后电脑打不开怎么办(强行关机后电脑运行很卡)

  • wifi显示光信号红灯是什么回事(wifi显示光信号是什么意思)

    wifi显示光信号红灯是什么回事(wifi显示光信号是什么意思)

  • 居中对齐快捷键(段落居中对齐快捷键)

    居中对齐快捷键(段落居中对齐快捷键)

  • 光环助手无法验证(ios光环助手无法验证应用)

    光环助手无法验证(ios光环助手无法验证应用)

  • oppo手机怎么清理内存空间不足(oppo手机怎么清除最近打开的程序)

    oppo手机怎么清理内存空间不足(oppo手机怎么清除最近打开的程序)

  • 为什么前置和后置拍出来不一样(为什么前置和后置拍出来的不一样)

    为什么前置和后置拍出来不一样(为什么前置和后置拍出来的不一样)

  • 手机怎么做压缩包(手机怎么做压缩包发送给别人oppo)

    手机怎么做压缩包(手机怎么做压缩包发送给别人oppo)

  • 快手视频链接在哪里找(快手怎么弄链接在视频下面)

    快手视频链接在哪里找(快手怎么弄链接在视频下面)

  • 淘宝评论视频怎么保存(淘宝评论视频怎么下载保存到相册)

    淘宝评论视频怎么保存(淘宝评论视频怎么下载保存到相册)

  • IOS13更新时间(iphone13更新时间)

    IOS13更新时间(iphone13更新时间)

  • 有什么好玩的网页游戏?(有什么好玩的网页游戏推荐)

    有什么好玩的网页游戏?(有什么好玩的网页游戏推荐)

  • 华为手机测量长度(华为手机测量长度的软件是在哪里)

    华为手机测量长度(华为手机测量长度的软件是在哪里)

  • 土豆下载的视频在手机哪个文件夹(土豆下载的视频在哪个文件夹)

    土豆下载的视频在手机哪个文件夹(土豆下载的视频在哪个文件夹)

  • 如何关闭商户收款码(如何关闭商家收款声音)

    如何关闭商户收款码(如何关闭商家收款声音)

  • 手机号怎么报停(手机号怎么报停机)

    手机号怎么报停(手机号怎么报停机)

  • 录屏软件哪个好用?10个免费好用的「录屏软件」推荐(主播录屏软件哪个好)

    录屏软件哪个好用?10个免费好用的「录屏软件」推荐(主播录屏软件哪个好)

  • 用jsp实现简单登入注册界面功能(css美化)(软件idea)(jsp做登录界面)

    用jsp实现简单登入注册界面功能(css美化)(软件idea)(jsp做登录界面)

  • 个人所得税查询工资与实际工资不符是为何
  • 车辆购置税会计核算
  • 跨年取得的发票怎么入账
  • 平行结转分步法各步骤的费用
  • 材料采购暂估入账
  • 预缴的税款
  • 小规模纳税人处置固定资产的税率
  • 无偿划拨资产涉税问题
  • 单位购买食品饮料的进项税可以抵扣吗?
  • 产品成本的计算公式
  • 单位购买的团体意外险会计分录
  • 其他收益是否缴纳个税
  • 作废的发票怎么处理
  • 利润表里的营业税金及附加如何计算
  • 个人借款取得的利息收入要交税吗
  • 代收代付快递货款需要发票吗,中间差额服务费怎么开票?
  • 一般纳税人减免性质代码怎么填写
  • 在win10系统中,如何限制孩子玩原神游戏
  • 在win7系统中如何让电脑恢复出厂设置方法
  • 暂估入库材料分录
  • 进货的运费怎么计算
  • macos catalina新功能
  • 住房补贴缴纳比例是多少
  • rrpcsb.exe - rrpcsb是什么进程 有什么用
  • 企业对外捐赠扣除标准有哪些?
  • 结转出租包装物报废的残料价值计入
  • 补充养老保险的特点
  • 委托加工业务的组成计税价格
  • phpstorm怎么用
  • 应收票据影响现金流吗
  • 没有进项开销项需要交几个点
  • 【经验分享】使用了6年的实时操作系统,是时候梳理一下它的知识点了 | 文末赠书4本
  • vue在项目中怎么用的
  • javascript图表
  • css deep深度选择器
  • 软件行业的最后阶段是
  • fio命令详解
  • 可供出售金融资产和交易性金融资产
  • 外包人员的餐费可以全部扣除吗
  • 进项税转出能转回吗
  • 企业境外收入境内申报
  • sql将一列数据变成一行显示
  • 可变现净值属于会计计量属性吗
  • 收支平衡表excel怎么做
  • 社保怎么缴费方式
  • 事业单位会计制度
  • 我有朋友吗朋友圈说说
  • 应付账款已付款应该怎样记账
  • 收到开错的发票怎么办
  • 购买空调报销写什么科目的
  • 公司认缴没有实缴会有什么风险
  • 个人收到国外汇款后怎么办
  • 销售发票已开进项发票未收到怎么处理?
  • 小规模公司购买成本票严重吗
  • 小规模纳税人买车可以抵扣哪些税
  • 其他货币资金都有啥
  • mysql中数据类型为是否
  • dmidecode命令
  • winxp关机立马自动重启
  • ubuntu可以不关机吗
  • ubuntu 14.04.6
  • xp系统电源设置在哪里
  • randomdigits.exe - randomdigits是什么进程 有什么用
  • messengerd
  • Win10 UWP红石版应用商店迎来更新:查找更新再换位置
  • linux中ctrl+c
  • win8删除文件不提示
  • win7显卡属性在哪
  • win7删除开机启动程序
  • android开机自启动显示界面
  • Unity3D游戏开发引擎
  • bat 批处理文件
  • linux 检查网络状态
  • JavaScript中的变量名不区分大小写
  • python列表的常用方法有哪些
  • 税务分局是什么意思
  • 税务函调回来几天可以退税
  • 网上怎么开电子一票通
  • 北京地税局上班时间查询
  • 河南地税税率怎么计算
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设