許久沒有寫部落格了,最近有個H5啟動APP原生頁面的需求,中間遇上一些坑,看了些網上的實現方案,特意來總結下
一、需要判斷客戶端的平台以及是否在微信瀏覽器中存取
1、客戶端判斷
在啟動APP時,Android和IOS系統處理的方式是不一樣的,Android這邊由於開放,可以在瀏覽器中透過標籤以及meta標籤的方式,讓瀏覽器app取得手機開啟應用的權限進而啟動APP。
而在IOS這邊,IOS9以後的系統,則可以在APP開發過程中加入配置和邏輯代碼編寫,系統在瀏覽器即將訪問到某個域名前就把這個域名對應的APP打開,這個有點閃,封閉還是有封閉的好處。
所以首先要在客戶端判斷,是Android系統還是IOS系統,判斷程式碼如下
function isInIos(){var userAgentInfo = navigator.userAgent , Agents = ["iPhone" , "iPad", "iPod"];for(var v = 0; v 0) { return true; } }return false; }
2、是否在微信內建瀏覽器中
無論是在哪個平台的客戶端Android/IOS,在微信的平台上存取都有一個問題,那就是無法啟動客戶端,這是微信為了安全性考慮的限制,android這邊屏蔽schema協議,除非公司是微信的伙伴加入了白名單才能
使用,IOS系統可以去訪問app對應appstore的下載頁,但是微信經常屏蔽appstore的這個網址,進而訪問不到。比較方便的做法就是在微信瀏覽器中,無論是IOS或android都去應用寶的下載(IOS 這邊最後會到
appstore中)頁面開啟。我這邊的需求是提示使用者點擊「...」用預設瀏覽器開啟。
判斷是否是在微信中,程式碼如下:
function isInWx(){var agent = window.navigator.userAgent.toLowerCase();return agent.match(/MicroMessenger/i) == 'micromessenger'; }
#
二、原理
##首先無論是andorid還是IOS端,在瀏覽器中透過JS都是無法判斷該手機是否裝有某APP的,即使這個瀏覽器有權限讀取手機應用列表,也沒有一個固定的對外API讓咱們進行查詢。而H5啟動APP本質上是透過
URL scheme開啟APP,一個APP可以設定一個或多個開啟自己的URL scheme,瀏覽器去存取某一個APP的URL scheme,然後若係統安裝有這個APP,則會請求權限去開啟這個APP。其實也算是瀏覽器app
開啟另一個app,iOS就可以使用 UIApplication 的 canOpenUrl 方法來偵測URL scheme 是否能開啟對應的APP,而android也是類似的方式。當然如果JS跳轉URL scheme沒有反應,也代表這支手機沒有
裝這個app。
三、android平台
<activity> <intent-filter> <action></action> <category></category> </intent-filter> <intent-filter> <action></action> <category></category> <category></category> <data></data> </intent-filter></activity>
例如這裡wushang就是scheme,這個最好是app的唯一識別符,要不然在H5喚醒時,會出現一個選擇框,選擇啟動哪一個APP。而host表示啟動該頁面,其實這個更應該用com.android.sky這樣的套件名稱來替代更好。
public void onCreate(Bundle savedInstanceState) { Uri uridata = this.getIntent().getData(); String mydata = uridata.getQueryParameter("data"); }
之後在進行字串截取還是什麼鬼的都隨意啦。
接下來來談談前端程式碼,這裡有兩種情況
1、頁面在刷新進入時,請求權限喚起APP
<meta>
#這個標註當頁面刷新即去訪問這個鏈接,進而啟動APP。但是存在一個問題,如果是蘋果系統的Safari瀏覽器的話,訪問有這個meta的頭,會給出錯誤提示,所以這個頭部可以在後端進行頁面渲染時通過客戶端的
總類別在加上去。
2、透過點擊事件喚起APP
<a>open Android app</a>
但是在實際使用時,是需要對客戶端的平台類型還有是否在微信內建瀏覽器中進行判斷的,所以這樣的做法肯定是不行的。
<script> $('#go').tap(function(){ window.location.href = "wushang://android"; });</script>
<a>open Android app</a> open<script></script><script></script><script>$('#go').click(function () { if(publicFun.isIos()){ alert('it is IOS') }else{ window.location.href = "wushang://android"; } });function startApp(){ if(publicFun.isIos()){ alert('it is IOS') }else{ window.location.href = "wushang://android"; } }</script>
window.startApp = function(){ //启动APP if(publicFun.isInWx()){ //微信中alert("请在浏览器中打开"); }else{ //非微信中if(publicFun.isIos()){ //IOS系统,直接去itunes中,既可以下载也可以打开window.location.href = "https://itunes.apple.com/cn/app/[name]/id[id]"; }else{ //android系统,通过定时器的方式,判断是否安装有APPvar hasApp = true , t = 1000; setTimeout(function () { //没有安装APP则跳转至应用宝下载,延时时间设置为2秒 if(!hasApp) window.location.href = "http://a.app.qq.com/o/simple.jsp?pkgname=[name]"; } , 2000);var t1 = Date.now(); window.location.href = "wushang://android"; setTimeout(function () { //t的时间就是出发APP启动的时间,若APP启动了,再次返回页面时t2这行代码执行,hasApp即为true。反之若APP没有启动即为false var t2 = Date.now(); hasApp = !(!t1 || t2 - t1 ###<p>其實有個很簡單的辦法,就是直接跳轉應用寶。無論是在android或IOS,以及微信非微信。應用寶的下載頁面都有下載和開啟兩個功能(如果是在IOS平台,它是透過連接app store的方式)</p><p> </p><p>四、IOS平台</p><p>針對ios9以上的打不開問題,實際上ios9提供了更好的解決方案————通用連結。 </p><p>這是iOS9推出的一項功能,如果你的應用程式支援Universal Links(通用連結),那麼就能夠方便的透過傳統的HTTP連結來啟動APP(如果iOS裝置上已經安裝了你的app,不需要額外做任何判斷等),或打開網頁(iOS設備上沒有安裝你的app)。或許可以更簡單點來說明,在iOS9之前,對於從各種從瀏覽器,Safari、UIWebView或 WKWebView中喚醒APP的需求,我們通常只能使用scheme。 </p><p>以上來自網路上關於通用連結的介紹,對於前端簡單點講就是你訪問一個http的url,如果這個url帶有你提交給開發平台的設定檔中符合規則的內容,ios系統會去嘗試打開你的app,如果打不開,系統就會在瀏覽器中轉向你要訪問的連結。很好的一個屬性,因為透過這個屬性在ios9上我們能夠繞過微信的攔截從而打開app。 </p><p>所以上面的點擊事件,只是去訪問app store,因為若app已安裝,在瀏覽器訪問時,就已經去到APP中了。 </p><p>這些都是IOS設定上的東西,就不多寫了。至於傳參,以及頁面定向,其實也就是相當於在UIWebView中取得目前連線的URL,然後進行字串拆分以及校驗,即可判斷去哪個頁,以及取得參數值。 </p><p> </p>
以上是H5啟動APP原生頁面的實例方法的詳細內容。更多資訊請關注PHP中文網其他相關文章!

H5和HTML5是不同的概念:HTML5是HTML的一個版本,包含新元素和API;H5是基於HTML5的移動應用開發框架。 HTML5通過瀏覽器解析和渲染代碼,H5應用則需要容器運行並通過JavaScript與原生代碼交互。

HTML5的關鍵元素包括、、、、、等,用於構建現代網頁。 1.定義頭部內容,2.用於導航鏈接,3.表示獨立文章內容,4.組織頁面內容,5.展示側邊欄內容,6.定義頁腳,這些元素增強了網頁的結構和功能性。

HTML5和H5沒有區別,H5是HTML5的簡稱。 1.HTML5是HTML的第五個版本,增強了網頁的多媒體和交互功能。 2.H5常用於指代基於HTML5的移動網頁或應用,適用於各種移動設備。

HTML5是超文本標記語言的最新版本,由W3C標準化。 HTML5引入了新的語義化標籤、多媒體支持和表單增強,提升了網頁結構、用戶體驗和SEO效果。 HTML5引入了新的語義化標籤,如、、、等,使網頁結構更清晰,SEO效果更好。 HTML5支持多媒體元素和,無需第三方插件,提升了用戶體驗和加載速度。 HTML5增強了表單功能,引入了新的輸入類型如、等,提高了用戶體驗和表單驗證效率。

如何寫出乾淨高效的HTML5代碼?答案是通過語義化標籤、結構化代碼、性能優化和避免常見錯誤。 1.使用語義化標籤如、等,提升代碼可讀性和SEO效果。 2.保持代碼結構化和可讀性,使用適當縮進和註釋。 3.優化性能,通過減少不必要的標籤、使用CDN和壓縮代碼。 4.避免常見錯誤,如標籤未閉合,確保代碼有效性。

H5通過多媒體支持、離線存儲和性能優化提升網頁用戶體驗。 1)多媒體支持:H5的和元素簡化開發,提升用戶體驗。 2)離線存儲:WebStorage和IndexedDB允許離線使用,提升體驗。 3)性能優化:WebWorkers和元素優化性能,減少帶寬消耗。

