Przekierowanie do aplikacji, jeśli jest zainstalowana, w przeciwnym razie do App Store

Wiem, że można połączyć się bezpośrednio z aplikacją w iOS rejestrując Niestandardowy schemat (np. so://), a także można połączyć się z aplikacją w appstore przez itunes.

W wielu przypadkach idealnym rozwiązaniem jest dostarczenie linku, który przekieruje do aplikacji , Jeśli jest zainstalowana, i do sklepu, jeśli nie. Czy to możliwe, a jeśli tak, to w jaki sposób?

Dodano dla jasności , scenariusz jest taki, że otwieram link (http) z e-maila na moim iPhonie, który mnie zaprasza aby dołączyć do grupy w aplikacji. Jeśli użytkownik ma zainstalowaną aplikację na tym urządzeniu, powinna się otworzyć, w przeciwnym razie link http powinien przekierować do itunes.

Author: jscs, 2012-12-27

8 answers

Nie da się tego sprawdzić. Istnieje jednak dobre obejście.

Pomysł jest w zasadzie taki:

    Gdy po raz pierwszy otworzysz aplikację, otworzysz mobilną przeglądarkę safari z poziomu aplikacji na predefiniowany adres URL na serwerze]} Na tym adresie URL można skonfigurować plik cookie, jak appinstalowane do użytkowników mobilnego safari Jeśli nie masz konta, możesz skorzystać z tej opcji, aby uzyskać dostęp do swojego konta.]}
  1. Wszystkie linki e-mail wskazują na Twoją stronę, ale na stronie internetowej można sprawdzić, czy przeglądarka jest mobilna Safari i czy appInstalled cookie istnieje
  2. Jeśli przeglądarka nie jest mobilną przeglądarką Safari lub plik cookie nie zostanie znaleziony, przekierowujesz do AppStore lub pozostajesz na swojej stronie.
  3. Jeśli warunki # 4 są prawdziwe, przekierowujesz użytkownika do aplikacji z zarejestrowanym schematem
  4. Jeśli aplikacja została usunięta przez użytkownika, więc Niestandardowy schemat url nie powiedzie się, masz bezpieczne przekierowanie do appstore

The 2 last kroki są wyjaśnione w tym poście

 29
Author: Lefteris,
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-05-23 12:09:58

Myślę, że prostszą odpowiedzią byłoby skonfigurowanie strony na serwerze z następującym javascript:

(function() {
  var app = {
    launchApp: function() {
      window.location.replace("myapp://");
      this.timer = setTimeout(this.openWebApp, 1000);
    },

    openWebApp: function() {
      window.location.replace("http://itunesstorelink/");
    }
  };

  app.launchApp();
})();

To w zasadzie próbuje przekierować do aplikacji i ustawia limit czasu, aby przekierować do app store, jeśli to się nie powiedzie.

Możesz nawet uczynić kod bardziej inteligentnym i sprawdzić w user agent, czy jest użytkownikiem ios, Androida lub webusera, a następnie odpowiednio je przekierować.
 63
Author: BananaNeil,
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-10-16 21:09:04

Jeśli masz stronę internetową, do której linkujesz z wiadomości e-mail ze stroną internetową zawierającą iframe z src ustawioną na niestandardowy schemat dla Twojej aplikacji, iOS automatycznie przekieruje do tej lokalizacji w aplikacji. Jeśli aplikacja nie zostanie zainstalowana, nic się nie stanie. Umożliwia to Głębokie łącze do aplikacji, jeśli jest zainstalowana, lub przekierowanie do sklepu z aplikacjami, Jeśli nie jest zainstalowana.

Na przykład, jeśli masz zainstalowaną aplikację twitter i przejdź do strony internetowej zawierającej następujące znaczniki, zostaniesz natychmiast przekierowany do aplikacji. Jeśli nie masz zainstalowanej aplikacji Twitter, zobaczysz tekst "aplikacja Twitter nie jest zainstalowana."

<!DOCTYPE html>
<html>
    <head>
    <title>iOS Automatic Deep Linking</title>
    </head>
    <body>
        <iframe src="twitter://" width="0" height="0"></iframe>
        <p>The Twitter App is not installed</p>
    </body>
</html>
[4]} Oto bardziej dokładny przykład, który przekierowuje do App store, jeśli aplikacja nie jest zainstalowana:
<!DOCTYPE html>
<html>
    <head>
    <title>iOS Automatic Deep Linking</title>
    <script src='//code.jquery.com/jquery-1.11.2.min.js'></script>
    <script src='//mobileesp.googlecode.com/svn/JavaScript/mdetect.js'></script>
    <script>
      (function ($, MobileEsp) {
        // On document ready, redirect to the App on the App store.
        $(function () {
          if (typeof MobileEsp.DetectIos !== 'undefined' && MobileEsp.DetectIos()) {
            // Add an iframe to twitter://, and then an iframe for the app store
            // link. If the first fails to redirect to the Twitter app, the
            // second will redirect to the app on the App Store. We use jQuery
            // to add this after the document is fully loaded, so if the user
            // comes back to the browser, they see the content they expect.
            $('body').append('<iframe class="twitter-detect" src="twitter://" />')
              .append('<iframe class="twitter-detect" src="itms-apps://itunes.com/apps/twitter" />');
          }
        });
      })(jQuery, MobileEsp);
    </script>
    <style type="text/css">
      .twitter-detect {
        display: none;
      }
    </style>
    </head>
    <body>
    <p>Website content.</p>
    </body>
</html>
 15
Author: q0rban,
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-01-04 16:51:58

