h5: 打开手机上的某个app

这篇具有很好参考价值的文章主要介绍了h5: 打开手机上的某个app。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1、android端:直接通过URL Scheme方式打开。
2、ios端(2种):(1)使用URL Scheme方式打开。(2)使用Universal link方式打开。
3、Universal link方式使用注意事项:(1)需让原生app开发人员配置universal link给到前端;(2)只有ios9版本以上(包含ios9)的设备才支持universal link; (3)需让运维人员配置univeral link指定的h5页面路径(访问404时(微信或企微打开,手机没有安装app),定向到h5的落地页)。
4、微信或企微微信中:都不支持URL Scheme和Universal link打开 APP,需使用微信引导页,提示在浏览器打开的方式。
5、schemaUrl:让原生app的android和ios开发人员配置,给到前端URL即可。

一、新建工具函数文件utils.js如下:

// android终端
export const isAndroid = u.indexOf('Android') > -1 || u.indexOf('Adr') > -1
// ios终端
export const isIos = !!u.match(/\(i[^;]+;( U;)? CPU.+Mac OS X/) 
// 微信
export function isWeixin() {
  return navigator.userAgent.toLowerCase().indexOf('micromessenger') !== -1
}

/**
 * 获取IOS的版本号
 */
const getIosVersion = ()  => {
    const ua = navigator.userAgent.toLowerCase();
    const version = ua.match(/cpu iphone os (.*?) like mac os/);
    const finalVersionStr = version && version[1].replace(/_/g,".")
    return finalVersionStr
}

/**
 * 判断IOS设备版本号,是否大于ios9
 */
const isGreatOrSameIos9 = () => {
    const currentVersion = getIosVersion()
    const versionList = currentVersion.split('.')
    return Number(versionList[0]) >= 9
}

/**
 * 打开IOS的商品详情的universal link
 */
const openIosGoodDetailUniversalLink = (paramsStr) => {
    let ele = document.createElement('a')
    ele.style.display = 'none'
    ele.href = 'https://www.xxxx.com.cn/open/xxxx?action_type=1024&' + paramsStr  // ios的universal link
    document.body.appendChild(ele)
    ele.click()
}

/**
 * h5打开手机上的app
 * @param { Object } that 页面实例
 * @param { String } propName 控制微信浏览器(微信、企业微信)引导页显示的变量
 * @param { String } paramsStr 打开APP内某个页面的业务传参
 * @Note 1、ios的univeral link在微信或企业微信上,即使安装了app,也不会直接跳到 APP, 而是显示h5页面。
 * @Note 2、ios的itunes下载链接:在微信和企业微信中都无法显示页面, 加载不了。
 */
export const handleH5InvokeApp = (that, propName = 'showWeiXinGuide', paramsStr) => {
    // 微信 或 企微中: 需要在浏览器中打开
    try {
        if(isWeixin()) {
            that[propName] = true
        } else if (isAndroid || isIos) {
            const schemaUrl = 'xxxx://action?action_type=1024&' + paramsStr
            const downloadMarketUrl = isAndroid ? 'https://www.xxx.com/xxx' : 'https://itunes.apple.com/us/app/xxx/xxx?l=zh&ls=1&mt=x'
            let iframeEle = null
            let timer = setTimeout(function(){
                document.hasFocus() && (window.location.href = downloadMarketUrl)
            }, 3000)
            if (isIos) {
                // ios9以上(包含ios9): 使用univeral link方式
                if (isGreatOrSameIos9()) {
                    clearTimeout(timer)
                    openIosGoodDetailUniversalLink(paramsStr)
                    return
                } else {
                    iframeEle = document.createElement('iframe')
                    iframeEle.src = schemaUrl
                    iframeEle.style.display = 'none'
                    document.body.appendChild(iframeEle)
                }
                // ios 中无法触发 visibilitychange 事件,所以需要 pagehide 来做兼容
                window.addEventListener('pagehide', function(event) {
                    clearTimeout(timer)
                })
            } else {
                window.location.href = schemaUrl
            }
            // 各种浏览器兼容
            let hidden, visibilityChange;
            if (typeof document.hidden !== "undefined") {
                hidden = "hidden";
                visibilityChange = "visibilitychange";
            } else if (typeof document.mozHidden !== "undefined") {
                hidden = "mozHidden";
                visibilityChange = "mozvisibilitychange";
            } else if (typeof document.msHidden !== "undefined") {
                hidden = "msHidden";
                visibilityChange = "msvisibilitychange";
            } else if (typeof document.webkitHidden !== "undefined") {
                hidden = "webkitHidden";
                visibilityChange = "webkitvisibilitychange";
            } 
            // 安卓: 可以直接使用 visibilitychange 来判断标签页展示、还是隐藏
            document.addEventListener(visibilityChange, function() {
                 if(document.hidden) {
                    clearTimeout(timer)
                 }
            }, false);
        } else {
            alert('只能在手机端浏览器打开') // 部分手机端浏览器可设置为Web打开
        }
    } catch (e) {
        console.log('h5唤起app失败', e)
    }
}

二、微信或企微环境中的引导页组件open-in-browser-guide.vue(使用uniapp-h5语法):

<template>
    <view class="guide-container">
        <u-mask :show="show" @click="handleClose">
            <view class="main">
                <view class="content">
                    <text>步骤一、点击右上角的三个点</text>
                    <text>步骤二、选择在浏览器中打开</text>
                    <u-image width="166rpx" height="257rpx" :src="src" class="image-wrap"></u-image>
                </view>
            </view>
        </u-mask>
    </view>
</template>

<script>
    export default {
        props: {
            show: {
                type: Boolean,
                default: false
            }
        },
        data() {
            return {
                // 箭头图片(图片资源在博客最下方)
                src:  require('../../static/imgs/guide-arrow.png'), 
            };
        },
        methods: {
            handleClose() {
                this.$emit('update:show', false)
            }
        }
    }
</script>

<style lang="scss" scoped>
    .guide-container {
        .main {
            display: flex;
            justify-content: center;
            height: 100%;
            .content {
                display: flex;
                flex-direction: column;
                align-items:center;
                justify-content: center;
                width: 80%;
                font-size: 32rpx;
                line-height: 2;
                margin: -80rpx auto 0;
                color: #fff;
            }
            .image-wrap {
                border-style: none;
                position: absolute;
                transform: rotateZ(246deg);
                top: 20%;
                right: 100rpx;
            }
        }
    }
</style>
h5:  打开手机上的某个app

guide-arrow.png

参考链接:

  • 一篇文章了解H5打开APP的诸多方案:https://mp.weixin.qq.com/s?__biz=MzI2OTQ3NDU1MA==&mid=2247484368&idx=1&sn=b232115efd8107f622854370d218273b&chksm=eade8c49dda9055f6da7e0d14805e88f06649280f2649f92b13870ca3104b9361a10bc72a4da&mpshare=1&scene=1&srcid=0217QAbw6zMuzrvGY1It6In5&sharer_sharetime=1676610130340&sharer_shareid=f2f33c323565b5c8acdb7a31574d6c5b&version=4.1.0.6011&platform=win#rd

  • 关于URL Schema:https://www.jianshu.com/p/5bf51eb5322a?utm_campaign=maleskine&utm_content=note&utm_medium=seo_notes&utm_source=recommendation

  • H5如何实现唤起APP(如唤起知乎):https://blog.csdn.net/qq_41960279/article/details/124817190文章来源地址https://www.toymoban.com/news/detail-492040.html

到了这里,关于h5: 打开手机上的某个app的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 手机上的python怎么运行,python在手机上怎么运行

    大家好,小编来为大家解答以下问题,python程序如何在手机端运行,python程序如何在手机上运行,今天让我们一起来看看吧! Source code download: 本文相关源码 大家好,给大家分享一下python写的程序怎么在手机上运行,很多人还不知道这一点。下面详细解释一下熟练掌握Python就

    2024年01月16日
    浏览(59)
  • iOS和Android手机浏览器链接打开app store或应用市场下载软件

    1.Android主流手机跳转链接 2.判断手机类型 3.iOS跳转app store

    2024年02月11日
    浏览(100)
  • 如何生成支付宝小程序链接,点击直接打开并进入某个页面

    来到CSDN社区已经很长时间了,经常看大家在这里分享的知识文章,受益匪浅。今天刚好在公司写项目踩到了一个小坑就想着记录下来,希望能够帮助到大家。 业务需求场景 :商城分销,分销人点击分享按钮即可生成某个商品的分享链接,用户点击链接直接打开支付宝小程序

    2024年02月09日
    浏览(46)
  • Android Studio制作手机App:通过手机蓝牙(Bluetooth)与STM32上的低功耗蓝牙(HC-42)连接通信,实现手机端对单片机的控制。

    背景: 本文的内容是针对单片机蓝牙模块(HC-42)开发的手机App。在这之前,我想先声明一点,手机与手机间的蓝牙连接方式”与“手机与HC间的蓝牙连接方式”是不一样的。原因就是手机搭配的是“经典蓝牙”模块,HC等蓝牙属于“低功耗蓝牙”模块。(二者的区别想了解的

    2024年02月04日
    浏览(55)
  • iOS和Android手机浏览器链接打开app store或应用市场下载软件讲解

    当开发一个app出来后,通过分享引流用户去打开/下载该app软件,不同手机下载的地方不一样,比如:ios需要到苹果商店去下载,Android手机需要到各个不同的应用商店去下载(华为手机需要到华为应用商店下载,vivo手机需要到vivo手机的应用商店下载,oppo需到oppo的应用商店去下

    2024年02月13日
    浏览(137)
  • Android App开发手机阅读中实现平滑翻书效果和卷曲翻书动画实战(附源码 简单易懂 可直接使用)

    需要图片集和源码请点赞关注收藏后评论区留言~~~ 与纸质书籍类似,手机上的电子书也有很多页,逐页浏览可采用翻页视图,然而翻页视图犹如一幅从左到右的绵长画卷,与现实生活中上下层叠的书籍并不相像,若想让手机电子书更贴近纸质书的阅读体验,就需要重新设计上

    2024年02月16日
    浏览(47)
  • uni-app打开外部链接方式汇总(h5&app)

    问题描述 在应用中打开一个外部的html页面,即完整http链接的页面。h5通过window.open或是内嵌iframe基本都没有问题,本文主要针对app端的方法进行汇总,不涉及到小程序端。 方案1 使用uni-app的扩展组件 uni-link ,使用参考文档uni-app官网 该组件的行为是在app内打开外部浏览器,

    2024年02月01日
    浏览(47)
  • 微信服务商模式(电商收付通)合单支付APIV3完整Demo,可直接使用,适用于(H5、JSAPI、H5、App、小程序)

    😊 @ 作者: 一恍过去 💖 @ 主页: https://blog.csdn.net/zhuocailing3390 🎊 @ 社区: Java技术栈交流 🎉 @ 主题: 微信服务商模式(电商收付通)合单支付APIV3完整Demo,可直接使用,适用于(H5、JSAPI、H5、App、小程序) ⏱️ @ 创作时间: 2022年08月29日 使用微信合单支付需要先开通 电商收付通

    2024年02月09日
    浏览(46)
  • uniapp H5唤起手机App 中间下载页

    我这里直接是打开中间下载页,在下载页判断手机是否已存在App,有则唤起App,没有则可点击下载按钮下载app。 唤起App的关键语句是:window.location.href =  scheme  Scheme链接格式样式: [scheme]://[host]/[path]?[query] 直接放全部代码: 其中: 上述代码中的schemeLink:xxxApp:// Android和

    2024年02月20日
    浏览(46)
  • ios手机在app中调试h5页面

    网页开发在浏览器里调试很方便,但是在移动端开发调试,例如需要在app中打开,会用到一些bridge , 这时候就不能在浏览器调试。在app调试,如果每次都要发布到测试环境才能调试,那就会浪费很多时间。 可以通过charls来做一个代理 从而在手机app里调试h5页面 安装charles 安装

    2024年03月15日
    浏览(64)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包