您好,登錄后才能下訂單哦!
今天就跟大家聊聊有關H5頁面打開app的分析是什么樣的,可能很多人都不太了解,為了讓大家更加了解,小編給大家總結了以下內容,希望大家根據這篇文章可以有所收獲。
前段時間開發項目,遇到了一個需求,簡單來說,就是我們 H5 的頁面有一個“在App
中打開”的按鈕,用戶點擊后,如果用戶已經安裝app
,則直接打開app
,如果用戶沒有安裝app
,那就跳轉到下載app
的頁面
首先,在我的認知中,H5 應該是沒有能力檢測到某一款 app 是否有安裝的
之后的步驟以安卓手機為例子介紹,目前ios9
版本之后的系統不需要我們H5
做這些判斷app
是否安裝的流程(ios9 之后
可以通過提供一個通用鏈接(Universal link)
,做到沒有安裝 app 提示打開蘋果應用商城,安裝了 app 則直接跳轉打開)
scheme 協議是一種頁面內跳轉協議,我們可以通過定制 scheme 協議,跳轉到 app 中的想要跳轉的各個頁面。scheme
協議是通過url
的形式進行跳轉的,所以我們H5
也可以通過這個url
去跳轉到app
內指定頁面,這就是 H5 打開app
的原理。
scheme 的 url 格式類似:[scheme]://[host]/[path]?[query]
這種的方法的思路是,首先把我們要跳轉的地址設置為與原生App
同學一起定義好的scheme
的url
,之后,設置一個定時器,定時器里執行的邏輯是跳轉到下載app
頁面,這樣,如果用戶手機沒有安裝app
,就會在一段時間后跳轉到下載頁面。
核心代碼如下:(可以使用iframe
完成跳轉,但需要考慮iframe
是否在ios
等設備中被允許)
const schemeUrl = 'xxx'
const downloadUrl = 'XXX'
const wait = 500
try {
location = schemeUrl
setTimeout(() => {
location = downloadUrl
}, wait)
} catch (e) {
console.error(e)
}
上述實現方案的問題是,即使成功跳轉到App
,原先的H5
頁面也會在定時時間后,跳轉到下載頁面,這樣體驗很不好
這個方法的思路是,如果成功喚起了app
,我們的 H5 頁面被置于后臺,window.hidden
屬性會變為true
,可以通過這個屬性變化來判斷app
有沒有打開,沒打開就跳轉到下載頁面,當然這里也用到定時器
核心代碼如下:
function checkOutApp() {
const schemeUrl = 'xxx'
const downloadUrl = 'XXX'
const wait = 1000
// 是否進入后臺
const hidden = false
location = schemeUrl
// 如果一定時間內,頁面沒有隱藏,則跳轉到下載頁
setTimeout(() => {
if (!hidden) {
location = downloadUrl
}
}, wait)
// 頁面可見性變化事件
document.addEventListener("visibilitychange", function(){
if (document.hidden) {
hidden = true
}
});
}
存在的問題目前一些安卓瀏覽器,在 app 存在時,會首先跳出一個確認框,詢問用戶是否打開 app,只有用戶同意時,才會跳轉 app,如果用戶始終沒有點擊確認,最后還是會跳到下載頁面,體驗不好。
看完上述內容,你們對H5頁面打開app的分析是什么樣的有進一步的了解嗎?如果還想了解更多知識或者相關內容,請關注億速云行業資訊頻道,感謝大家的支持。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。