2011-07-04 9 views
4

ここでは、状況です:アプリはAndroidデバイスにインストールされている場合、どのように私は、Webページ内から検出することができます

私は私のアプリはすでにアンドロイドにインストールされている場合はJavaScriptによるチェックする必要があるWebページを持っています現在実行中のデバイス。

アプリがインストールされている場合、ページにはアプリを起動するためのリンク(カスタムプロトコル付き)が表示されます。 それ以外の場合は、アンドロイドマーケットへのリンクが表示されます。

私はアプリと市場へのリンクを管理できます。残っている唯一のステップは、JavaScriptコード内からデバイス上のアプリケーションの存在を検出することです(または、おそらく既存のアプリケーションがないことを示すためにサポートされていないプロトコルのエラーをキャッチしようとします)。

I

  1. 私のカスタムアプリケーションプロトコルと
  2. アプリがまだデバイス

にインストールされていない

  • でWebリンクをクリックしたとき、私はそのアンドロイドを見ることができます環境が "プロトコルはサポートされていません"というエラーを生成します。 残念ながら、JavaScriptコードでこのエラーをキャプチャしてユーザーをAndroidマーケットに誘導することはできません。

    直接検出とエラー検出の両方が存在する場合は、有効な方法だと思います。

    どのように私はそれを達成することができますか?

    ありがとうございました。

  • 答えて

    3

    カスタムプロトコルを使用しないでください。

    代わりに、<intent-filter>を設定して、よく知られているURL(スキーム、ホスト、パスなど)を監視するようにしてください。そのURLは、「アプリをダウンロードする」手順があるページを指している必要があります。

    次に、他の場所から有名なURLへのリンクをクリックすると、インストールされている場合はアプリが起動し、そうでない場合はWebページが表示されます。

    0

    src urlがアプリのカスタムプロトコルであるiframeを使用すると同時に、カスタムプロトコルが処理されない場合にウェブページを表示することができます。 frameborder = "0"、widthとheight = 0を使用してiframeを非表示に設定することもできます。

    +0

    カスタムプロトコルが処理されていないかどうかを確認する方法(アプリケーションがインストールされていない) –

    +0

    カスタムプロトコルを読み込んで数秒後にマーケットを読み込むことはできません。プロトコルが処理される場合、ページはアプリケーションによってカバーされ、閉じられます。そうでない場合、2秒後に何も起こらず、ページが市場にリダイレクトされます。 –

    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

    良い解決策、私と一緒にうまくいく 私は "myscheme = myhosts"にifrSrcを更新するだけです これはsamsung古いネイティブブラウザで失敗しました – Arslan

    関連する問題