H5 跳转App Ios的踩坑过程

1.0石器版

代码如下:

<template>
</template>
<script>
export default{
  //…… 省略vue模版中其他的代码
  methods:{
      join(){
        let ua = navigator.userAgent.toLowerCase();
         if ( ua.match(/MicroMessenger/i) == "micromessenger" || ua.match(/QQ/i) == "qq") {
            this.isShow = true; // -----> 微信或者qq 打开该页面(h5)触发的弹框 提示用原生浏览器打开
           } else{
            // 跳转app 或者下载链接的处理逻辑
            window.location.href = 'xxxxx' // ---> app跳转链接(和原生沟通好的跳转地址)
            let oldTime = +Date.now();
            window.setTimeout(function(){
              if(+Date.now() - oldTime > 1000){
                  window.location.href = 'xxxxx' ;// -----> app 下载地址(苹果跳转appstore,安卓跳转应用市场)
              }
            },1500)
      }
    }
 }
}
</script>
<style>
</style>

以上代码存在的问题:
有app

  • 安卓 :浏览器中提示用户是否允许打开app 用户点击允许 即可跳转app内部 (注意: 跳转app 内部后 不再跳转 到下载链接)
  • 苹果 :浏览器中直接唤起app (注意: 跳转app之后,还会再次跳转到下载链接)
    我的理解: 按照js 的执行属性 下载链接只是延迟执行 无论是有app 还是没有app 都会执行定时器中js , 也就是说苹果的现象是正确的但是为什么安卓没有执行 情况不得而知(可能安卓客户端做了特殊性处理 有待考究……)
    无app
  • 安卓苹果都跳转到下载链接
2.0 青铜版

补充:
Ios唤起app 的两种方式(客户端设置)

  • URL scheme
    是在app内配置的链接,比如:weixin://,superclass://。URL scheme的格是[scheme]://[host]/[path]?[query]。( 我们公司客户端用的就是scheme 方式)
  • universal link
    是ios9之后出的功能。它是通过传统HTTP链接来启动App。它其实就是一个https开头的链接,还要满足一些特定的规则才能被识别为universal link,才能直接唤起app。
    这个配置起来比较麻烦,主要是app那边配置。具体可以看看下面参考访问地址 中有详细介绍。
    实现方式 参考访问地址 :https://www.jianshu.com/p/475b398a117d 中的具体实现部分代码;
-为了解决Ios成功跳转app 再次跳转appstore 的情况 解决办法:

代码如下:

<template>
</template>
<script>
export default{
  //…… 省略vue模版中其他的代码
  methods:{
      join(){
        let ua = navigator.userAgent.toLowerCase();
         if ( ua.match(/MicroMessenger/i) == "micromessenger" || ua.match(/QQ/i) == "qq") {
            this.isShow = true; // -----> 微信或者qq 打开该页面(h5)触发的弹框 提示用原生浏览器打开
           } else{
            // 跳转app 或者下载链接的处理逻辑
        this.openApp('xxxx',this.appLink) ;// this.openApp('app跳转链接',Function)    
      }
    },
  appLink(){
      window.location.href = 'https://xxxxxxx'  ;// ----> app 下载链接
   },
  openApp(url, callback) {
            let t = 1000,hasApp = true;
            setTimeout(function() {
               if (!hasApp) {
                   callback && callback(); // ---> 没有app执行回调函数
             }
           }, 3000); 
/**3000  表示函数延迟执行的秒数 原文献中写的是 5000 在用户没有app 的时候 跳转appstore跳转时间过长用户体验不好 ;
 * 1000-2000 时 在没有app的时候也不能都跳转appstore
 *(js 中有多个定时器的时候 延迟的时间 要存在时间差 不然设置定时器的意义何在(我的局限性理解 不对望指正)) 
 * 然后我设置3000 就刚刚好满足两种情况
*/
           let oldTime = +Date.now();
           setTimeout(function() {
             let newTime = +Date.now();
             if (newTime - oldTime < t + 100) {
               hasApp = false;
             }
           }, t);
     window.location.href= url ; // -------> 函数中的形参 app 跳转链接(原生定义的链接)
    },
   }
}
</script>
<style>
</style>

以上代码 没有详细介绍 对ios的系统版本进行详细区分(因为我们的客户端将app 的跳转地址 统一为一个地址 我们的原生小哥哥还是很优秀的 ) 不同的平台跳转不同的地址 以上参考文档中有详细介绍

文章的末尾奉上 iOS 唤起APP之Universal Link(通用链接)的介绍 https://www.jianshu.com/p/ab50bdaec65d
注意 Universal Link 的对于H5 来说要注意的地方

  1. 安卓 (应用宝)
  2. 苹果手机 : 通用链接 原生定义(https://开头)
    微信 : 可以直接唤起app (微信解除Universal Link 禁用)
    qq : 通过URL scheme 浏览器唤起 (禁用Universal Link )
    对于H5 来说只要替换原生定义的通用链接 就好
share(){
 this.baseUrl = "https://a.app.qq.com/o/simple.jsp?pkgname=com.wzf.fan"; //安卓定义应用宝官方链接
      if (this.isAndroid) {
        window.location.href =
          this.baseUrl + `&android_schema=${appUrlAndroid("xxxx")}`; //原生安卓定义协议
      } else if (this.isiOS) {
        let ua = navigator.userAgent.toLowerCase();
        if (ua.match(/QQ/i) == "qq") {
          this.isAppopen = true; //ios 对qq 提示浏览器处理
        } else {
          window.location.href = appUrlIOS("xxxx"); // ios 原生定义协议
        }
      } else {
        window.location.href = "http://share.mvoicer.com/#/open";
      }
}

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 213,928评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,192评论 3 387
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 159,468评论 0 349
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,186评论 1 286
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,295评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,374评论 1 292
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,403评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,186评论 0 269
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,610评论 1 306
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,906评论 2 328
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,075评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,755评论 4 337
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,393评论 3 320
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,079评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,313评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,934评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,963评论 2 351

推荐阅读更多精彩内容