热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

H5頁面調起第三方App

背景在H5頁面或許app的webview中調起第三方app中心調起app是操縱體系(iOS、Android)的機制,在h5頁面,我們能夠做的不多。在調起之前,h5頁面沒法推斷當前手
背景

在H5頁面或許app的webview中調起第三方app

中心

調起app是操縱體系(iOS、Android)的機制,在h5頁面,我們能夠做的不多。

在調起之前,h5頁面沒法推斷當前手機是不是裝置了對應的app,我們只能去嘗試調起,而且用一些要領來處置懲罰沒有調起的狀況。

調起的道理就不引見了,網上一搜一大堆。直接上中心代碼。

if(iOS9) {
window.location.href = ${universalLink};
}
else {
var ifr = document.createElement('iframe');
ifr.src = ${scheme};
ifr.style.display = 'none';
document.body.appendChild(ifr);
window.setTimeout(function () {
document.body.removeChild(ifr);
}, 300);
}
舉個栗子:
${universalLink} = 'http://myapp.com'
${scheme} = 'myapp://index'

解釋一下上面的代碼,假如是iOS9及以上的iOS體系,直接跳轉到調起app的universal link。假如是安卓或許iOS9一下的iOS體系,就新建一個iframe,把這個iframe的src弄成調起app的scheme,然後把這個iframe直接塞到頁面的DOM樹上,然後『聽其天然』就行。

iOS的調起

iOS是運用universalLink(下面簡稱ulink)的體式格局來舉行調起。詳細體系內部的機制就不說了,網上一堆文章,隨意搜一下就行。

universalLink實在就是一個平常的http請求的url。我們在h5頁面運用 location.href=XX舉行調起的時刻,假如說調起勝利了,那末實在這個url是不會被接見的,抓包也抓不到。換句話說,假如我們接見到這個url了,申明我們的調起失利了。

iOS怎樣完成【裝置了調起,沒有裝置跳下載頁】

上面說了,iOS下調起失利后,會接見到一個url。要完成沒有安轉跳下載頁,那末就直接把ulink對應的鏈接做成下載頁就好了。依據需求,我們還能夠將ulink對應的url做成任何頁面。然則,假如我們不想要跳轉到這個頁面,照樣想停留在之前的頁面呢?很簡單,叫RD哥哥在通鏈誰人url的效勞端加一個302重定向效勞就行。

舉個栗子,我們運用下面的ulink來調起App。

http://myapp.com/index?target=encodeURIComponent('http://www.baidu.com');

調起失利后,上面誰人ulink會被閱讀器接見到,我們在效勞端加了重定向效勞,我們最終會接見到target對應的地點,即 http://www.baidu.com 。如許,我們就完成了【調起失利時,跳轉到本身想要的頁面】。

iOS怎樣完成【裝置了調起,沒有裝置時,在當前頁面繼續舉行其他操縱】

兩種要領:

一、須要後端重定向效勞,我們只須要把上面重定向的鏈接換成一個scheme就好了。這類要領適用於頁面必需要用戶點擊才觸發的交互,比方視頻、音頻的播放等。(另:微信下能夠經由過程監聽jsbridge ready的事宜,自動播放視頻、音頻)

這個scheme須要滿足以下的請求:

  • 能夠被當前閱讀器辨認
  • 閱讀器辨認了這個scheme,然則不會舉行任何其他操縱。

假如這個scheme同時滿足了上述兩個前提,那末體驗就是最好的。不然,能夠就會湧現閱讀器彈框等題目。

舉幾個scheme的例子

...
facetime:// (iOS11以下體驗圓滿,以後的版本會直接拉起facetime--)
ucbrowser://
...

二、須要後端重定向效勞,我們須要把重定向鏈接換成【當前鏈接后加一個特別參數】的鏈接。如許在前端代碼里就可以夠推斷url內里的特別參數,從而得知當前頁面是拉起app失利時進入的。

