Подтвердить что ты не робот

Запуск приложения или магазина приложений из Safari?

Я уже знаю, как запустить приложение из сафари, но можно ли проверить, установлено ли приложение до запуска? Я собираюсь запустить магазин приложений, если приложение в настоящее время не установлено на iPhone.

4b9b3361

Ответ 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

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

Если приложение уже установлено на пользовательском устройстве, баннер разумно меняет свое действие, а нажатие на баннер просто откроет приложение. Если у пользователя нет вашего приложения на своем устройстве, нажатие на баннер приведет его к записи приложений в 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 для исправления.