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

  • 微信营销该怎么做?(微信营销怎么避免封号)

    微信营销该怎么做?(微信营销怎么避免封号)

  • 支付宝店员怎么查看收款记录(支付宝店员怎么查账)

    支付宝店员怎么查看收款记录(支付宝店员怎么查账)

  • 苹果11如何给app上锁(苹果11如何给相册设置密码锁)

    苹果11如何给app上锁(苹果11如何给相册设置密码锁)

  • vivo x27消息通知怎么设置不显示内容

    vivo x27消息通知怎么设置不显示内容

  • 苹果最近删除删不掉(苹果最近删除删了还能找回来吗)

    苹果最近删除删不掉(苹果最近删除删了还能找回来吗)

  • 手机用着用着就自己重启了(手机用着用着就自动关机是什么原因)

    手机用着用着就自己重启了(手机用着用着就自动关机是什么原因)

  • 微信小程序怎样打开(微信小程序怎样注销)

    微信小程序怎样打开(微信小程序怎样注销)

  • 手机qq音乐音译不见了(手机qq音乐音译不见了2020)

    手机qq音乐音译不见了(手机qq音乐音译不见了2020)

  • 为什么抖音里美化功能只有三个了(为什么抖音里美颜没有瘦脸)

    为什么抖音里美化功能只有三个了(为什么抖音里美颜没有瘦脸)

  • 直接从iphone传输没反应(iphone激活直接从iphone传输)

    直接从iphone传输没反应(iphone激活直接从iphone传输)

  • 嘀嗒出行1+1是什么意思(嘀嗒出行规则)

    嘀嗒出行1+1是什么意思(嘀嗒出行规则)

  • qq群最多能加多少人为上限(qq群可以加多少人才满)

    qq群最多能加多少人为上限(qq群可以加多少人才满)

  • 苹果桌面的控制按钮怎么调出来(苹果桌面的控制中心怎么显示)

    苹果桌面的控制按钮怎么调出来(苹果桌面的控制中心怎么显示)

  • 苹果xs面容坏了能修吗(苹果xs面容坏了能修吗多少钱)

    苹果xs面容坏了能修吗(苹果xs面容坏了能修吗多少钱)

  • 为什么qq音乐下载的歌不在本地(为什么qq音乐下载的音乐在文件夹找不到)

    为什么qq音乐下载的歌不在本地(为什么qq音乐下载的音乐在文件夹找不到)

  • iqoo手机忘记密码了,怎样才能解锁密码(IQOO手机忘记密码)

    iqoo手机忘记密码了,怎样才能解锁密码(IQOO手机忘记密码)

  • 手机电池充一晚上会损坏电池吗(手机电池充一晚上充不满)

    手机电池充一晚上会损坏电池吗(手机电池充一晚上充不满)

  • se版本是什么意思(se版本是什么意思球鞋)

    se版本是什么意思(se版本是什么意思球鞋)

  • 华为手机耳机往哪里插(华为耳机插上怎么跟外放一样)

    华为手机耳机往哪里插(华为耳机插上怎么跟外放一样)

  • 微博可以看访客记录吗(微博可以看访客是谁吗)

    微博可以看访客记录吗(微博可以看访客是谁吗)

  • findx多少w快充(findx支持50w快充吗)

    findx多少w快充(findx支持50w快充吗)

  • 苹果来电铃声小(苹果来电铃声小但在设置中声音很大)

    苹果来电铃声小(苹果来电铃声小但在设置中声音很大)

  • 微信付款记录删除了怎么恢复(微信付款记录删除)

    微信付款记录删除了怎么恢复(微信付款记录删除)

  • cad算面积快捷键(cad算面积快捷键框面积)

    cad算面积快捷键(cad算面积快捷键框面积)

  • Mac怎么查询UUID信息? 硬盘接口类型的查询方法(mac怎么查询是不是正品)

    Mac怎么查询UUID信息? 硬盘接口类型的查询方法(mac怎么查询是不是正品)

  • 微软输入法繁体改简体教程(微软输入法繁体字变简体字)

    微软输入法繁体改简体教程(微软输入法繁体字变简体字)

  • nerf训练自己的数据,过程记录十分详细(nerf 怎么瞄准)

    nerf训练自己的数据,过程记录十分详细(nerf 怎么瞄准)

  • 会计新手如何学会收款流程
  • 民营医院一般纳税人帐务处理视频税收风险
  • 一般纳税人税费计算明细表
  • 加工承揽属于劳务关系吗
  • 销项税能抵扣么
  • 出租固定资产的折旧额是什么意思
  • 番茄开发票属于蔬菜吗
  • 汇算清缴结束后,税务机关发现企业应当取得
  • 计提个人部分保险
  • 其他应收款是否要收利息
  • 实收资本变更股东要交税吗
  • 诉讼费走哪个会计科目
  • 一次性付清的优缺点
  • 实施计划成本存货发生毁损的会计处理怎么做?
  • 银行询证函回函是什么意思
  • 代收房款
  • 装修费属于劳务费吗
  • 纳税人识别号和税号是一个意思吗
  • 营运资金的范畴包括哪些
  • 预付账款需要发票吗
  • 现金支票怎么背书转让
  • 预收房屋租金如何交房产税
  • 固定资产清理需要结转吗
  • 收到的红字发票报税的时候怎么填
  • 代开专票不满10万的要交附加吗?
  • 印花税减免税额需要做账吗
  • 会计科目未付利润属于哪个科目
  • 房地产公司的存货分析
  • 房产契税怎样交费
  • 停止维护win7
  • 财政补助收入核算内容
  • 代理业务资产的意思
  • 以非现金资产清偿债务的,债权人应当
  • 预收房屋租金
  • 发票已认证当月未申报怎么办
  • 公司房产处置
  • 可供出售交易资产
  • adas数据集
  • php导出带样式的数据库
  • python中写函数
  • 网上学电脑的软件
  • 没有什么盈利的公司应该进吗
  • python中如何创建文件
  • mysql密码忘记了咋办
  • mysql备份方式有哪些
  • 国家企业信用公示信息公示
  • 一般纳税人购销合同印花税减免政策
  • 税是什么为什么要交税
  • 一般纳税人企业所得税税率多少
  • 其他应付款长期挂账几年必须转收入
  • 缴纳残保金会计分录怎么做
  • 子公司注销母公司收回现金流
  • 影院会计有前景吗
  • 专利年费可以减免吗
  • 工程结算与开票的关系
  • 运费未付的会计分录怎么做
  • 固定资产的折旧年限规定
  • 仲裁是什么意思举个例子
  • 工业企业营业税率
  • 苹果电脑安装中国银行网银助手
  • 系统用户在哪里
  • 电脑死机是啥原因
  • xp sp3精简版
  • 你需要windows7sp1才能安装ie11
  • win8注册表损坏进不了系统
  • opengl怎么学
  • jQuery实现select模糊查询(反射机制)
  • linux怎么使用shell脚本
  • 苹果macos安装
  • javascript的代码写在哪里
  • nodejs tcp
  • shell脚本输出空格
  • php守护进程的应用场景
  • 22号天蝎座的运势
  • 北京车辆过户办理
  • 房产税的计税依据与税率分别是什么
  • 河南省地方税务局公告2017年第4号
  • 跨区迁移税务需要注销吗?
  • 达州房管局备案查询系统
  • 海宁到许村公交车路线
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设