49

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

4

4 に答える 4

88

アプリがウェブページからインストールされているかどうかを確認することはできません。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を開くことができる非常に優れた機能を追加します。ユニバーサルリンク


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

于 2011-08-06T08:24:16.700 に答える
11

これは私にとっても同様の状況で機能しました。サポートされている場合は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');
  }
于 2014-03-27T15:36:30.243 に答える
9

Appleのソリューション:

Appleドキュメントから

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

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

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

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

注:アプリの引数を渡すこともできます:myNameなどのように、

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

更新:

1.表示されているバナーを閉じると、HTMLにそのメタタグが含まれていても、そのバナーは再度表示されません。

2.設定アプリを起動してリセットするには、[一般]>[再送]>[すべての設定をリセット]に移動します

于 2014-03-26T06:48:45.533 に答える
2

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

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に感謝します。

于 2014-01-09T15:32:21.217 に答える