H5喚起APP


已知喚醒app方式

  • URL Schemes
  • chrome intent
  • ios UniversalLink / android appLink

 

URL Scheme

URL Schemes可以理解為一種特殊的URL用來定位一個應用以及應用內的某個功能,完全可以按照理解一個網頁的URL來理解一個應用的URL

使用

跟打開一個鏈接一樣,常見的有:

  • location.href
  • iframe
  • a標簽

使用中常見問題及解決方案

  • 可能會被app禁掉,比如微信,qq等
  • ios9+ 禁止掉了iframe方式。
  • ios及部分安卓瀏覽器會提示用戶是否打開App,並且ios在未安裝對應App的時候,會提示“打不開網頁,因為該網址無效”
  • h5無法感知是否喚醒成功
  • 大部分瀏覽器需要用戶手動觸發鏈接,js自動觸發無效

針對被app禁止掉的情況,通常會判斷是否微信等app環境,然后提示用戶瀏覽器內打開 針對ios9+ iframe 被禁掉的情況,判斷下ios版本 針對h5無法感知是否喚醒成功的解決辦法是,一段時間之后自動跳轉下載頁,或者是依賴setTimeout在瀏覽器進入后台后進程切換導致的時間延遲判斷。

 if (isAndroid) {
                        //安卓終端使用iframe
                        iFrame = document.createElement("iframe");
                        iFrame.setAttribute("src", urls);
                        iFrame.setAttribute("style", "display:none;");
                        iFrame.setAttribute("height", "0px");
                        iFrame.setAttribute("width", "0px");
                        iFrame.setAttribute("frameborder", "0");
                        document.body.appendChild(iFrame);
                        // 發起請求后這個 iFrame 就沒用了,所以把它從 dom 上移除掉
                        iFrame.parentNode.removeChild(iFrame);
                        iFrame = null;
                        // 如果用戶沒有安裝APP,則提示用戶去安裝APP
                        setTimeout(() => {
                            window.location.href = "https://www.pgyer.com/A2fc"; // 這里可以自行寫一個延時關閉的彈窗,也可以跳轉至app下載地址
                        }, 2000);
                    } else if (isiOS) {
                        //iOS終端直接頁面跳轉
                        window.location.href = urls;
                        // 如果用戶沒有安裝APP,則提示用戶去安裝APP
                        setTimeout(() => {
                            window.location.href = "https://www.pgyer.com/A2fc"; // 這里可以自行寫一個延時關閉的彈窗,也可以跳轉至app下載地址
                        }, 2000);
                    } else {
                        window.location.href = urls;
                    }
                       

 

 

Intent

安卓的原生谷歌瀏覽器從chrome25版本之后就不能通過URL Schemes喚醒安卓應用。要使用谷歌官方提供的intent:預發, 如果喚醒失敗,則會跳轉到谷歌的應用市場。語法與URL Schemes及其相似,相當於谷歌定制版的URL Schemes,也沒用過,就不多說。

IOS Universal Link

Universal Link是在iOS9引入的新功能,通過傳統的HTTP鏈接就可以喚醒app,如果用戶沒有安裝APP,則會跳轉到該鏈接對應的頁面,而且在喚醒app的時候沒有彈框提示

原理

 App開發人員去配置中心配置Associated Domain配置一個支持https的域名,比如app-support.tuyacn.com - 然后 app-support.tuyacn.com/apple-app-site-association或者app-support.tuyacn.com/apple-app-site-association/.well-known/apple-app-site-association要返回app的teamId,bundleId,paths信息

常見問題

  • 微信等幾個App還是給屏蔽了
  • 從9.3.X改版之后,通用鏈接不支持域內跳轉了,跳轉前后的兩個domain必須是不同的,否則只會safari打開。跨域問題:假設當前網頁的地址為 ,如果要跳轉的鏈…  這個域下的,系統將不會進行拉起應用的操作,必須要跳轉不同的子域,例如 * 時,系統才會根據關聯文件去判斷是否要拉起應用。
  • 服務器上apple-app-site-association的更新不會讓iOS本地的apple-app-site-association同步更新,即iOS只會在App第一次啟動時請求一次,以后除非App更新重新安裝,否則不會在每次打開時請求apple-app-site-association

Android App Links

安卓App Link的出現原因也是為了優化用戶體驗,在使用scheme喚醒時會彈出一個對話框提示用戶是否打開,並且如果用戶勾選了取消之后,可能之后就再也喚醒不了。

安卓App Link的流程和iosUniversal link的類似,iOS中需要配置的app-support.tuyacn.com/apple-app-site-association文件在安卓中叫做app-support.tuyacn.com/.well-known/assetlinks.json,只能放在.well-known下面


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM