校园春色亚洲色图_亚洲视频分类_中文字幕精品一区二区精品_麻豆一区区三区四区产品精品蜜桃

主頁 > 知識庫 > html5喚醒APP小記

html5喚醒APP小記

熱門標簽:黃石ai電銷機器人呼叫中心 智能電銷機器人被禁用了么 高德地圖標注商戶怎么標 欣鼎電銷機器人 效果 如何查看地圖標注 惡搞電話機器人 ok電銷機器人 電話機器人技術 地圖標注軟件打印出來

最近遇到一個需求,需要在從APP分享出去的H5頁面中,帶有一個立即打開的按鈕,如果本地安裝了app,那么就直接喚起本地的app,如果沒有安裝,則跳轉到下載。這是一個很正常的推廣和導流量的策略。前端小白從來沒有做過這個需求,只能開始哼唧哼唧地開啟自己的度娘和谷歌之旅。

經過一段時間的探索之旅發現里面的學問很多,要做一個兼容性很好的方案,就需要考慮各種情況,在不同的情況適配不同的方案,比方說用戶是在手機瀏覽器打開還是微信中打開,或者是在pc中打開,universal騰訊應用寶直接打開 APP link是否被關閉等,這就使代碼實現變得復雜,且容易出錯,且還有安卓平臺機型眾多、瀏覽器眾多等導致的兼容問題。由于時間有限,這次主要先介紹一個比較普遍的使用URL Scheme進行App跳轉的方法。

URL Scheme —— 喚端媒介

來源

一般來說,我們使用的智能設備上有許多我們的個人信息。比如:聯系方式、銀行卡/信用卡信息、支付寶/Paypal/各大商城的賬戶密碼、照片甚至行程與位置信息等。

如果說,你設備上的每一個應用,不管是官方的還是你從任何商城安裝的應用都可以隨意地獲取這些信息,那么你輕則收到騷擾信息和郵件、重則后果不堪設想。如何讓這些信息不被其它應用隨意使用,或者說,如何讓這些信息僅在設備所有者本人知情并允許的情況下被使用,是所有智能設備與操作系統所要在乎的核心安全問題。針對這個問題,蘋果使用了名為「沙盒」的機制:應用只能訪問它聲明可能訪問的資源。一切提交到 App Store 的應用都必須遵守這個機制。

在安全方面沙盒是個很好的解決辦法,但是有些矯枉過正。敏感的個人信息我們不愿意透露,卻不代表所有的信息我們都不想與其它應用共享。因此,我們急需要一個輔助工具來幫助我們實現應用通信, URL Schemes 就是這個工具。

URL Schemes是什么

[scheme]://[host]/[path]?[query]

我們拿 https://www.baidu.com 來舉例,scheme 自然就是 https 了,后面拼接的是傳遞的參數。URL Schemes 沒有特別嚴格的規范,所以后面參數的具體定義是app開發者去自定義。

就像給服務器資源分配一個 URL,以便我們去訪問它一樣,我們同樣也可以給手機APP分配一個特殊格式的 URL,用來訪問這個APP或者這個APP中的某個功能(來實現通信)。APP得有一個標識,好讓我們可以定位到它,它就是 URL 的 Scheme 部分。

但是,兩者還有幾個重要的區別:

  • 所有網頁都一定有網址,不管是首頁還是子頁。但未必所有的應用都有自己的 URL Schemes,更不是每個應用的每個功能都有相應的 URL Schemes。幾乎沒有所有功能都有對應 URL 的應用。一個 App 是否支持 URL Schemes 要看那個 App 的作者是否在自己的作品里添加了 URL Schemes 相關的代碼。
  • 一個網址只對應一個網頁,但并非每個 URL Schemes 都只對應一款應用。這點是因為蘋果沒有對 URL Schemes 有不允許重復的硬性要求,所以曾經出現過有 App 使用支付寶的 URL Schemes 攔截支付帳號和密碼的事件。
  •  一般網頁的 URL 比較好預測,而URL Scheme 因為沒有統一標準,所以非常難猜,通過猜來獲取 應用的 URL Schemes 是不現實的。

