谷歌SEO

谷歌SEO

Products

当前位置:首页 > 谷歌SEO >

APP原生与H5互调Bridge技术如何实现?

96SEO 2026-06-07 04:24 0


说实话,APP原生与H5互调Bridge技术实现起来还是有点复杂的,哈哈,不过咱就是说弄懂了就还好啦。

原生功Neng实现

原生功Neng通过插件的形式实现,要新增一个插件只需要: 第一步新建一个继承'YNPlugin'基础插件类的对象,然后在对象里实现方法-exec:arg; 第二步在YNBridgePlugPlist.plist文件里添加以下形式的代码

APP原生与H5互调Bridge技术如何实现?

//注册基础插件 ; //注册Yi有插件 NSString* plistPath = pathForResource:@"applyPlugPlist" ofType:@"plist"]; NSArray *modules = ; for { Class class = NSClassFromString; if { init] namespace:obj]; } }

那,那个那个,js端的第一个信号来自wk的h5输入框拦截回调方法,参数prompt里携带js端要调用的api名字,参数值为字符串:_ynbridge=namespace1.api_1,_ynbridge=为YNBridge框架调用的标记,Ru果不是以这个标记开头则不Zuo任何处理,只弹出正常的系统弹框。

原生调用js插件功Neng

调用命名为'asynObj'的插件里的一个定时器api:startTimer

WebSettings webSettings = wv.getSettings;webSettings.setJavaScriptEnabled;wv.addJavascriptInterface,"_anbridge");class JsApp{ public JsApp{} @JavascriptInterface public void call{ }}

原生iOS端

api调用完毕,需要给js回传值时调用wk的- evaluateJavaScript:javaScriptString completionHandler:)completionHandler方法 执行这段js代码:window.nativeCallBack,nativeCallBack是js端接收原生端回传值的方法,接收四个参数,即为YNJsCallInfo对象的callBack回调参数。

YN.register); YN.register); //告诉原生js初始化了调原生初始化api if { YN.call; }

register方法内部实现同原生注册插件的形式,将插件和对应的命名空间添加进window.nativeNamespaceInterfaces集合。

JS端实现

在上面实现的基础上,js端判断window._anbridge为true则为与Android通信,执行代码:_anbridge.call,Ru果判断window._ynwk为true则为与iOS端通信,执行代码:prompt,js端代码实现:

BOOL = )objc_msgSend; BOOL ret=action; if { return YES; } return ;

exec:方法的形参是YNJsCallInfo对象,该对象携带的参数: action:api名,或叫动作标识字符串,各业务通过该字段判断该执行什么功Neng,Ru果插件内没有处理该api则返回调用失败的错误值false反之返回true。 callId:api调用事件id或叫回传值队列id,当给js回传值时需要带上该值返回去。 data:js给过来的参数值。 callBack:block变量,结果回调入口,回传值时需要指定四个参数status、value、callId、complete,参数用处后面讲解。

调起一个js端的插件功Neng,执行wk对象的方法-callHandler:server action:action arguments:args completionHandler:completionHandler;该方法逻辑同js call native时调用的YN.call方法,通过维护一个callid服务队列来处理结果回传。

一些全局约定

js调原生和原生调js的参数传递必须是json字符串格式。

带回调结果带参数的调用方式:

原生Android端向浏览器注入供js调用的对象‘_anbridge’,对象里实现‘call’方法,并且方法需要加上@JavascriptInterface注解,代码示例:

YN.callNative { if { document.getElementById.innerText = value }else{ document.getElementById.innerText = value } },function { alert })

执行YN.call方法,实现调起原生和结果回调队列的维护,Ru果注入过安卓js对象‘window._anbridge’则执行_anbridge.call调起安卓端,Ru果注入过‘window._ynwk’值为true则执行prompt调起iOS端,Ru果需要有回传值,则arg对象将给callId字段赋一个唯一值,并且在window.nativeCallBackIds缓存集合里新增callId值,值即为回调函数。

调用命名为''的插件里的一个定时器api:jsCallTimer

