web-dev-qa-db-fra.com

Rediriger vers l'application si elle est installée, sinon vers l'App Store

Je sais qu'il est possible de se connecter directement à une application dans iOS en enregistrant un schéma personnalisé (par exemple, donc: //). Il est également possible de se connecter à l'application dans l'appstore via iTunes.

Dans de nombreux cas, le flux idéal consiste à fournir un lien qui redirige vers l'application si elle est installée et vers le magasin si ce n'est pas le cas. Est-ce possible, et si oui comment?

Ajouté pour plus de clarté , le scénario est le suivant: j'ouvre un lien (http) depuis un e-mail sur mon iphone qui m'invite à rejoindre un groupe dans une application. Si l'utilisateur a installé l'application sur ce périphérique, elle devrait s'ouvrir, sinon le lien http devrait être redirigé vers iTunes.

55
ConfusedNoob

Il n'y a aucun moyen de vérifier cela ..__ Cependant, il existe une solution de contournement de Nice.

L'idée est fondamentalement ceci:

  1. La première fois que vous ouvrez votre application, vous ouvrez Safari mobile depuis votre application vers une URL prédéfinie sur votre serveur.
  2. Sur cette URL, vous configurez un cookie, tel que appInstalled pour le safari mobile de l'utilisateur
  3. Vous renvoie ensuite l'utilisateur à votre application avec votre schéma enregistré (comme FB le fait avec SSO)
  4. Tous vos liens de messagerie pointent vers votre site Web, mais vous vérifiez sur le site si le navigateur est Safari pour mobile et si le cookie appInstalled existe.
  5. Si le navigateur n’est pas Safari mobile ou si le cookie n’est pas trouvé, vous êtes redirigé vers l’AppStore ou restez sur votre page Web.
  6. Si les conditions de # 4 sont vraies, vous redirigez l'utilisateur vers votre application avec le schéma enregistré
  7. Si l'application a été supprimée par l'utilisateur et que le schéma d'URL personnalisé échoue, vous disposez d'une redirection sans faille vers l'Appstore.

Les 2 dernières étapes sont expliquées sur ce SO post

26
Lefteris

Je pense que la réponse la plus simple serait de configurer une page sur votre serveur avec le javascript suivant:

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

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

  app.launchApp();
})();

Cela tente essentiellement de rediriger vers votre application et définit un délai d'expiration pour la redirection vers l'App Store en cas d'échec.

Vous pouvez même rendre le code un peu plus intelligent et vérifier l'agent utilisateur pour voir s'il s'agit d'un utilisateur ios, Android ou d'un utilisateur Web, puis les rediriger de manière appropriée. 

49
BananaNeil

Si vous avez un lien vers une page Web à partir du courrier électronique avec la page Web contenant une iframe avec le src défini sur le modèle personnalisé pour votre application, iOS sera automatiquement redirigé vers cet emplacement dans l'application. Si l'application n'est pas installée, rien ne se passera. Cela vous permet de créer un lien profond dans l'application si elle est installée ou de rediriger vers l'App Store s'il n'est pas installé.

Par exemple, si l'application Twitter est installée et que vous accédez à une page Web contenant le balisage suivant, vous serez immédiatement dirigé vers l'application. Si l'application Twitter n'était pas installée, le texte "L'application Twitter n'est pas installée" s'affiche.

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

Voici un exemple plus complet qui redirige vers l'App Store si l'application n'est pas installée:

<!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>
14
q0rban

Ouais c'est assez facile. Pour cela, l'application que vous souhaitez ouvrir doit avoir un schéma d'URL déclaré dans le plist:

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

"Smart App Banners" - pas sûr de savoir quand ils sont arrivés, mais après avoir trouvé ce post cherchant la même chose, puis Smart App Banners, ceci est un suivi.

Les bannières Smart App sont une méta-balise HTML d'une seule ligne dans l'en-tête de chaque page que vous souhaitez offrir à votre application sur le Web:

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

qui montre cette icône en haut de la page et "Ouvrir cette page dans" avec l'application ou le routage vers l'App Store. 

 enter image description here

Les métadonnées de cette page sur l'iPhone se présentent comme suit (anonymisées bien entendu):

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

Documentation pour les développeurs Apple - Promotion des applications avec des bannières Smart App

7
William Cerniuk

Il y a peu d'étapes simples pour réaliser cette action

Étape 1

Aller -> Projet (sélectionner la cible) -> info -> Types d'URL

 enter image description here

Créer un schéma d'URL dans Xcode

 enter image description here Ici, le schéma d'URL est myApp (il est préférable d'avoir tout le caractère en minuscule).

Étape 2

Configurez délégué si vous prévoyez de recevoir des paramètres/chaînes de requête à partir d'une URL.

Voici le code:

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

Fin du travail côté Xcode.

Étape 3

En faisant référence ici au code @BananaNeil, je ne suis pas un gars

(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();
})();

J'espère que cela vous aidera tous

1
aftab muhammed khan

Il y a un grand nombre de cas complexes dans Edge, donc la solution la plus simple consiste à laisser quelqu'un d'autre s'occuper de cela.

C’est ce que https://branch.io/ do . Vous pouvez utiliser leur forfait gratuit pour obtenir exactement ce que vous voulez, avec quelques fonctions supplémentaires.

  • statistiques
  • vous pouvez transmettre des informations avec le lien, qui sera récupéré même si l'utilisateur devait d'abord effectuer une installation
  • le lien fonctionnera sur le bureau (par défaut, il enverra un lien d'installation à votre mobile)

Je ne suis pas affilié à Branch.io, mais j'utilise leur produit.

0
Confused Vorlon