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

  • 13pro和13区别(13pro和13区别摄像头)

    13pro和13区别(13pro和13区别摄像头)

  • oppo手机搜狗输入法正在录音无法使用微信语音怎么办(oppo手机搜狗输入法怎么启用)

    oppo手机搜狗输入法正在录音无法使用微信语音怎么办(oppo手机搜狗输入法怎么启用)

  • vivo x27联系人怎么导入sim卡(vivox27联系人怎么存到手机里)

    vivo x27联系人怎么导入sim卡(vivox27联系人怎么存到手机里)

  • 华为mate30充电时间

    华为mate30充电时间

  • 手机文档怎么插照片(手机怎么建文档)

    手机文档怎么插照片(手机怎么建文档)

  • 快手流量是什么意思啊(快手流量包怎么买)

    快手流量是什么意思啊(快手流量包怎么买)

  • 快手浏览模式没有了(快手找不到浏览设置)

    快手浏览模式没有了(快手找不到浏览设置)

  • 华为保修期内屏幕碎了保修吗(华为保修期内屏幕碎了多少钱)

    华为保修期内屏幕碎了保修吗(华为保修期内屏幕碎了多少钱)

  • QQ里面的扩列为什么会匹配失败(qq新功能扩列)

    QQ里面的扩列为什么会匹配失败(qq新功能扩列)

  • vivo不断优化重启(vivo手机一直优化重启循环怎么回事)

    vivo不断优化重启(vivo手机一直优化重启循环怎么回事)

  • 微信登不上去了,里面的钱怎么办(微信登不上去了怎么注销账号)

    微信登不上去了,里面的钱怎么办(微信登不上去了怎么注销账号)

  • vivo怎么拦截陌生短信?(vivo怎么拦截陌生来电)

    vivo怎么拦截陌生短信?(vivo怎么拦截陌生来电)

  • 快手怎么隐藏共同好友(快手里怎么隐藏我的互相关注)

    快手怎么隐藏共同好友(快手里怎么隐藏我的互相关注)

  • 怎么隐藏微信收藏内容(怎么隐藏微信收款码实名)

    怎么隐藏微信收藏内容(怎么隐藏微信收款码实名)

  • 手机上的OTG是什么意思

    手机上的OTG是什么意思

  • 华为闹钟铃声怎么设置自己的音乐(华为闹钟铃声怎么换音乐)

    华为闹钟铃声怎么设置自己的音乐(华为闹钟铃声怎么换音乐)

  • 苹果11夜景模式怎么拍(苹果11夜景模式怎么开启)

    苹果11夜景模式怎么拍(苹果11夜景模式怎么开启)

  • 三星note10+和s10+的区别(三星note10和s10+哪个好一点呢)

    三星note10+和s10+的区别(三星note10和s10+哪个好一点呢)

  • 闪电盒子注销步骤(闪电盒子怎么实名认证)

    闪电盒子注销步骤(闪电盒子怎么实名认证)

  • 手机版陌陌怎么看后即焚(手机陌陌怎么改定位软件)

    手机版陌陌怎么看后即焚(手机陌陌怎么改定位软件)

  • 苹果a2152是什么型号(苹果a2153是什么型号)

    苹果a2152是什么型号(苹果a2153是什么型号)

  • 为什么抖音保存到相册失败(为什么抖音保存不了本地视频)

    为什么抖音保存到相册失败(为什么抖音保存不了本地视频)

  • 探探应用给我发短信是怎么回事(探探应用发信息)

    探探应用给我发短信是怎么回事(探探应用发信息)

  • Linux如何给文件权限? linux给文件添加可执行权限的技巧(Linux如何给文件赋予内容)

    Linux如何给文件权限? linux给文件添加可执行权限的技巧(Linux如何给文件赋予内容)

  • 新的税收
  • 累进税率的形式有全额累进税率和什么两种
  • 财务会计和预算会计是两套账吗
  • 公司有残疾人如何进行增值税减免备案
  • 发票税率金额如何得出
  • 环保税申报表怎么填制
  • 一般纳税人月底增值税如何结转
  • 关联企业往来款 利息
  • 残保金是谁支付给单位?
  • 固定资产清理属于什么科目
  • 税款追征期起算点 增值税重新计算
  • 企业合并相关舞弊风险有哪些
  • 混凝土委托加工税率
  • 填制凭证的内容通常包括
  • 企业所得税季报时间
  • 增值税普票没有校验码
  • 房地产行业预缴税款
  • 车辆购置税如何计算
  • 个人独资企业是一般纳税人吗
  • 营改增住宿费的进项税可以抵扣吗
  • etc发票进项抵扣的最新政策
  • 红字发票可用于入账吗
  • 化妆品消费税是从价还是从量
  • 国税和地税归哪里管
  • 自然人办税服务平台怎么登录和注册
  • 所有者权益与所有者权益合计
  • 已经销售但是没货怎么办
  • 联营企业分回的利润交企业所得税吗
  • 微信收付款认证
  • 信用卡购物消费怎么算
  • 服务行业营业成本占比
  • 电脑上不了网怎么安装网卡驱动
  • 息税前利润和税后经营净利润
  • 长期股权投资增加的原因
  • 一次性付一年的房租要摊销吗
  • 总账建账科目顺序
  • 苹果14出来13会下架吗
  • 如何把文档转换成二维码
  • kali渗透工具安装
  • 传递优化的作用
  • 分公司收到总公司拨款怎么做分录
  • CodeIgniter与PHP5.6的兼容问题
  • springboot常用
  • 收据中代收款凭证
  • 微信小程序实现支付功能
  • 浅谈php技术
  • 公司给职工买工伤险流程
  • typescript event
  • expdp/impdp oracle数据泵导入导出
  • 以无形资产向外单位投资会引起会计要素
  • 残次品生产成本计算
  • 车辆保险费怎么入账
  • 软件企业主营业务活动说明范文
  • sqlserver2005数据库备份
  • 收到服务费发票怎么做账
  • 缴纳增值税附加税
  • 收到汇款计入什么科目
  • 全面推开营改增政策指引
  • 预收账款结转收入分录
  • 抵扣旅客运输服务申报时填哪行
  • 本期应征增值税销售额是什么意思
  • 主营业务毛利率和毛利率
  • 一般纳税人抵扣进项税有时间要求吗
  • 新成立公司会计未来规划
  • mysql分页实现
  • win7 64位系统如何查看计算机名称为了应付某一操作
  • win8系统界面切换成win7
  • xp系统关机没反应怎么办
  • win8系统升级
  • Win RT 8.1 Update 3怎么提前更新安装使用?
  • thinkpade431升级内存多大好
  • jQuery展示表格点击变色、全选、删除
  • android基础教程
  • 仿真安卓
  • express app.js
  • js 堆排序
  • 税务局投诉怎么投诉
  • 高速发票查询平台官网
  • 怎么打印纳税申报单
  • 智利有什么自然景观
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设