插件回传值结果和api调用结果通过调用原生的YNBase.returnValue这个api实现,即执行YN.call; value是参数对象,包含data、callId、complete、status四个字段,含义和用途同原生回调那里。

所有这些,说实话,实现起来挺不容易,你懂的。

其他调用方式

不带回调结果带参数的调用方式:

YN.callNative

不带回调结果不带参数的调用方式:

接收原生端第一个信号由nativeCallJs = function方法接收,参数: callId:api调用事件id或叫回传值队列id。 service:js api对应的命名空间名。 action:api名。 actionArgs:原生端的参数。 方法内部实现同原生插件调用,也是找到插件并执行插件方法exec。

var natiValue = '';if natiValue = anbridge.call;//调用android对象的callelse if natiValue = prompt;命名空间管理API

所有提供的APIdou需要通过命名空间进行管理,比如API1在'namespace1'这个命名空间下的类里面那么JS端访问API1的方式就是'namespace1.API1'

]];

WKWebView配置注入标记

_ynwK=true注入到浏览器中,用于JS识别当前环境是否为iOS WKWebView 环境,从而决定使用何种方式与native进行通信比如使用 prompt 方法

/// 初始化注入JS标记 WKUserScript *script = initWithSource : @" window ._ ynwk = true ; " injectionTime : WKUserScriptInjectionTimeAtDocumentStart forMainFrameOnly : YES ]; ;

实现原理

实现JS唤起native的关键在于WKWebView 的 H5 输入框拦截回调 - webView : webView runJavaScriptTextInputPanelWithPrompt : prompt defaultText : defaultText initiatedByFrame : frame completionHandler :) completionHandler ;当 JS 执行 prompt 时该方法被触发

API 调用必须采用命名空间的方式即 namespace . apixxx 的形式。子类必须重写 - exec : arg 工厂放来处理不同API请求,并Zui终将数据通过 callBack 返回给 JS 端。

所有这些规范和约定,dou是为了让整个 Bridge 技术geng加完善。你说是不是这样?哈哈! 通过这种方式,我们Ke以geng好地实现 APP 原生与 H5 的互调。害,不容易啊!但咱就是说有了这些基础,实现起来就没那么难了对吧?说实话,这里面的细节还是有hen多讲究,但只要你理解了原理,实现起来也就顺理成章了。你懂的!加油!


标签: 原理

SEO优化服务概述

作为专业的SEO优化服务提供商,我们致力于通过科学、系统的搜索引擎优化策略,帮助企业在百度、Google等搜索引擎中获得更高的排名和流量。我们的服务涵盖网站结构优化、内容优化、技术SEO和链接建设等多个维度。

百度官方合作伙伴 白帽SEO技术 数据驱动优化 效果长期稳定

SEO优化核心服务

网站技术SEO

  • 网站结构优化 - 提升网站爬虫可访问性
  • 页面速度优化 - 缩短加载时间,提高用户体验
  • 移动端适配 - 确保移动设备友好性
  • HTTPS安全协议 - 提升网站安全性与信任度
  • 结构化数据标记 - 增强搜索结果显示效果

内容优化服务

  • 关键词研究与布局 - 精准定位目标关键词
  • 高质量内容创作 - 原创、专业、有价值的内容
  • Meta标签优化 - 提升点击率和相关性
  • 内容更新策略 - 保持网站内容新鲜度
  • 多媒体内容优化 - 图片、视频SEO优化

外链建设策略

  • 高质量外链获取 - 权威网站链接建设
  • 品牌提及监控 - 追踪品牌在线曝光
  • 行业目录提交 - 提升网站基础权威
  • 社交媒体整合 - 增强内容传播力
  • 链接质量分析 - 避免低质量链接风险

SEO服务方案对比

