Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >H5如何与IOS和安卓进行交互

H5如何与IOS和安卓进行交互

作者头像
何处锦绣不灰堆
发布于 2021-06-29 03:16:43
发布于 2021-06-29 03:16:43
2.1K00
代码可运行
举报
文章被收录于专栏:农历七月廿一农历七月廿一
运行总次数:0
代码可运行

写在前面

很久没更新了,真的是没时间,周末要做兼职,工作日要加班赶项目,筋疲力尽了,今天稍微好点,更新一下吧,最近用的一些东西!

问题描述

我们开发一款软件,其中涉及到一些支付的问题,这边担心IOS的App无法通过AppleStore的审核,所以中间支付的模块使用H5进行内嵌,也就是直接使用webview进行调起H5完成对应的功能,

代码

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
/**
 * @FUNCTION memberRecharge
 * @params NaviType是否需要显示导航栏 1 不显示 2 显示 3 会员充值(比较特殊的一个) 4 白色有背景(禁掉系统的导航栏,使用自己的导航栏)
 * @params NaviIntro 导航栏显示的文字
 * @params NaviColor 导航栏的颜色
 * @params ArchiveColor 文案的颜色
 * @desc   本地调试的时候可以关闭当前代码的调用 因为本地的时候是没有该方法的,浏览器会直接报错!
 */
function NaviInfo(arg) {
	console.log(arg)
	try {
		window.ios.memberRecharge(arg);
	} catch (error) {
		try{
			window.webkit.messageHandlers.memberRecharge.postMessage(arg);
		}catch(e){
			console.log("can not find Function of IOS" + e)
		}
	}
}
export default NaviInfo

PS:简单的解释一下,memberRecharge是IOS定义的方法名,H5调用的时候我这里为什么写了两个呢?同一个方法,使用两种不同的方式进行调用,原因是IOS8版本之前他们是不支持最新的写法的,所以为了兼容IOS8版本之前的手机,要写两种调用的方法,这里是一个公共的方法,我们直接进行系统方法进行判断是安卓还是IOS,直接调这个方法就可以了,具体参数怎么定义,这个不一定,看H5和IOS怎么约定的!上面的这个全局方案是为了解决我们自定义头部的问题,当然用法是一样的!

配置为全局方法

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import Vue from 'vue'
import App from './App'
import http from './static/js/request.js'
import naviinfo from './static/js/commonNavi.js'


Vue.config.productionTip = false
App.mpType = 'app'

Vue.prototype.$http = http
Vue.prototype.$naviinfo = naviinfo  //全局的交互方法

const app = new Vue({
    ...App
})
app.$mount()

页面调用

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
/**
			 * @FUNCTION memberRecharge
			 * @params NaviType是否需要显示导航栏 1 不显示 2 显示 3 会员充值(比较特殊的一个) 4 白色有背景(禁掉系统的导航栏,使用自己的导航栏)
			 * @params NaviIntro 导航栏显示的文字
			 * @params NaviColor 导航栏的颜色
			 * @params ArchiveColor 文案的颜色
			 */
			let params_obj = {
				NaviType: "3",
				NaviIntro: "会员充值",
				NaviColor: "",
				ArchiveColor: ""
			}
			this.$naviinfo(JSON.stringify(params_obj))

