サファリからアプリを起動する方法はすでに知っていますが、起動前にアプリがインストールされているかどうかを確認することはできますか?アプリが現在iPhoneにインストールされていない場合は、アプリストアを起動することを考えています。
アプリが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では常に失敗します。
これは私と同様の状況で機能しました:サポートされている場合は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');
}
アップルのソリューション:
From Apple Documentation
アプリがユーザーのデバイスに既にインストールされている場合、バナーはそのアクションをインテリジェントに変更し、バナーをタップするとアプリが開きます。ユーザーがデバイスにアプリを持っていない場合、バナーをタップすると、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に感謝します。