iOS調起的注意事項

  • 2018年終,iOS微信下周全封禁了universalLink,所以在微信下是調不起app的,臨時是沒有什麼方法。這類時刻,平常能夠提醒用戶,從閱讀器翻開。固然,也能夠找微信開白名單,直接用微信的才能去拉起。
  • 實在iOS下用scheme也是能夠調起的,比方
    window.location.href = scheme
    然則如許有個題目,假如說沒有裝置對應的app,在safari下會彈窗:沒法辨認該鏈接,而且就算裝置了該app,也會彈一個窗讓你確認是不是調起 。
  • 雖然說iOS的通鏈是一個url,然則也不是直接粘貼到safari等閱讀器下接見就可以直接調起app。因為iOS的通鏈調起必需請求有用戶操縱,比方點擊等行動。能夠將鏈接粘貼到iOS的備忘錄上,點擊這個鏈接就可以夠直接調起了。
Android的調起

安卓的調起是用iframe的體式格局(實在如今的高版本安卓也能夠直接window.location.href=scheme)。

安卓調起的最大的特性就是,安卓沒法曉得是不是勝利調起了app。安卓下的調起平常都邑有自帶的兜底戰略,比方下載。代碼也很簡單

var ifr = document.createElement('iframe');
ifr.src = ${scheme};
ifr.style.display = 'none';
document.body.appendChild(ifr);
window.setTimeout(function () {
document.body.removeChild(ifr);
// 這裏寫兜底戰略的邏輯,比方下載。
// 固然,也能夠不加任何的兜底戰略,調不起就算了。
window.location.href = ${下載地點}
}, 300);

假如想要完成【裝置了app調起,沒有裝置app下載】的功用,那末肯定會調起和下載的邏輯同時實行,因為安卓沒法曉得是不是勝利調起app。

安卓的調起是很天真的,你能夠恣意掌握兜底戰略的邏輯,想幹嗎幹嗎。只是說,兜底戰略是險些肯定會實行的,不論你調起勝利照樣失利。

Android調起注意事項

種種閱讀器的屏障

許多閱讀器都對scheme做了屏障。所以安卓下調不起app是一件非常平常的事變。

微信下調起

微信太關閉了,天然屏障了非自家app的調起。只新建一個iframe的體式格局在微信下是不能調起的。微信針對webview調起app的戰略也一直在修正。最新(2018年3月19日)的想要在微信的webview下調起app的體式格局是:

  • 手機上必需裝置運用寶
  • 運用下面的體式格局,跳轉到運用寶頁面舉行調起。

window.location.href = 'http://a.app.qq.com/o/simple.jsp?pkgname=${pkgname}&android_scheme= encodeURIComponent(${scheme})' ${pkgname}示意app的包名,比方 'com.myapp',${scheme}示意調起的scheme

安卓下推斷是不是調起勝利

實在有一種要領能夠推斷安卓下是不是調起勝利。實行調起邏輯后,設肯定的延時推斷當前頁面是不是可見,若不可見了,險些就可以夠肯定是調起勝利了。然則只對小部分閱讀器有用(比方安卓下的chrome)。對大多數閱讀器而言,調起勝利后,會有一個彈框,須要用戶點擊肯定后,才喚起app。因為這個彈框的存在,就沒法經由過程頁面是不是可見的要領來推斷調起勝利與否了。而chrome下,調起勝利直接喚起app,是不會彈窗的,所以chrome下能夠用延時+頁面是不是可見的體式格局來推斷調起勝利與否。

迎接關注我的民眾號,這裏只要幹活,相符預期
《H5頁面調起第三方App》


