2011-07-04 51 views
4

這裏內的應用程序的情況是:我如何可以檢測是否安裝在Android設備上從網頁

我有一個網頁,需要通過JavaScript來檢查,如果我的應用程序已經在Android上安裝它正在運行的設備。

如果安裝了該應用程序,該頁面將顯示一個鏈接(帶自定義協議)以啓動該應用程序,否則該頁面應顯示一個指向Android市場的鏈接。

我可以管理應用程序和市場的鏈接。剩下的唯一步驟是從JavaScript代碼內檢測到所述設備上的應用程序的存在(或可能試圖抓住不受支持的協議的一種可能的錯誤不現有應用的指示)。

當我

  1. 點擊網頁鏈接用
  2. 我的自定義應用協議和
  3. 應用尚未安裝在設備上

我可以看到機器人環境會生成「協議不受支持」的類型錯誤。 不幸的是,我無法在JavaScript代碼中捕獲該錯誤以將用戶轉移到安卓市場。

我想直接檢測和錯誤檢測都是有效的方法,如果它們完全存在的話。

任何想法我怎麼能做到這一點?

感謝您的幫助。

回答

3

請勿使用自定義協議。

取而代之,請將您的<intent-filter>設置爲注意一個衆所周知的URL(例如,設置方案,主機和路徑)。該網址應指向您的「下載應用程序」說明所在的頁面。

之後,如果用戶點擊該鏈接,從別的地方知名的網址,它會如果已安裝啓動您的應用程序,或將打開你的網頁,如果沒有。

0

您可以使用iframe,其中src url是您的應用程序的自定義協議,同時您可以在未處理自定義協議的情況下顯示您的網頁。您還可以使用frameborder =「0」和寬度和高度= 0將iframe設置爲不可見;

+0

如何檢查自定義協議是否未處理(沒有安裝應用程序) –

+0

您不能,但您加載自定義協議並在幾秒鐘後加載市場。如果協議被處理,則該頁面被應用覆蓋並關閉,如果不是,則在兩秒內沒有任何事情發生,然後頁面重定向到市場。 –

2

我也有過同樣的問題,但我解決這個問題是這樣的:

var ua = navigator.userAgent.toLowerCase(); 
var isAndroid = ua.indexOf("android") > -1; 
if(isAndroid) { // if is android 
    // your app address for local 
    var ifrSrc = 'intent://example.com#Intent;scheme=my_scheme;action=android.intent.action.VIEW;end'; 
    var ifr = document.createElement('iframe'); 
    ifr.src = ifrSrc ; 
    ifr.onload = function() { // if app is not installed, then will go this function 
     window.location = 'http://your.app_download_page.com'; 
    }; 
    ifr.style.display = 'none'; 
    document.body.appendChild(ifr); 

    setTimeout(function(){ 
     document.body.removeChild(ifr); // remove the iframe element 
    }, 1000); 
} else { // if is not android 
    window.location = 'http://google.com'; 
} 

希望這可以幫助一個人可能有這個問題。

+0

良好的解決方案,與我一起工作 我只更新ifrSrc爲「myscheme = myhosts」 它在三星老本機瀏覽器上失敗 – Arslan

相關問題