前面普及了一下URL Schemes的相關知識,作為個前端開發者,就不去深究其中的原理,都交給app開發者吧。接下來開始我們的正題。首先當然是要客戶端提供App的Url Schemes。

用瀏覽器去打開scheme

在瀏覽器中打開 scheme 就像打開一個不同的http地址一樣。可以在一個 a 標簽中打開。

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>打開App</title>
</head>
<body>
<a href="luwei://" id="open">打開應用</a>
</body>
</html>

點擊上面的H5頁面中的鏈接將會嘗試喚醒對應app,在一些瀏覽器中,可能會彈出一個提示框,詢問用戶是否允許打開應用。

如果打開的 scheme 在本地沒有對應的 app,則點擊不會反應。

當然還可以使用 JavaScript 代碼打開,只需要添加相應的事件觸發和處理即可。

在JavaScript代碼中打開連接有以下幾種方式:

  • 新建一個隱藏的 iframe ,地址指向需要打開的url
  • 使用 window.location 或者 window.location.href 刷新當前頁面
  • 新建一個隱藏的 a 標簽,地址指向打開的url,并觸發打開鏈接事件
  • 動態創建一個script腳本,在這個腳本中新建一個a標簽并打開
// 打開url的方式
var urlOpen = {
  // 在ios支持不好
    'iframe' : function(url) {
        var iframe = document.createElement('iframe');
        iframe.style.display = 'none';
        iframe.src = url;
        document.body.appendChild(iframe);
    },
    'location' : function(url) {
        window.location.href = url;
    },
    'href' : function(url) {
        var a = document.createElement('a');
        a.style.display = 'none';
        a.href = url;
        document.body.appendChild(a);
        a.click();
    },
    'script' : function(url) {
        var script = document.createElement('script');
        script.setAttribute('type', 'test/javascript');
        script.innerHTML = '(function(){' +
            'var a = document.createElement("a");' +
            'a.style.display = "none";' +
            'a.href = "' + url.replace(/"/g, '\\"') + '";' +
            'document.body.appendChild(a);' +
            'a.click();' +
            '})()';
        document.body.appendChild(script);
    },
    'open' : function(url) {
        window.open(url);
    }
};

以上方法是只是解決了在已安裝App設備喚醒App的功能,并不能判斷是否已安裝App,沒有安裝即跳轉至下載鏈接。

瀏覽器判斷是否安裝應用

在瀏覽器實際上是沒有能力判斷手機里是否安裝了某個App的,所以只能夠采取一種投機取巧的方式。

在JavaScript中判斷頁面是否進入后臺來判斷打開成功。Html5提供了下列事件和屬性可以利用:

  • pagehide : 頁面隱藏時觸發
  • visibilitychange : 頁面隱藏沒有在當前顯示時觸發(切換tab也會觸發該事件)
  • document.hidden : 當頁面隱藏時,該值為true,顯示時為false

上面這些事件或者屬性并不是所有瀏覽器都支持。下面是一個給出為id為openBtn 的按鈕添加打開scheme或者下載事件的例子,但對于Android 4.4版本以下則不支持

    var downloader, 
    scheme = 'luwei://',  // 需要打開的app scheme 地址
    iosDownload='http://xxx.com';  // 如果打開scheme失效的app下載地址
    andDownload = 'http://xxx.com';
    var u = navigator.userAgent;
    var isAndroid = u.indexOf('Android') > -1 || u.indexOf('Linux') > -1; //g
    var isIOS = !!u.match(/\(i[^;]+;( U;)? CPU.+Mac OS X/); //ios終端

// 給 id 為 openBtn 的按鈕添加點擊事件處理函數
    document.getElementById('openBtn').onclick = function () {
        window.location.href = scheme;  // 嘗試打開 scheme 
 
        // 設置3秒的定時下載任務,3秒之后下載app
        downloader = setTimeout(function(){
            if(isAndroid) {
                window.location.href = andDownload;
            }
            if(isIOS) {
                window.location.href = iosDownload;
            }
          
        }, 3000);
    };
 
    document.addEventListener('visibilitychange webkitvisibilitychange', function () {
        // 如果頁面隱藏,推測打開scheme成功,清除下載任務
        if (document.hidden || document.webkitHidden) {
            clearTimeout(downloader);
        }
    });
    window.addEventListener('pagehide', function() {
        clearTimeout(downloader);
    });

沒有完美的方案

微信中無法喚醒App,需要“用瀏覽器打開”是因為微信對所有的分享鏈接接做了scheme屏蔽,也就是說分享連接中所有對于scheme的調用都被微信封掉了。有些app是能在微信打開是因為微信有一個白名單(有關系就是不錯),對于在白名單中的分享鏈接是不會屏蔽掉scheme調用的。
本文只是小小地拋個磚,介紹了一種比較常用簡單的方法去喚醒app,該方案兼容性不是特別好吧。要做出一個比較完美的方案還需要細細去鉆研,還需要不停地去搬磚~不說了,搬磚去了~

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。

標簽:金昌 赤峰 中山 綏化 聊城 盤錦 阿壩 萍鄉

巨人網絡通訊聲明:本文標題《html5喚醒APP小記》,本文關鍵詞  html5,喚醒,APP,小記,html5,;如發現本文內容存在版權問題,煩請提供相關信息告之我們,我們將及時溝通與處理。本站內容系統采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《html5喚醒APP小記》相關的同類信息!
  • 本頁收集關于html5喚醒APP小記的相關信息資訊供網民參考!
  • 推薦文章
    校园春色亚洲色图_亚洲视频分类_中文字幕精品一区二区精品_麻豆一区区三区四区产品精品蜜桃
    欧美精品一卡二卡| 成人黄色软件下载| 日韩极品在线观看| 午夜av一区二区三区| 亚洲亚洲人成综合网络| 亚洲一区二区精品久久av| 亚洲国产日韩在线一区模特| 亚洲午夜久久久久久久久久久| 亚洲一区二区三区四区中文字幕| 一区二区三区资源| 免费一级片91| 99久久国产综合精品麻豆| 91麻豆精品国产91久久久资源速度| 欧美三级日韩三级国产三级| 91精品婷婷国产综合久久竹菊| 欧美tickling挠脚心丨vk| 精品久久人人做人人爽| 精品久久国产字幕高潮| 综合在线观看色| 麻豆成人91精品二区三区| 国产凹凸在线观看一区二区| 91小视频在线| 国产精品私房写真福利视频| 日韩专区欧美专区| 一本大道久久a久久精二百| 日韩精品一区二区三区老鸭窝| 欧美激情一区二区三区全黄| 日韩av在线播放中文字幕| 成人激情小说网站| 欧美精品一区二区三区蜜桃| 亚洲国产成人av网| 粉嫩av一区二区三区在线播放| 69堂成人精品免费视频| 亚洲精品久久久蜜桃| 国产91高潮流白浆在线麻豆| 欧美一卡2卡3卡4卡| 亚洲福利视频三区| 777奇米四色成人影色区| 亚洲精品国产视频| 色婷婷精品久久二区二区蜜臂av| 国产日韩欧美精品综合| 成人午夜av影视| 欧美激情一区二区三区蜜桃视频| 国产一本一道久久香蕉| 亚洲精品在线网站| 成人国产精品免费观看| 国产精品成人一区二区艾草| 色综合久久久久综合体| 亚洲色图制服丝袜| 欧美日韩二区三区| 麻豆91免费看| 亚洲国产精品激情在线观看| 懂色一区二区三区免费观看| 亚洲欧洲国产专区| 91精品免费观看| 国产91精品欧美| 亚洲一区二区视频| 久久久777精品电影网影网 | 日本伊人精品一区二区三区观看方式| 精品视频一区 二区 三区| 久久国产夜色精品鲁鲁99| 国产亚洲精品bt天堂精选| 欧美亚日韩国产aⅴ精品中极品| 日韩av不卡一区二区| 久久精品亚洲国产奇米99 | 国产精品色婷婷| 91精品国产一区二区三区| av综合在线播放| 国产一区二区日韩精品| 亚洲美女视频一区| 国产精品无码永久免费888| 制服丝袜成人动漫| 色成人在线视频| 国产iv一区二区三区| 国产精品1024| 精品一区二区免费在线观看| 亚洲国产综合91精品麻豆 | 色综合天天做天天爱| 国产麻豆视频一区| 久久99久久99| 国产麻豆成人传媒免费观看| 麻豆一区二区99久久久久| 亚洲国产乱码最新视频| 一区二区三区av电影| 亚洲精品久久7777| 亚洲精品大片www| 亚洲一区影音先锋| 亚洲国产cao| 蜜桃av一区二区| 国产精品羞羞答答xxdd| 国产精品一区二区91| 成人av片在线观看| 99精品国产99久久久久久白柏| 粉嫩一区二区三区性色av| 99视频超级精品| 欧美精品日韩一本| 精品日韩一区二区| 国产精品久久久久久久久久免费看 | 欧美一二三区在线观看| 精品久久人人做人人爰| 综合久久久久久久| 午夜影院在线观看欧美| 国产乱妇无码大片在线观看| 成人激情免费电影网址| 67194成人在线观看| 久久九九99视频| 一区二区三区成人在线视频| 毛片av一区二区| 91成人免费在线| 久久蜜臀精品av| 日韩成人免费看| 91在线国内视频| 久久亚洲精精品中文字幕早川悠里| 日本一区二区三区在线观看| 亚洲午夜久久久久久久久电影院| 天天av天天翘天天综合网| 成人免费va视频| 久久久久久久久岛国免费| 美国av一区二区| 在线电影院国产精品| 亚洲精品国产第一综合99久久| 国产精品一区三区| 日韩免费观看2025年上映的电影| 伊人色综合久久天天人手人婷| 暴力调教一区二区三区| 久久精品一级爱片| 成人毛片视频在线观看| 国产日韩综合av| 国产精品一区二区三区99| 精品免费国产二区三区 | 欧美一级一级性生活免费录像| 一区二区三区国产精品| 色噜噜狠狠成人网p站| 亚洲欧洲综合另类在线| 欧美性生交片4| 美国精品在线观看| 精品免费国产二区三区| 成人性生交大片免费看视频在线| 国产免费观看久久| 一本一本久久a久久精品综合麻豆| 亚洲人成电影网站色mp4| 在线免费亚洲电影| 蜜臀av性久久久久蜜臀aⅴ流畅| 欧美精品一二三| 成人激情图片网| 亚洲欧洲精品一区二区三区| 欧美天堂亚洲电影院在线播放| 日韩和的一区二区| 国产农村妇女毛片精品久久麻豆 | 久久亚洲欧美国产精品乐播| 不卡一区二区三区四区| 日韩精品免费视频人成| 精品美女被调教视频大全网站| caoporen国产精品视频| 一区二区三区自拍| 中文字幕精品在线不卡| 制服丝袜国产精品| 欧美在线免费视屏| 国产99久久久国产精品免费看 | 91精品久久久久久蜜臀| 91理论电影在线观看| 国产成人av自拍| 麻豆国产精品官网| 日本中文在线一区| 午夜精品福利一区二区三区蜜桃| 亚洲国产精品传媒在线观看| 日韩一区二区三免费高清| 欧美日韩你懂得| 777久久久精品| 777欧美精品| 日韩欧美色电影| 日韩欧美一区在线| 日韩一区二区在线观看视频| 在线欧美日韩精品| 4438成人网| 日韩欧美aaaaaa| 久久这里只有精品视频网| 亚洲精品一区二区三区在线观看| 欧美日韩一区二区三区免费看| 99久久99久久精品免费看蜜桃| 成人av在线看| 欧美性猛片aaaaaaa做受| 欧美日韩国产中文| 欧美一级久久久| 久久免费视频色| 亚洲欧美在线视频观看| 性做久久久久久| 裸体歌舞表演一区二区| 成人丝袜高跟foot| 欧美午夜一区二区三区 | 久久成人久久爱| 国产成人免费视频一区| 欧美无乱码久久久免费午夜一区| 欧美男生操女生| 国产精品久久久爽爽爽麻豆色哟哟| 亚洲天天做日日做天天谢日日欢 | 国产原创一区二区| 在线看一区二区| 欧美韩日一区二区三区四区| 亚洲男人天堂av网|