HTML5 本身無法直接判斷 app 是否安裝。你需要藉助一些技巧和變通方法,以下是幾種常見的方案:
-
Universal Links/App Links (推薦方案):
這是目前推薦的最佳方案,它利用了作業系統級別的關聯,能夠更可靠地判斷應用是否安裝,並在安裝的情況下直接開啟應用,未安裝的情況下則跳轉到指定的網頁。
- iOS (Universal Links): 需要在你的網站和 app 中進行配置,關聯特定的域名。當使用者點選連結時,iOS 會檢查裝置上是否安裝了關聯的 app,如果安裝了則直接開啟 app。
- Android (App Links): 類似於 Universal Links,也需要在網站和 app 中配置,關聯特定的域名。Android 會校驗連結的 ownership,確保連結指向的 app 是合法的。
優點: 使用者體驗好,跳轉速度快,安全性高。
缺點: 配置較為複雜,需要伺服器支援。 -
URL Scheme:
這是一種較老的方案,透過自定義 URL scheme 來開啟 app。你可以嘗試使用
iframe
或window.location.href
來開啟 app 的 URL scheme,並在超時後跳轉到應用商店或其他網頁。function openApp(scheme) { var startTime = Date.now(); window.location.href = scheme; // 嘗試開啟 app setTimeout(function() { if (Date.now() - startTime < 3000) { // 設定超時時間,例如 3 秒 window.location.href = "https://example.com/appstore"; // 跳轉到應用商店或其他網頁 } }, 1000); // 延遲 1 秒檢測,給 app 開啟留出時間 } // 例如: openApp("myapp://");
優點: 實現簡單。
缺點: 可靠性較差,容易受到瀏覽器限制,使用者體驗不好,在 iOS 9.2 以上版本需要在info.plist
檔案中配置LSApplicationQueriesSchemes
白名單。容易被濫用,部分瀏覽器已經禁用或限制了這種方式。 -
Intent (僅限 Android):
在 Android 平臺上,可以使用 Intent 來嘗試開啟 app。這種方法類似於 URL Scheme,但更靈活。
function openAndroidApp(packageName) { var intent = "intent://#Intent;scheme=myapp;package=" + packageName + ";end"; window.location.href = intent; } // 例如: openAndroidApp("com.example.myapp");
優點: 比 URL Scheme 更靈活。
缺點: 僅限 Android 平臺。 -
使用者代理 (User Agent) 檢測 (不推薦):
透過檢測 User Agent 字串來判斷 app 是否安裝。這種方法很不靠譜,因為 User Agent 很容易被修改,而且不同 app 的 User Agent 格式也不統一。
優點: 無。
缺點: 非常不靠譜,不推薦使用。
總結:
推薦使用 Universal Links/App Links,雖然配置略複雜,但使用者體驗和可靠性最好。如果無法使用 Universal Links/App Links,可以考慮使用 URL Scheme 或 Intent,但需要注意其侷限性和潛在問題。避免使用 User Agent 檢測,因為它非常不可靠。
無論使用哪種方法,都應該提供 fallback 機制,以便在 app 未安裝的情況下引導使用者到應用商店或其他網頁。