推荐阅读
  • 生成式对抗网络模型综述摘要生成式对抗网络模型(GAN)是基于深度学习的一种强大的生成模型,可以应用于计算机视觉、自然语言处理、半监督学习等重要领域。生成式对抗网络 ... [详细]
  • 本文介绍了C#中生成随机数的三种方法,并分析了其中存在的问题。首先介绍了使用Random类生成随机数的默认方法,但在高并发情况下可能会出现重复的情况。接着通过循环生成了一系列随机数,进一步突显了这个问题。文章指出,随机数生成在任何编程语言中都是必备的功能,但Random类生成的随机数并不可靠。最后,提出了需要寻找其他可靠的随机数生成方法的建议。 ... [详细]
  • 生成对抗式网络GAN及其衍生CGAN、DCGAN、WGAN、LSGAN、BEGAN介绍
    一、GAN原理介绍学习GAN的第一篇论文当然由是IanGoodfellow于2014年发表的GenerativeAdversarialNetworks(论文下载链接arxiv:[h ... [详细]
  • 本文介绍了前端人员必须知道的三个问题,即前端都做哪些事、前端都需要哪些技术,以及前端的发展阶段。初级阶段包括HTML、CSS、JavaScript和jQuery的基础知识。进阶阶段涵盖了面向对象编程、响应式设计、Ajax、HTML5等新兴技术。高级阶段包括架构基础、模块化开发、预编译和前沿规范等内容。此外,还介绍了一些后端服务,如Node.js。 ... [详细]
  • 通过手机浏览器调用客户端QQ
    php教程|php手册thinkphp代码,代码示例,代码参考,php短信,数据库备份代码,令牌验证,去除代码中的空白和注释调用QQ客户端php教程-php手册可调用iosandr ... [详细]
  • 移动传感器扫描覆盖摘要:关于传感器网络中的地址覆盖问题,已经做过很多尝试。他们通常归为两类,全覆盖和栅栏覆盖,统称为静态覆盖 ... [详细]
  • 本文内容为asp.net微信公众平台开发的目录汇总,包括数据库设计、多层架构框架搭建和入口实现、微信消息封装及反射赋值、关注事件、用户记录、回复文本消息、图文消息、服务搭建(接入)、自定义菜单等。同时提供了示例代码和相关的后台管理功能。内容涵盖了多个方面,适合综合运用。 ... [详细]
  • 本文介绍了闭包的定义和运转机制,重点解释了闭包如何能够接触外部函数的作用域中的变量。通过词法作用域的查找规则,闭包可以访问外部函数的作用域。同时还提到了闭包的作用和影响。 ... [详细]
  • 本文总结了Java中日期格式化的常用方法,并给出了示例代码。通过使用SimpleDateFormat类和jstl fmt标签库,可以实现日期的格式化和显示。在页面中添加相应的标签库引用后,可以使用不同的日期格式化样式来显示当前年份和月份。该文提供了详细的代码示例和说明。 ... [详细]
  • 《数据结构》学习笔记3——串匹配算法性能评估
    本文主要讨论串匹配算法的性能评估,包括模式匹配、字符种类数量、算法复杂度等内容。通过借助C++中的头文件和库,可以实现对串的匹配操作。其中蛮力算法的复杂度为O(m*n),通过随机取出长度为m的子串作为模式P,在文本T中进行匹配,统计平均复杂度。对于成功和失败的匹配分别进行测试,分析其平均复杂度。详情请参考相关学习资源。 ... [详细]
  • hadoop1.2.1文档中这样写:Nowcheckthatyoucansshtothelocalhostwithoutapassphrase:$sshlocalhostIfyou ... [详细]
  • 现在比较流行使用静态网站生成器来搭建网站,博客产品着陆页微信转发页面等。但每次都需要对服务器进行配置,也是一个重复但繁琐的工作。使用DockerWeb,只需5分钟就能搭建一个基于D ... [详细]
  • quartus管脚分配后需要保存吗_嵌入式必须会的一些硬件面试题,要试一试吗?你过来呀!...
    1、下面是一些基本的数字电路知识问题,请简要回答之。(1)什么是Setup和Hold时间?答:SetupHoldTime用于测试芯片对输入 ... [详细]
  • 转自:http:www.phpweblog.netfuyongjiearchive200903116374.html一直对字符的各种编码方式懵懵懂懂,什 ... [详细]
  • 1.dd命令dd命令的全称为diskdump,对系统所有用户开放。该命令用于复制磁盘的数据块,且可在复制文件的同时指定转换的文件格式。命令选项参数说明ifFILE:输入文件名称,默 ... [详细]
author-avatar
廊坊0316慢摇酒吧_196
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有