判断当前终端

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
if (this.ish5) {
					history.go(-1);
				} else if (this.ua.indexOf('Android') > -1 || this.ua.indexOf('Adr') > -1) { // 安卓
					jsInAndroid.goback()
					// window.android.submitData('goback',null);
				} else if (this.ua.match(/MicroMessenger/i) == 'micromessenger') { // 微信
					console.log("微信环境下")
					//}else {
				} else if (!!this.ua.match(/\(i[^;]+;( U;)? CPU.+Mac OS X/)) { // IOS
					window.webkit.messageHandlers.goback.postMessage({
						func: 'goback',
						shareLink: null
					});
				}

PS:第一个ish5 是一个死的值,我是通过options也就是页面的url上面获取的,这个是我们约定好的,h5的时候是直接调用系统的返回就可以了,否则就直接调用对应终端的返回

ios如何调用h5的方法

以上的都是H5进行调用ios和安卓的一些问题,他们使用H5内嵌的时候,总会有一些事需要他们调用我们的方法的时候,这个时候是有一些坑的,比如我们使用了框架进行开发的页面,ios和安卓调用js方法的前提是你的方法是挂载在window上的,如果没有挂载,就调不起来,所以下面以react框架为例,说一下怎么讲我们方法挂载到window上!

react 将函数挂载到window
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
constructor(props) {
    super(props);
    this.topicShare = this.topicShare.bind(this);
  }
componentWillUpdate() {
    //将函数挂载到windows上进行IOS和安卓交互
    window.topicShare = this.topicShare;
  } 
 /**
   * @function  topicShare 话题分享功能
   */
topicShare() {
    const { topicDetail, isAndroid } = this.state;
    try {
      if (isAndroid) {
        window.jsInAndroid.topicShare(topicDetail.TopicId);
      } else {
        window.ios.topicShare(topicDetail.TopicId);
      }
    } catch (error) {
      console.log(error);
    }
  }

PS:我们需要将自己的函数挂载到构造器上,然后在页面加载或者更新的或者更新结束的地方进行挂载window就可以!

vue 将函数挂载到window
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
mounted() {
     window['funcDemo'] = () => {
        this.goDemo()
     }
}
methods: {
    goDemo() {
      //nothing
    }
 }

PS: 如何验证是不是已经挂载到window上,直接将页面打开调试模式,进行window控制台打印,有该函数就是挂载成功了!

总结

个人建议还是独立端完成的就直接独立完成,不要使用内嵌的,虽然没什么问题,但是数据交互的还是比较恶心的!先写到这里吧!

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

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

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

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

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
Spring Boot 3.0 可观测性增强
来源:Java架构日记 前言 Spring 可观察性团队一直致力于为 Spring 应用程序添加可观察性支持,该特性将在 Spring Framework 6 和 Spring Boot 3 中更加简单、易用!通过可观测性,能更好的了解系统内部运行状态。metrics, logging 和分布式 tracing 之间的相互连通能更好的推断系统的运行状态,以便调试应用程序中的异常、延迟和性能。  即将发布的 Spring Boot3.0.0-RC1 将包含大量的自动配置,用于使用 Micrometer 改进
程序猿DD
2023/04/04
2.4K0
Spring Boot 3.0 可观测性增强
Spring-AOP实践 - 统计访问时间
公司的项目有的页面超级慢,20s以上,不知道用户会不会疯掉,于是老大说这个页面要性能优化。于是,首先就要搞清楚究竟是哪一步耗时太多。 我采用spring aop来统计各个阶段的用时,其中计时器工具为StopWatch。 其中,遇到的问题: 1.少包aspectjweaver 添加依赖后才可以使用@Aspect 2.环绕通知加入多个point 刚开使用&&连接多个point,傻傻的看不到调用,忽然看到要用||才对 3.监听时间工具StopWatch每次只能启动一个,一定要关闭后才能启动下一个。 而我想要测试c
Ryan-Miao
2018/03/13
2.2K0
Spring-AOP实践 - 统计访问时间
SpringCloud(三)-应用间通信(慕课网廖师兄SpringCloud微服务实战)
1. RestTemplate直连消费服务 核心依赖 <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <!--HttpClient--> <dependency> <groupId>org.ap
Meet相识
2018/09/12
1.8K0
SpringCloud(三)-应用间通信(慕课网廖师兄SpringCloud微服务实战)
Spring之BeanFactoryPostProcessor(bean工厂后置处理器)
Java微观世界
2025/01/21
1250
Spring Cloud netflix ribbon源码分析
依赖 <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-ribbon</artifactId> <version>2.2.3.RELEASE</version> </dependency> 配置 假设订单服务有两台,分别分8060、8061的两个服务 micro-order-service.ribbon.listOfServers=\
用户1215919
2020/10/26
4890
Spring Cloud netflix ribbon源码分析
第二十七章:SpringBoot使用ApplicationEvent&Listener完成业务解耦
ApplicationEvent以及Listener是Spring为我们提供的一个事件监听、订阅的实现,内部实现原理是观察者设计模式,设计初衷也是为了系统业务逻辑之间的解耦,提高可扩展性以及可维护性。事件发布者并不需要考虑谁去监听,监听具体的实现内容是什么,发布者的工作只是为了发布事件而已。 我们平时日常生活中也是经常会有这种情况存在,如:我们在平时拔河比赛中,裁判员给我们吹响了开始的信号,也就是给我们发布了一个开始的事件,而拔河双方人员都在监听着这个事件,一旦事件发布后双方人员就开始往自己方使劲。而裁判
恒宇少年
2018/06/27
1.1K0
Spring Batch任务调度
在前面的例子中,我们配置的任务都是在项目启动的时候自动运行,我们也可以通过JobLauncher或者JobOperator手动控制任务的运行时机,这节记录下它们的用法。
技术从心
2020/04/21
2.8K0
Spring Batch任务调度
Spring Cloud构建微服务架构:分布式服务跟踪(跟踪原理)
通过上一篇《分布式服务跟踪(入门)》的例子,我们已经通过Spring Cloud Sleuth往微服务应用中添加了实现分布式跟踪具备的基本要素。下面通过本文来详细说说实现分布式服务跟踪的一些要点。 分
程序猿DD
2018/03/21
1.1K0
Spring Cloud构建微服务架构:分布式服务跟踪(跟踪原理)
Spring Boot:处理跨域问题
同源策略(Same origin policy)是一种约定,它是浏览器最核心也最基本的安全功能,如果缺少了同源策略,则浏览器的正常功能可能都会受到影响。可以说Web是构建在同源策略基础之上的,浏览器只是针对同源策略的一种实现。
HLee
2021/07/03
2.1K0
Spring Boot:处理跨域问题
Spring认证指南:了解如何使用 Spring 的 RESTful Web 服务
原标题:Spring认证中国教育管理中心-了解如何使用 Spring 的 RESTful Web 服务(Spring中国教育管理中心)
IT胶囊
2022/01/25
9520
Spring认证指南:了解如何使用 Spring 的 RESTful Web 服务
统一认证中心 Oauth2 认证坑
在前面文章 Springcloud Oauth2 HA篇 中,实现了基于 Oauth2 的统一认证的认证与授权。在配置中,我们可以看到:
程序猿Damon
2021/11/12
1.4K0
Hazelcast4.2.2 在springboot下的使用
Hazelcast是一款由Hazelcast开发的基于jvm环境的为各种应用提供分布式集群服务的分布式缓存解决方案。可以嵌入到java、c++、.net等开发的产品中使用。 其主要功能有:
冬天里的懒猫
2021/11/02
1.1K0
Spring Cloud Sleuth服务链路追踪
创造一些追踪标识符(tracingId,spanId,parentId),最终将一个request的流程树构建出来,各业务系统在彼此调用时,将特定的跟踪消息传递至zipkin,zipkin在收集到跟踪信息后将其聚合处理、存储、展示等,用户可通过web UI方便获得网络延迟、调用链路、系统依赖等等。
chengcheng222e
2021/11/04
5740
Spring之BeanPostProcessor(bean后置处理器)
Java微观世界
2025/01/21
1320
【RabbitMQ】消息可靠性投递
什么是消息的可靠性投递?即保证消息百分百发送到消息队列中去,消息发送端需要接受到mq服务端接受到消息的确认应答。除此之外还应有完善的消息补偿机制,发送失败的消息可以再感知并二次处理。 生产者到交换机通过confirmCallback,交换机到队列通过returnCallback
后端码匠
2023/11/12
3500
Spring认证指南|了解如何创建异步服务方法。
本指南将指导您创建对 GitHub 的异步查询。重点是异步部分,这是扩展服务时经常使用的功能。
IT胶囊
2022/04/02
7000
Spring认证指南|了解如何创建异步服务方法。
springboot整合aop实现请求参数的输出
Aop即面向切面编程,这次分享的是借助aop实现记录外部请求参数输出,这篇文章整理完后面还会输出20篇左右文章就要真正结束基础性内容的输出了,打算书写100篇左右的基础性文章,之前写的文章现在看来有点偏业务逻辑了加上日常的业务逻辑导致之前用的东西慢慢也忘记了很多,后面打算输出一些其它的内容,不然总是感觉有点原地踏步的意思。
码农王同学
2020/03/25
7840
Spring中的异步请求、异步调用及demo测试
背景:做项目过程中,一些耗时长的任务可能需要在后台线程池中运行;典型的如发送邮件等,由于需要调用外部的接口来进行实际的发送操作,如果客户端在提交发送请求后一直等待服务器端发送成功后再返回,就会长时间的占用服务器的一个连接;当这类请求过多时,服务器连接数会不够用,新的连接请求可能无法得到满足,从而导致客户端连接失败。因此如果 request(/url) 经过dispatcherServlet 找到对应的 controller中请求方法后,先去释放request 线程资源,通过异步调用的方式去处理contorller方法 中接下来要执行代码,当异步线程 执行完后,controller 方法返回处理的值,这样就不会因为 大量请求,服务器没法处理连接问题。
猎户星座1
2020/07/20
2.8K0
Spring Cloud Sleuth 和 Zipkin 进行分布式跟踪使用指南
对于一个做所有事情的大型应用程序(我们通常将其称为单体应用程序),跟踪应用程序内的传入请求很容易。我们可以跟踪日志,然后弄清楚请求是如何处理的。除了应用程序日志本身之外,我们无需查看其他任何内容。
用户7353950
2022/06/23
5760
Spring Cloud Sleuth 和 Zipkin 进行分布式跟踪使用指南
【原创】003 | 搭上SpringBoot实战专车系列三:应用启动方式
该趟专车是开往 SpringBoot 应用启动方式的实战专车,主要讲解通过多种方式来启动 SpringBoot 应用
java进阶架构师
2021/02/22
6870
【原创】003 | 搭上SpringBoot实战专车系列三:应用启动方式
推荐阅读
相关推荐
Spring Boot 3.0 可观测性增强
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验