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

  • 微信公众平台快速增粉完全攻略(公众号快讯)

    微信公众平台快速增粉完全攻略(公众号快讯)

  • qq空间照片怎么批量下载到电脑(qq空间照片怎么上传原图)

    qq空间照片怎么批量下载到电脑(qq空间照片怎么上传原图)

  • 为什么抖音抽不到发(为什么抖音抽不到立春福袋)

    为什么抖音抽不到发(为什么抖音抽不到立春福袋)

  • 网易云怎样从手机上下载歌曲(网易云怎样手机号登录)

    网易云怎样从手机上下载歌曲(网易云怎样手机号登录)

  • 华为手机自检功能在哪(华为手机自检功能代码)

    华为手机自检功能在哪(华为手机自检功能代码)

  • 华为的隐藏功能是怎么使用的(华为的隐藏功能在哪里打开)

    华为的隐藏功能是怎么使用的(华为的隐藏功能在哪里打开)

  • 写论文用wps还是word(写论文用wps还是ms)

    写论文用wps还是word(写论文用wps还是ms)

  • 抖音一个小红点是怎么回事(抖音一个小红点多少钱)

    抖音一个小红点是怎么回事(抖音一个小红点多少钱)

  • xboxone连接kinect无反应

    xboxone连接kinect无反应

  • 充电宝可以充充电宝吗(充电宝可以充充电吗)

    充电宝可以充充电宝吗(充电宝可以充充电吗)

  • 快手小店保证金必须交吗(快手小店保证金多少钱)

    快手小店保证金必须交吗(快手小店保证金多少钱)

  • 电脑所有程序都不响应(电脑所有程序都变大了怎么办)

    电脑所有程序都不响应(电脑所有程序都变大了怎么办)

  • 手机图像变成黑白底片怎么办(手机图像变成黑白了怎么调回来)

    手机图像变成黑白底片怎么办(手机图像变成黑白了怎么调回来)

  • 9400f和9500f有什么区别(9400f与9500f)

    9400f和9500f有什么区别(9400f与9500f)

  • 苹果11pro充电要多久(苹果11pro充电要多久充满)

    苹果11pro充电要多久(苹果11pro充电要多久充满)

  • iphone非合约机是什么意思(苹果合约机和非合约机的质量区别)

    iphone非合约机是什么意思(苹果合约机和非合约机的质量区别)

  • 苹果手机怎么截长图(苹果手机怎么截图全屏长图)

    苹果手机怎么截长图(苹果手机怎么截图全屏长图)

  • 抖音怎么首发的(抖音视频怎么首发)

    抖音怎么首发的(抖音视频怎么首发)

  • 怎么改电费接收手机号(如何更改交电费的用户)

    怎么改电费接收手机号(如何更改交电费的用户)

  • 用Ps怎么制作有质感毛玻璃效果(ps怎么制作有序排列图案)

    用Ps怎么制作有质感毛玻璃效果(ps怎么制作有序排列图案)

  • 苹果防水等级(苹果防水等级排名)

    苹果防水等级(苹果防水等级排名)

  • 手机软件停止运行怎么办(手机软件停止运行)

    手机软件停止运行怎么办(手机软件停止运行)

  • 高德地图 API,点击地图标记获取自定义标记 (Marker) 中的信息(高德地图api是什么意思)

    高德地图 API,点击地图标记获取自定义标记 (Marker) 中的信息(高德地图api是什么意思)

  • 企业收取培训费
  • 工资薪金和工资薪金总额区别
  • 海运的发票可以抵税吗
  • 定额发票上可以盖章吗
  • 小企业会计准则以前年度损益调整
  • 小规模国税怎么报税
  • 房地产企业营销设施建造费包括哪些
  • 销毁会记凭证
  • 增值税进项税额转出的账务处理
  • 营改增无形资产
  • 返利冲抵货款会计分录
  • 修理费要开税控清单吗
  • 纳税人必须关注的10个涉税风险点
  • 固定资产清理的借方
  • 什么是小型微利企业标准2023
  • 银行承兑第一手怎么盖章
  • 集团公司收取管理费是否可以税前列支
  • 收入低于10万免征附加税
  • 月销售额3万以下免征
  • 应收单据处理包括哪些
  • 关联企业纳税调整期限
  • 批量获取文件信息
  • 计提跌价准备会影响利润吗
  • 以前年度的账错了怎么办
  • 苹果mac电脑自带的软件
  • win7缓存设置方法
  • 生产和提供的区别
  • 房地产企业销售无产权车位
  • PHP:oci_fetch_object()的用法_Oracle函数
  • 成本法转为权益法属于会计政策变更吗
  • 程序员中秋节祝福语
  • php多维数组遍历输出
  • 经济补偿金个人所得税计算公式
  • 增值税会自动申报吗
  • vue3 + ts
  • codeignitor
  • 年终奖的发放明目
  • 计算机网络拓扑结构有哪些
  • user-interface console 0 指令无效
  • php快速排序非递归
  • 增值税普通发票和专用发票有什么区别
  • 银行查询余额
  • 天猫如何不走对公账户
  • 票据粘贴顺序是什么
  • 收到现金货款会计分录
  • 季度利润表中的利润总额
  • 接收商业承兑汇票有风险吗
  • 未入账负债怎么算
  • 差旅费报销金额怎么算
  • 公司办公室买的茶叶怎么入账
  • 其他应付款贷方正数表示什么意思
  • 建筑行业收到工程款延期付款利息需不需要开票
  • 子公司向母公司借钱
  • 发票红冲后原票是什么状态
  • windows使用痕迹是指是什么
  • vistasp3
  • 网站的运维
  • xp系统桌面图标怎么设置
  • win7音量图标不能启用
  • mac自带计算器
  • 电脑windows7无法验证此文件
  • nerosmartstart.exe - nerosmartstart是什么进程 作用是什么
  • 微软将为11增加AI助手
  • linux克隆虚拟机
  • linux虚拟机安装windows
  • 怎么查看opengl版本
  • opencv轻松入门
  • edit apps
  • android全局异常捕获并弹框提示
  • JavaScript中的math.pi
  • bootstrap boosting
  • ajax链式调用
  • jquery1.11.3
  • 没工作个人所得税还用下载吗
  • 没有税务备案,不用申报增值税
  • 山东水利建设基金减免政策
  • 土地评估报告书
  • 免税关口
  • 国税局地点
  • 企业收到上一年增值税
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设