"Smart App Banners" - nie jestem pewien, kiedy się pojawili, ale po znalezieniu tego postu szukającego tych samych, a następnie inteligentnych bannerów aplikacji, jest to kontynuacja.

Banery Smart App to jednolinijkowy meta tag html w nagłówku każdej strony, którą chcesz zaoferować swojej aplikacji przez internet:

<meta name="apple-itunes-app" content="app-id=myAppStoreID, affiliate-data=myAffiliateData, app-argument=myURL">

, który pokazuje tę ikonę u góry strony i "otwórz tę stronę" za pomocą aplikacji lub przekierowania do sklepu z aplikacjami.

Tutaj wpisz opis obrazka

Metadane dla tej strony na iPhone wygląda tak (oczywiście anonimowo):

<meta name="apple-itunes-app" content="app-id=605841731, app-argument=lync://confjoin?url=https://meet.rtc.yourcorporatedomain.com/firstName.lastName/conferenceID">

Apple Developer Documentation-promowanie aplikacji za pomocą banerów Smart App

 10
Author: Cerniuk,
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
2018-05-26 15:43:36

Tak, to całkiem proste. Wymaga to, aby aplikacja, którą chcesz otworzyć, miała schemat URL zadeklarowany w pliście:

//if you can open your app
if([[UIApplication sharedApplication] canOpenURL:[NSURL URLWithString:@"yourapp://"]])
{
    [[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"yourapp://"]];
}
else
{
    [[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"ituneappstorelink"]];
}
 8
Author: rooster117,
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
2012-12-27 01:10:05

Istnieje kilka prostych kroków, aby osiągnąć to działanie

Krok 1

Go - > Project (select target) -> info -> URL Types

Tutaj wpisz opis obrazka

Utwórz schemat URL w Xcode Like this

Tutaj wpisz opis obrazka tutaj schemat URL jest myApp (lepiej mieć wszystkie znaki małymi literami).

Krok 2

Setup Delegate jeśli planujesz odbierać parametry/ciągi zapytań z adresu URL

Oto kod :

- (BOOL)application:(UIApplication *)application
            openURL:(NSURL *)url
            options:(NSDictionary<UIApplicationOpenURLOptionsKey,id> *)options {

     NSLog(@"APP : simple action %@",url.scheme);

    if ([url.scheme hasPrefix:@"myapp"]) {

        NSLog(@"APP inside simple %@",url.absoluteString);


        NSURLComponents *urlComponents = [NSURLComponents componentsWithURL:url
                                                    resolvingAgainstBaseURL:NO];
        NSArray *queryItems = urlComponents.queryItems;
        NSString * abc = [self valueForKey:@"abc"
                           fromQueryItems:queryItems];
        NSString * xyz = [self valueForKey:@"xyz"
                           fromQueryItems:queryItems];


        NSLog(@"Sid up = %@", abc);

        NSLog(@"PID up = %@", xyz);

      // you can do anything you want to do here



        return YES;
    }
return NO;
}

Koniec pracy pobocznej Xcode.

Krok 3

Odwołując się do kodu @ BananaNeil tutaj, ponieważ nie jestem facetem Front end

(function() {
  var app = {
    launchApp: function() {
      window.location.replace("myApp://share?abc=12&xyz=123");
      this.timer = setTimeout(this.openWebApp, 1000);
    },

    openWebApp: function() {
      window.location.replace("http://itunesstorelink/");
    }
  };

  app.launchApp();
})();

Mam nadzieję, że to pomoże wam wszystkim

 3
Author: aftab muhammed khan,
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
2019-02-09 12:04:36

Jest tu mnóstwo skomplikowanych przypadków, więc najprostszym rozwiązaniem jest pozwolić komuś innemu zająć się tymi rzeczami.

This Is what https://branch.io / do. Możesz użyć ich darmowego planu, aby osiągnąć dokładnie to, co chcesz, z garścią bonusowych funkcji

  • statystyki
  • możesz przekazać informacje wraz z linkiem, a zostaną one pobrane, nawet jeśli użytkownik musi najpierw wykonać instalację
  • link będzie działał na pulpicie (domyślnie wyświetli tekst instalacji link do telefonu komórkowego)

Nie jestem związany z Branch.io ale używam ich produktu.

 2
Author: Confused Vorlon,
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
2019-03-01 16:15:17

Jeśli ktoś nadal tkwi w tym problemie i potrzebuje najprostszego rozwiązania, pokochasz node-deeplink

1.) Jeśli aplikacja jest zainstalowana: wywołanie aplikacji przez głębokie linkowanie zawsze wywoła componentDidMount głównego komponentu. Więc możesz tam dołączyć słuchacza. Like:

Linking.getInitialURL()
      .then(url => {
        if (url) {
          this.handleOpenURL({ url });
        }
      })
      .catch(console.error);

    Linking.addEventListener('url', this.handleOpenURL);



handleOpenURL(event) {
    if (event) {
      console.log('event = ', event);
      const url = event.url;
      const route = url.replace(/.*?:\/\//g, '');
      console.log('route = ', route);
      if(route.match(/\/([^\/]+)\/?$/)) {
        const id = route.match(/\/([^\/]+)\/?$/)[1];
        const routeName = route.split('/')[0];

        if (routeName === 'privatealbum') {
          Actions.privateAlbum({ albumId: id });
        }
      }
    }
  }

2. Jeśli aplikacja nie jest zainstalowana: po prostu skonfiguruj trasę na serwerze i pakiet node-deeplink obsłuży mostek między przeglądarką internetową a app store, gdy aplikacja nie jest zainstalowana w Twoim komputerze mobile.

Przez to obie sprawy będą rozpatrywane bez walki

 1
Author: Lata Tiwari,
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
2020-01-07 07:35:06