HTML5代碼由標籤、元素和屬性組成:1.標籤定義內容類型,用尖括號包圍,如。 2.元素由開始標籤、內容和結束標籤組成,如內容。 3.屬性在開始標籤中定義鍵值對,增強功能,如。這些是構建網頁結構的基本單位。

HTML5是構建現代網頁的關鍵技術,提供了許多新元素和功能。 1.HTML5引入了語義化元素如、、等,增強了網頁結構和SEO。 2.支持多媒體元素和,無需插件即可嵌入媒體。 3.表單增強了新輸入類型和驗證屬性,簡化了驗證過程。 4.提供了離線和本地存儲功能,提升了網頁性能和用戶體驗。


熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

SAP NetWeaver Server Adapter for Eclipse
將Eclipse與SAP NetWeaver應用伺服器整合。

mPDF
mPDF是一個PHP庫,可以從UTF-8編碼的HTML產生PDF檔案。原作者Ian Back編寫mPDF以從他的網站上「即時」輸出PDF文件,並處理不同的語言。與原始腳本如HTML2FPDF相比,它的速度較慢,並且在使用Unicode字體時產生的檔案較大,但支援CSS樣式等,並進行了大量增強。支援幾乎所有語言,包括RTL(阿拉伯語和希伯來語)和CJK(中日韓)。支援嵌套的區塊級元素(如P、DIV),

DVWA
Damn Vulnerable Web App (DVWA) 是一個PHP/MySQL的Web應用程序,非常容易受到攻擊。它的主要目標是成為安全專業人員在合法環境中測試自己的技能和工具的輔助工具,幫助Web開發人員更好地理解保護網路應用程式的過程,並幫助教師/學生在課堂環境中教授/學習Web應用程式安全性。 DVWA的目標是透過簡單直接的介面練習一些最常見的Web漏洞,難度各不相同。請注意,該軟體中

Atom編輯器mac版下載
最受歡迎的的開源編輯器

禪工作室 13.0.1
強大的PHP整合開發環境