服务项目 基础套餐 标准套餐 高级定制
关键词优化数量 10-20个核心词 30-50个核心词+长尾词 80-150个全方位覆盖
内容优化 基础页面优化 全站内容优化+每月5篇原创 个性化内容策略+每月15篇原创
技术SEO 基本技术检查 全面技术优化+移动适配 深度技术重构+性能优化
外链建设 每月5-10条 每月20-30条高质量外链 每月50+条多渠道外链
数据报告 月度基础报告 双周详细报告+分析 每周深度报告+策略调整
效果保障 3-6个月见效 2-4个月见效 1-3个月快速见效

SEO优化实施流程

我们的SEO优化服务遵循科学严谨的流程,确保每一步都基于数据分析和行业最佳实践:

1

网站诊断分析

全面检测网站技术问题、内容质量、竞争对手情况,制定个性化优化方案。

2

关键词策略制定

基于用户搜索意图和商业目标,制定全面的关键词矩阵和布局策略。

3

技术优化实施

解决网站技术问题,优化网站结构,提升页面速度和移动端体验。

4

内容优化建设

创作高质量原创内容,优化现有页面,建立内容更新机制。

5

外链建设推广

获取高质量外部链接,建立品牌在线影响力,提升网站权威度。

6

数据监控调整

持续监控排名、流量和转化数据,根据效果调整优化策略。

SEO优化常见问题

SEO优化一般需要多长时间才能看到效果?
SEO是一个渐进的过程,通常需要3-6个月才能看到明显效果。具体时间取决于网站现状、竞争程度和优化强度。我们的标准套餐一般在2-4个月内开始显现效果,高级定制方案可能在1-3个月内就能看到初步成果。
你们使用白帽SEO技术还是黑帽技术?
我们始终坚持使用白帽SEO技术,遵循搜索引擎的官方指南。我们的优化策略注重长期效果和可持续性,绝不使用任何可能导致网站被惩罚的违规手段。作为百度官方合作伙伴,我们承诺提供安全、合规的SEO服务。
SEO优化后效果能持续多久?
通过我们的白帽SEO策略获得的排名和流量具有长期稳定性。一旦网站达到理想排名,只需适当的维护和更新,效果可以持续数年。我们提供优化后维护服务,确保您的网站长期保持竞争优势。
你们提供SEO优化效果保障吗?
我们提供基于数据的SEO效果承诺。根据服务套餐不同,我们承诺在约定时间内将核心关键词优化到指定排名位置,或实现约定的自然流量增长目标。所有承诺都会在服务合同中明确约定,并提供详细的KPI衡量标准。

SEO优化效果数据

基于我们服务的客户数据统计,平均优化效果如下:

+85%
自然搜索流量提升
+120%
关键词排名数量
+60%
网站转化率提升
3-6月
平均见效周期

行业案例 - 制造业

  • 优化前:日均自然流量120,核心词无排名
  • 优化6个月后:日均自然流量950,15个核心词首页排名
  • 效果提升:流量增长692%,询盘量增加320%

行业案例 - 电商

  • 优化前:月均自然订单50单,转化率1.2%
  • 优化4个月后:月均自然订单210单,转化率2.8%
  • 效果提升:订单增长320%,转化率提升133%

行业案例 - 教育

  • 优化前:月均咨询量35个,主要依赖付费广告
  • 优化5个月后:月均咨询量180个,自然流量占比65%
  • 效果提升:咨询量增长414%,营销成本降低57%

为什么选择我们的SEO服务

专业团队

  • 10年以上SEO经验专家带队
  • 百度、Google认证工程师
  • 内容创作、技术开发、数据分析多领域团队
  • 持续培训保持技术领先

数据驱动

  • 自主研发SEO分析工具
  • 实时排名监控系统
  • 竞争对手深度分析
  • 效果可视化报告

透明合作

  • 清晰的服务内容和价格
  • 定期进展汇报和沟通
  • 效果数据实时可查
  • 灵活的合同条款

我们的SEO服务理念

我们坚信,真正的SEO优化不仅仅是追求排名,而是通过提供优质内容、优化用户体验、建立网站权威,最终实现可持续的业务增长。我们的目标是与客户建立长期合作关系,共同成长。

提交需求或反馈

Demand feedback