Запуск приложения или магазин приложений от Safari? - PullRequest
45 голосов
/ 06 августа 2011

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

Ответы [ 4 ]

83 голосов
/ 06 августа 2011

Невозможно проверить, установлено ли приложение с веб-страницы.Вы можете сделать это внутри другого приложения, проверив, может ли ваша схема URL открываться с помощью метода -canOpenURL: UIApplication, но не существует эквивалентного ему 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: Универсальные ссылки


В iOS 10 , когда вы нажимаете на ссылку и приложение установлено, появляется всплывающее окно с надписью « Открыть в [Имя приложения] ».Если пользователь не нажмет « Open » в данном timeout, это решение будет использовать запасной вариант.Поскольку 300 мс слишком коротки, чтобы что-то нажимать, это решение всегда терпит неудачу на iOS 10 .

11 голосов
/ 27 марта 2014

Это сработало для меня в аналогичной ситуации: я хотел открыть приложение 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');
  }
8 голосов
/ 26 марта 2014

Решение от Apple:

Из документации Apple

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

Если приложение уже установленона устройстве пользователя баннер разумно меняет свое действие, и нажатие на баннер просто откроет приложение.Если у пользователя нет вашего приложения на его устройстве, нажатие на баннер приведет его к записи приложения в App Store.Когда он возвращается на ваш сайт, в баннере появляется индикатор выполнения, указывающий, сколько времени займет загрузка.Когда приложение завершит загрузку, кнопка «Вид» изменится на кнопку «Открыть», и при нажатии на баннер откроется приложение, сохранив контекст пользователя с вашего веб-сайта.

Смарт-баннеры приложения автоматически определяют, поддерживается ли приложение напользовательское устройство.Если устройство, загружающее баннер, не поддерживает ваше приложение или если ваше приложение недоступно в местоположении пользователя, баннер не будет отображаться.

Чтобы добавить баннер Smart App на нашу веб-страницу, добавьте следующую метатег в заголовке каждой страницы, где вы хотите, чтобы баннер отображался:

ПРИМЕЧАНИЕ: Мы также можем передать аргумент приложения: например, myName и т. д..,

Проверьте, что Предоставление навигационного контекста для заголовка вашего приложения на этой странице

Обновления:

1,Как только вы закроете баннер, который появляется, он больше не будет отображаться, даже если у вас есть этот метатег в нашем html.

2.Чтобы сбросить это, запустите приложение настроек, затем выберите «Основные»> «Переслать»> «Сбросить все настройки»

.
2 голосов
/ 09 января 2014

Вы можете просто прочитать возвращаемое значение из метода - (BOOL) openURL: (NSURL ) url *, если это НЕТ, это означает, что целевое приложение не установлено.В следующем фрагменте кода приведен пример использования схемы URL-адреса navon:

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 за исправление.

...