Uruchamianie aplikacji lub app store z Safari?

Wiem już, jak uruchomić aplikację z safari, ale czy można sprawdzić, czy aplikacja jest zainstalowana przed uruchomieniem? Myślę, aby uruchomić app store, jeśli aplikacja nie jest obecnie zainstalowana na iPhonie.

Author: Filip Radelic, 2011-08-06

4 answers

Nie można sprawdzić, czy aplikacja jest zainstalowana ze strony internetowej. Możesz to zrobić wewnątrz innej aplikacji, sprawdzając, czy schemat url można otworzyć za pomocą metody UIApplication-canOpenURL:, ale nie ma javascript równoważny do tego.

Można jednak zastosować następujące obejście:

<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>

Ten kod ustawi limit czasu na łączu, który wywoła funkcję open_appstore, jeśli ten limit czasu się skończy. Ponieważ łącze jest skierowane na niestandardowy adres URL aplikacji, Safari spróbuje otworzyć ten link i jeśli to możliwe, otworzy aplikację i zatrzyma timer, więc Link AppStore nie zostanie otwarty.

Jeśli link do aplikacji nie może zostać otwarty, gdy skończy się czas, wyświetli wyskakujące okienko błędu z informacją, że nie może otworzyć strony (nie można się tego pozbyć), ale natychmiast przejdzie do AppStore i odrzuci ten błąd.


IOS 9 dodaje naprawdę fajną funkcję, która pozwala aplikacji otworzyć adres URL http / s: Universal Links


W iOS 10 jest wyskakujące okienko z napisem "Otwórz w [Nazwa aplikacji] " Po dotknięciu łącza i zainstalowaniu aplikacji. Jeśli użytkownik nie dotknie "Open " w podanym timeout, To rozwiązanie użyje opcji awaryjnej. Ponieważ 300ms jest zbyt krótki, aby cokolwiek dotknąć, To rozwiązanie zawsze zawodzi na iOS 10.

 82
Author: Filip Radelic,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-03-07 14:56:10

To działało dla mnie z podobną sytuacją: w którym chciałem otworzyć aplikację gmaps, jeśli była obsługiwana - w przeciwnym razie przejdź do strony gmap bezpośrednio.

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;
  }
}
Wygląda na to, że działa całkiem dobrze dla mojego przypadku użycia.

Aktualizacja: Jeśli chcesz zrobić nowe okno w trybie awaryjnym, nadal pozwala to na wyświetlenie komunikatu o błędzie ios. Aby go obejść, spróbuj tego.

  try {
    document.location = link;
  } catch(err) {
    window.location.reload(true);
    window.open(fallback, '_blank');
  }
 11
Author: William Hall,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-06-26 14:30:10

Rozwiązanie od Apple:

Z Dokumentacji Apple

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

Jeśli aplikacja jest już zainstalowana na urządzeniu użytkownika, baner inteligentnie zmienia swoją akcję, a stuknięcie w baner po prostu otworzy aplikację. Jeśli użytkownik nie ma twojej aplikacji na swoim urządzeniu, dotknij banera przeniesie go do wpisu aplikacji w App Store. Po powrocie na Twoją stronę pojawi się pasek postępu w banerze, wskazujący, jak długo trwa pobieranie. Gdy aplikacja zostanie pobrana, przycisk Widok zmieni się na przycisk Otwórz, a stuknięcie w baner otworzy aplikację, zachowując kontekst użytkownika z witryny.

Banery aplikacji Smart automatycznie określają, czy aplikacja jest obsługiwana na urządzeniu użytkownika. Jeśli urządzenie ładuje baner nie obsługuje aplikacji lub jeśli aplikacja nie jest dostępna w lokalizacji użytkownika, baner nie zostanie wyświetlony.

Aby dodać baner Smart App do naszej strony, umieść następujący meta tag w nagłówku każdej strony, na której ma się pojawić baner:

Uwaga: możemy również przekazać app-argument: like myName, itd.,

Sprawdź, czy dostarczanie kontekstu Nawigacyjnego do nagłówka aplikacji w na tej stronie

Aktualizacje:

1. Po zamknięciu banera, który się wyświetla, nie będzie on wyświetlany ponownie, nawet jeśli masz ten meta tag w naszym html.

2. Aby zresetować, uruchom aplikację Ustawienia, a następnie przejdź do Ogólne>Resent>Resetuj wszystkie ustawienia

 8
Author: Vijay-Apple-Dev.blogspot.com,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-04-08 05:20:08

Możesz po prostu odczytać wartość zwracaną z metody -(BOOL)OpenURL:(nsurl) url*, jeśli nie, oznacza to, że aplikacja docelowa nie jest zainstalowana. Poniższy kod daje przykład użycia schematu URL navigon:

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];
}

Podziękowania dla zsen za korektę.

 2
Author: Zeb,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-04-30 13:50:39