web-dev-qa-db-ja.com

アプリの起動OR Safariからのアプリストア?

サファリからアプリを起動する方法はすでに知っていますが、起動前にアプリがインストールされているかどうかを確認することはできますか?アプリが現在iPhoneにインストールされていない場合は、アプリストアを起動することを考えています。

46
ninjaneer

アプリがWebページからインストールされているかどうかを確認することはできません。 UIApplicationの-canOpenURL:メソッドを使用してURLスキームを開くことができるかどうかを確認することで、他のアプリ内で実行できますが、これに相当するjavascriptはありません。

ただし、次の回避策を使用できます。

<script language="javascript">
    function open_appstore() {
        window.location='http://iTunes.com/';
    }

    function try_to_open_app() {
        setTimeout('open_appstore()', 300);
    }
</script>

<a onClick="javascript:try_to_open_app();" href="yourappurl:">App name</a>

このコードは、このタイムアウトが終了した場合にopen_appstore関数を呼び出すリンクにタイムアウトを設定します。リンクはアプリのカスタムURLに向けられているため、Safariはそのリンクを開こうとし、可能であればアプリを開いてタイマーを停止するため、AppStoreリンクは開かれません。

アプリのリンクを開くことができない場合、タイマーが切れると、ページを開くことができないことを示すエラーポップアップが表示されます(それを取り除くことはできません)が、すぐにAppStoreに移動し、そのエラーを閉じます。


iOS 9は、アプリがhttp/s URLを開くことができる素晴らしい機能を追加します: niversal Links


iOS 10をタップすると、「[アプリ名]で開く」というポップアップが表示されますリンクとアプリがインストールされます。ユーザーが特定のtimeoutで「Open」をタップしない場合、このソリューションはフォールバックを使用します。 300ミリ秒は短すぎて何もタップできないため、このソリューションはiOS 10では常に失敗します

84
Filip Radelic

これは私と同様の状況で機能しました:サポートされている場合はgmapsアプリを開きたい-それ以外の場合はgmapサイトに直接アクセスします。

function mapLink(addy) {     
  addy = encodeURIComponent(addy);

  var fallback = 'http://maps.google.com/?q=' + addy
  , link = 'comgooglemaps://?q=' + addy;

  try {
    document.location = link;
  } catch(err) {
    document.location = fallback;
  }
}

私のユースケースではかなりうまくいくようです。

更新:フォールバックで新しいウィンドウを作成する場合、これにより、iosエラーメッセージがポップアップ表示されます。これを回避するには、これを試してください。

  try {
    document.location = link;
  } catch(err) {
    window.location.reload(true);
    window.open(fallback, '_blank');
  }
12
William Hall

アップルのソリューション:

From Apple Documentation

https://developer.Apple.com/library/ios/documentation/AppleApplications/Reference/SafariWebContent/PromotingAppswithAppBanners/PromotingAppswithAppBanners.html

アプリがユーザーのデバイスに既にインストールされている場合、バナーはそのアクションをインテリジェントに変更し、バナーをタップするとアプリが開きます。ユーザーがデバイスにアプリを持っていない場合、バナーをタップすると、App Storeのアプリのエントリに移動します。彼があなたのウェブサイトに戻ると、進行状況バーがバナーに表示され、ダウンロードが完了するまでにかかる時間を示します。アプリのダウンロードが完了すると、[表示]ボタンが[開く]ボタンに変わります。バナーをタップすると、ウェブサイトからユーザーのコンテキストを保持したままアプリが開きます。

スマートアプリバナーは、アプリがユーザーのデバイスでサポートされているかどうかを自動的に判断します。バナーをロードするデバイスがアプリをサポートしていない場合、またはユーザーの場所でアプリが利用できない場合、バナーは表示されません。

ウェブページにスマートアプリバナーを追加するには、バナーを表示する各ページの先頭に次のメタタグを含めます。

注:app-argumentを渡すこともできます:myNameなど、

このページ でアプリのヘッダーにナビゲーションコンテキストを提供することを確認します

更新:

1。表示されるバナーを閉じると、htmlにそのメタタグがあったとしても、それは再び表示されません。

2。それをリセットして設定アプリを起動し、一般>再送信>すべての設定をリセットに移動します

メソッドから単純に戻り値を読み取ることができます-(BOOL)openURL:(NSURL)url *。NOの場合、ターゲットアプリケーションがインストールされていないことを意味します。次のコードは、navigonのURLスキームを使用した例を示しています。

NSString *stringURL = @"navigon://coordinate/NaviCard/19.084443/47.573305";
NSURL *url = [NSURL URLWithString:stringURL];
if([[UIApplication sharedApplication] openURL:url]) {
    NSLog(@"Well done!");
} else {
    stringURL = @"https://iTunes.Apple.com/it/app/id320279293?mt=8";
    url = [NSURL URLWithString:stringURL];
    [[UIApplication sharedApplication] openURL:url];
}

修正してくれたzszenに感謝します。

2
Zeb