热门标签 | 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》


推荐阅读
  • 该问题可能由守护进程配置不当引起,例如未识别的JVM选项或内存分配不足。建议检查并调整JVM参数,确保为对象堆预留足够的内存空间(至少1572864KB)。此外,还可以优化应用程序的内存使用,减少不必要的内存消耗。 ... [详细]
  • POJ 2482 星空中的星星:利用线段树与扫描线算法解决
    在《POJ 2482 星空中的星星》问题中,通过运用线段树和扫描线算法,可以高效地解决星星在窗口内的计数问题。该方法不仅能够快速处理大规模数据,还能确保时间复杂度的最优性,适用于各种复杂的星空模拟场景。 ... [详细]
  • 在iOS开发中,基于HTTPS协议的安全网络请求实现至关重要。HTTPS(全称:HyperText Transfer Protocol over Secure Socket Layer)是一种旨在提供安全通信的HTTP扩展,通过SSL/TLS加密技术确保数据传输的安全性和隐私性。本文将详细介绍如何在iOS应用中实现安全的HTTPS网络请求,包括证书验证、SSL握手过程以及常见安全问题的解决方法。 ... [详细]
  • 本地存储组件实现对IE低版本浏览器的兼容性支持 ... [详细]
  • 在使用Eclipse进行调试时,如果遇到未解析的断点(unresolved breakpoint)并显示“未加载符号表,请使用‘file’命令加载目标文件以进行调试”的错误提示,这通常是因为调试器未能正确加载符号表。解决此问题的方法是通过GDB的`file`命令手动加载目标文件,以便调试器能够识别和解析断点。具体操作为在GDB命令行中输入 `(gdb) file `。这一步骤确保了调试环境能够正确访问和解析程序中的符号信息,从而实现有效的调试。 ... [详细]
  • 如何将TS文件转换为M3U8直播流:HLS与M3U8格式详解
    在视频传输领域,MP4虽然常见,但在直播场景中直接使用MP4格式存在诸多问题。例如,MP4文件的头部信息(如ftyp、moov)较大,导致初始加载时间较长,影响用户体验。相比之下,HLS(HTTP Live Streaming)协议及其M3U8格式更具优势。HLS通过将视频切分成多个小片段,并生成一个M3U8播放列表文件,实现低延迟和高稳定性。本文详细介绍了如何将TS文件转换为M3U8直播流,包括技术原理和具体操作步骤,帮助读者更好地理解和应用这一技术。 ... [详细]
  • 在 Android 开发中,`android:exported` 属性用于控制组件(如 Activity、Service、BroadcastReceiver 和 ContentProvider)是否可以被其他应用组件访问或与其交互。若将此属性设为 `true`,则允许外部应用调用或与之交互;反之,若设为 `false`,则仅限于同一应用内的组件进行访问。这一属性对于确保应用的安全性和隐私保护至关重要。 ... [详细]
  • 在对WordPress Duplicator插件0.4.4版本的安全评估中,发现其存在跨站脚本(XSS)攻击漏洞。此漏洞可能被利用进行恶意操作,建议用户及时更新至最新版本以确保系统安全。测试方法仅限于安全研究和教学目的,使用时需自行承担风险。漏洞编号:HTB23162。 ... [详细]
  • 为了确保iOS应用能够安全地访问网站数据,本文介绍了如何在Nginx服务器上轻松配置CertBot以实现SSL证书的自动化管理。通过这一过程,可以确保应用始终使用HTTPS协议,从而提升数据传输的安全性和可靠性。文章详细阐述了配置步骤和常见问题的解决方法,帮助读者快速上手并成功部署SSL证书。 ... [详细]
  • 本文介绍了如何利用Struts1框架构建一个简易的四则运算计算器。通过采用DispatchAction来处理不同类型的计算请求,并使用动态Form来优化开发流程,确保代码的简洁性和可维护性。同时,系统提供了用户友好的错误提示,以增强用户体验。 ... [详细]
  • 本文深入解析了WCF Binding模型中的绑定元素,详细介绍了信道、信道管理器、信道监听器和信道工厂的概念与作用。从对象创建的角度来看,信道管理器负责信道的生成。具体而言,客户端的信道通过信道工厂进行实例化,而服务端则通过信道监听器来接收请求。文章还探讨了这些组件之间的交互机制及其在WCF通信中的重要性。 ... [详细]
  • Web开发框架概览:Java与JavaScript技术及框架综述
    Web开发涉及服务器端和客户端的协同工作。在服务器端,Java是一种优秀的编程语言,适用于构建各种功能模块,如通过Servlet实现特定服务。客户端则主要依赖HTML进行内容展示,同时借助JavaScript增强交互性和动态效果。此外,现代Web开发还广泛使用各种框架和库,如Spring Boot、React和Vue.js,以提高开发效率和应用性能。 ... [详细]
  • 本文全面解析了JavaScript中的DOM操作,并提供了详细的实践指南。DOM节点(Node)通常代表一个标签、文本或HTML属性,每个节点都具有一个nodeType属性,用于标识其类型。文章深入探讨了DOM节点的创建、查询、修改和删除等操作,结合实际案例,帮助读者更好地理解和掌握DOM编程技术。 ... [详细]
  • Java测试服务器调试指南详细介绍了如何进行远程调试,并深入解析了Java Xdebug参数的使用方法。本文首先概述了Java内置的调试功能,重点介绍了JDB这一类似于GDB的强大调试工具。通过实例演示,读者可以掌握在测试环境中高效调试Java应用程序的技巧,包括配置远程调试环境和优化调试参数,以提高开发效率和代码质量。 ... [详细]
  • JavaScript XML操作实用工具类:XmlUtilsJS技巧与应用 ... [详细]
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社区 版权所有