Я уже знаю, как запустить приложение из сафари, но можно ли проверить, установлено ли приложение до запуска? Я собираюсь запустить магазин приложений, если приложение в настоящее время не установлено на iPhone.
Запуск приложения или магазина приложений из Safari?
Ответ 1
Невозможно проверить, установлено ли приложение с веб-страницы. Вы можете сделать это в другом приложении, проверив, может ли ваша схема url быть открыта с использованием метода UIApplication -canOpenURL:, но нет эквивалента 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 добавляет действительно приятную функцию, позволяющую вашему приложению открывать URL-адрес http: s: Universal Links
В iOS 10 появляется всплывающее сообщение "Открыть в [Имя приложения]" при нажатии на ссылку и приложение установлено. Если пользователь не нажимает "Открыть" в данном timeout
, это решение будет использовать резервную копию.
Поскольку 300 мс слишком короткое, чтобы использовать что-либо, , это решение всегда терпит неудачу на iOS 10.
Ответ 2
Это работало для меня с аналогичной ситуацией: в котором я хотел открыть приложение 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;
}
}
Похоже, что это хорошо работает для моего использования.
Update: Если вы хотите сделать новое окно при резервном копировании, это все еще допускало всплывающее сообщение об ошибке ios. Чтобы обойти это, попробуйте это.
try {
document.location = link;
} catch(err) {
window.location.reload(true);
window.open(fallback, '_blank');
}
Ответ 3
Решение от Apple:
Из документации Apple
Если приложение уже установлено на пользовательском устройстве, баннер разумно меняет свое действие, а нажатие на баннер просто откроет приложение. Если у пользователя нет вашего приложения на своем устройстве, нажатие на баннер приведет его к записи приложений в App Store. Когда он вернется на ваш сайт, на баннере появится индикатор выполнения, указывающий, сколько времени займет загрузка для завершения. Когда приложение завершит загрузку, кнопка "Вид" изменится на кнопку "Открыть", и нажатие на баннер откроет приложение, сохранив контекст пользователей с вашего сайта.
Smart App Banners автоматически определяет, поддерживается ли приложение на устройстве пользователя. Если загрузка устройства баннером не поддерживается вашим приложением или если ваше приложение недоступно в местоположении пользователя, баннер не будет отображаться.
Чтобы добавить баннер смарт-приложений на нашу веб-страницу, включите следующий метатег в заголовке каждой страницы, где вы должны появиться баннер:
ПРИМЕЧАНИЕ. Мы также можем передать аргумент app: как myName и т.д.,
Отметьте, что Предоставление Навигационного Контекста в Ваш Заголовок Приложения в этой странице
Обновление:
1. После того, как вы закроете баннер, который будет отображаться, это не будет отображаться снова, даже если у вас есть этот метатег в нашем html.
2. Чтобы reset запустили приложение "Параметры", перейдите в "Общие" > "Resent" > Reset все настройки
Ответ 4
Вы можете просто прочитать возвращаемое значение из метода - (BOOL) openURL: (NSURL) url *, если оно НЕТ, это означает, что целевое приложение не установлено. Следующий фрагмент кода дает пример с использованием схемы 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 для исправления.