Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >H5与Android&iOS客户端原生APP通信交互实现

H5与Android&iOS客户端原生APP通信交互实现

作者头像
德顺
发布于 2023-08-25 05:09:24
发布于 2023-08-25 05:09:24
95100
代码可运行
举报
文章被收录于专栏:前端资源前端资源
运行总次数:0
代码可运行

最近有个需求,原生 APP 使用 webView 内嵌 H5 页面,APP 未登录状态下打开 H5 页面,在页面中登录,再返回 APP 时要保持登录状态(APP 也要同步登录)。

首先写一个方法,来获取设备信息:./getDevice.js

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
/*
 * 获取设备信息
 * */
export function getDevice() {
  let ua = navigator.userAgent
  return {
    trident: ua.indexOf('Trident') > -1, //IE内核
    presto: ua.indexOf('Presto') > -1, //opera内核
    webKit: ua.indexOf('AppleWebKit') > -1, //苹果、谷歌内核
    gecko: ua.indexOf('Gecko') > -1 && ua.indexOf('KHTML') == -1,//火狐内核
    mobile: !!ua.match(/AppleWebKit.*Mobile.*/), //是否为移动终端
    iOS: !!ua.match(/\(i[^;]+;( U;)? CPua.+Mac OS X/), //ios终端
    Android: ua.indexOf('Android') > -1 || ua.indexOf('Adr') > -1, //android终端
    iPhone: ua.indexOf('iPhone') > -1 , //是否为iPhone或者QQHD浏览器
    iPad: ua.indexOf('iPad') > -1, //是否iPad
    webApp: ua.indexOf('Safari') == -1, //是否web应该程序,没有头部与底部
    weixin: ua.indexOf('MicroMessenger') > -1, //是否微信 (2015-01-22新增)
    qq: ua.match(/\sQQ/i) == " qq" //是否QQ
  }
}

然后封装一个处理与 APP 通信的方法:./appBridge.js

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import {getDevice} from './getDevice'

export function appBridge(token, url, device) {
  var app = device
  var data = {}
  if (!app) {
    app = getDevice()
  }
  if (app == "iOS" || app == "iPhone" || app == "iPad") {
    console.log('设备信息:iOS')
    /*
    * Apple 系列设备
    * name: getMessenger 发送的方法
    * data: { 发送的内容
    *   oppcToken: oppcToken
    * }
    * */
    data = {
      oppcToken: token
    }
    window.webkit.messageHandlers.getMessenger.postMessage(data);
  } else if (getDevice() == "Android") {
    /*
    * Android 设备
    * data: { 发送的内容
    *   oppcToken: oppcToken
    * }
    * responseData: 请求返回数据
    * */
    data = {
      oppcToken: token
    }
    window.WebViewJavascriptBridge.send(data, function (responseData) {
      console.log('请求结果:' + responseData)
    })
  } else if (app == "H5") {
    /*
    * 浏览器&H5
    * */
    console.log('设备信息:H5')
    if (url) {
      window.location.href = url
    }
  }
}

在需要的页面调用:./index.vue

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import { appBridge } from './appBridge'

appBridge(token, url, device)

这里我查了一下上面的两个方法:

MessageHandler

WKWebView 有一个内容交互控制器,该对象提供了通过 JSWKWebView 发送消息的途径。需要设置 MessageHandler ,我把这个功能简称为 MessageHandler

通常用于 H5 javaScript iOS 进行交互

语法:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
/*
* name: 设置 MessageHandler 的第二个参数,iOS 那边来接收
* messageBody: 发送的内容
*/
window.webkit.messageHandlers.<name>.postMessage(<messageBody>)

示例:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
window.webkit.messageHandlers.getMessenger.postMessage(data)

WebViewJavascriptBridge

针对 Android 设备,这里使用的 WebViewJavaScriptBridge 方法,用于 WKWebView & UIWebViewOCJS 交互。

示例:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
/*
* data: 发送的数据
* responseData: 请求返回的结果
*/
window.WebViewJavascriptBridge.send(data, function (responseData) {
  console.log('请求结果:' + responseData)
})

未经允许不得转载:w3h5-Web前端开发资源网 » H5与Android&iOS客户端原生APP通信交互实现

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2021-01-18),如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
APP内嵌H5页面中JS和APP的交互解决方案(可传参、可回调)
本库主要使用 WebViewJavascriptBridge 和 webkit MessageHandler进行封装。
Careteen
2022/02/14
7K0
H5 App实战进阶十五:H5 App与原生应用的交互
这篇文章系统地介绍了Nacos作为Dynamic Naming and Configuration Service,是构建云原生应用的重要工具,提供了动态服务发现、配置管理和服务管理功能。其总体架构包含命名服务、配置服务和元数据服务,三大组件协同工作,支持微服务架构。Nacos支持单机、集群和多集群模式,满足不同场景需求。服务注册与发现、配置管理和元数据管理是Nacos的核心功能,实现了服务的动态管理和配置的灵活更新。整体来看,Nacos功能全面,易于使用,是微服务架构中不可或缺的一部分
china马斯克
2024/12/05
2340
H5如何与原生App通信?
为了提高开发效率,开发人员往往会使用原生app里面嵌套前端h5页面的快速开发方式,这就要涉及到h5和原生的相互调用,互相传递数据,接下来就实践项目中的交互方式做一个简单的记录分享,废话不多说,直接上正文:
用户9253515
2021/12/17
6.1K0
H5和移动端通信
弹窗包括:alert、confirm、prompt, 和url拦截类似都在回调方法中处理
无忧366
2022/10/21
1.3K0
前端H5与安卓和ios之间通信
在一些app场景中,经常看到app里面嵌套H5页面, 安卓和ios提供一个空壳子,方法两者互相调用。上一周就是写H5页面让安卓和ios调用使用,中间传参,接受参数。通过 window.wx 对象调用一些原生 app 的功能。这个H5页面,我用的是vue来写的。用到了vue全家桶。
小周sir
2019/09/23
2.4K0
前端H5与安卓和ios之间通信
H5页面判断客户端是iOS或者Android并跳转对应链接唤起APP
每个客户端都会有自己的 UA (userAgent)标识,可以用 JavaScript 获取客户端标识。
德顺
2019/11/12
13.6K0
H5如何与IOS和安卓进行交互
写在前面 很久没更新了,真的是没时间,周末要做兼职,工作日要加班赶项目,筋疲力尽了,今天稍微好点,更新一下吧,最近用的一些东西! 问题描述 我们开发一款软件,其中涉及到一些支付的问题,这边担心IOS的App无法通过AppleStore的审核,所以中间支付的模块使用H5进行内嵌,也就是直接使用webview进行调起H5完成对应的功能, 代码 /** * @FUNCTION memberRecharge * @params NaviType是否需要显示导航栏 1 不显示 2 显示 3 会员充值(
何处锦绣不灰堆
2021/06/29
2K0
React Native和web交互
假如你的WebView 是从 react-native 里引用的话.H5 向 RN 发消息则使用window.postMessage(message) 为了减少React Native的表面积,<WebView/>将从React Native核心中删除,推荐使用
chuchur
2022/10/25
1.2K0
JS Bridge 通信原理
之前介绍了移动端开发的相关技术,这一篇主要是从 Hybrid 开发的 JS Bridge 通信讲起。
尹光耀
2022/03/22
4.9K0
JS Bridge 通信原理
Objective-c与js交互专题
在写 JavaScript 的时候,可以使用一个叫做 window 的对象,像是我们想要从现在的网页跳到另外一个网页的时候,就会去修改 window.kk 的位置;在我们的 Objective-C 程序码中,如果我们可以取得指定的 WebView 对象,也就可以拿到这个出现在 JavaScript 中的 window 对象,也就是 [webView windowScriptObject]。
江中散人_Jun
2022/03/08
1.8K0
Android 中使用WebViewJavaScriptBridge进行H5和原生的交互
第二种 使用第三方框架WebViewJavascriptBridge 这也是我今天要分享的部分
乱码三千
2021/07/29
4K0
用WebViewJavascriptBridge进行JS和app进行交互
做项目的时候有一个业务是需要前端web给安卓发送指令,进行拍照个读取身份证的操作,这个时候是需要用户进入页面的时候直接进行的操作,那么这个时候我需要做的是告诉安卓什么时候调取什么样子的硬件,那么我们难题就是js和安卓怎么进行通信,有这样的需求也是很少见的,但是既然存在这样的需求还是需要进行解决的,那么我参考的是这个地址的方案: JsBridge
何处锦绣不灰堆
2020/05/28
3.3K0
H5在app端导出
// 导出pdf exportPdf() { // let img = this.myEcharts1.getDataURL(); let params = { ...this.query, coursename: this.courseName, rname: this.className, lines: this.templateData1, segments: this.template
用户4344670
2020/05/26
7320
非微信浏览器调取人脸核身saas微信H5服务报错优化问题
人脸核身微信普通H5、微信原始H5等都基于微信浏览器的功能,外部浏览器调用会报错,用户在发起核验前,需先校验浏览器类型,非微信浏览器不可调用人脸核身的服务
HI hero
2021/12/14
8190
模拟mui框架编码
//调用方法 /* 1、tm.os.ios/tm.os.android/tm.os.versions().webKit //表示安卓设备/ios设备/webKit内核 */ var tm = (function(document) { "use strict"; var readyRE = /complete|loaded|interactive/, //complete 可返回浏览器是否已完成对图像的加载。 idSelectorRE = /^#([\w-]+)$/,
White feathe
2021/12/08
1.3K0
原 九、客户端检测
作者:汪娇娇 时间:2017年11月26日 检测Web客户端的手段很多,不到万不得已,就不要使用客户端版检测。 一言以蔽之,先设计最通用的方案,然后再使用特定于浏览器的技术增强该方案。 一、能力检测 能力检测的目标不是识别特定的浏览器,而是识别浏览器的能力。 先检测达成目的的最常用的特性; 必须测试实际要用到的特性。 错误例子: function getWindowWidth(){ if ( document.all ){ //假设是IE,但实际上能支持document.all的浏览器不止IE,比
jojo
2018/05/03
1.5K0
JavaScript判断设备类型的实现
可以通过 JavaScript 来实现判断当前的设备类型:navigator 是 JavaScript 中的一个独立的对象,用于提供用户所使用的浏览器以及操作系统等信息,以 navigator 对象属性的形式来提供。所有浏览器都支持该对象。
前端老道
2022/03/29
3.7K0
WebViewJavascriptBridge源码探究--看OC和JS交互过程
      今天把实现OC代码和JS代码交互的第三方库WebViewJavascriptBridge源码看了下,oc调用js方法我们是知道的,系统提供了stringByEvaluatingJavaScriptFromString函数
tandaxia
2018/09/27
3.4K0
WebViewJavascriptBridge源码探究--看OC和JS交互过程
WebViewJavascriptBridge
Web 页面中的 JS 与 iOS Native 如何交互?JS 和 iOS Native 就好比两块没有交集的大陆,如果想要使它们相互通信就必须要建立一座“桥梁”。
全栈程序员站长
2022/11/19
1.3K0
WebViewJavascriptBridge
H5 项目实用
如果你关闭自动识别后 ,又希望某些电话号码能够链接到 iPhone 的拨号功能 ,那么可以通过这样来声明电话链接 ,
White feathe
2021/12/08
5.3K0
相关推荐
APP内嵌H5页面中JS和APP的交互解决方案(可传参、可回调)
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验