web-dev-qa-db-fra.com

Déterminer si une application existe et lancer cette application sur iOS

Existe-t-il un moyen de vérifier iOS pour voir si une autre application a été installée, puis lancée? Si ma mémoire est bonne, cela n'était pas possible dans les premières versions, mais cela a-t-il changé?

74
Rob

Faisable, mais difficile.

Le lancement d'applications installées, telles que les applications FB ou Twitter, est effectué à l'aide du schéma d'URL personnalisé. Ceux-ci peuvent être utilisés à la fois dans d'autres applications et sur des sites Web.

Voici un article sur comment faire cela avec votre propre application .

Voir si l'URL est là, cependant, peut être délicat. Un bon exemple d'application détectant les applications installées est Boxcar . La chose ici est que Boxcar a une connaissance avancée des URL personnalisées. Je suis à peu près certain (99%) qu'il y a un canOpenURL:, il est donc simple de mettre en œuvre le schéma personnalisé de l'application que vous souhaitez cibler à l'avance.

Voici une liste partielle de certaines des URL les plus populaires que vous pouvez vérifier.

Toutefois, si vous souhaitez rechercher des applications et en déduire leurs URL, cette opération ne peut pas être effectuée sur un appareil non JB.

Voici un article de blog expliquant comment les employés de Bump ont géré le problème.

65
Doug Stephen

Il y a un script comme celui-ci.

<script type="text/javascript">
function startMyApp()
{
  document.location = 'yourAppScheme://';
  setTimeout( function()
  {
      if( confirm( 'You do not seem to have Your App installed, do you want to go download it now?'))
      {
        document.location = 'http://iTunes.Apple.com/us/app/yourAppId';
      }
  }, 300);
 }
</script>

En appelant ce script à partir du Web (<a href="#" onclick="startMyApp()">Try to start MyApp</a>), vous pouvez déterminer si votre application avec le schéma "yourAppScheme" est installée sur le périphérique ou non.

L'application se lancera si elle est installée sur l'appareil et si "yourAppScheme" y est enregistré. Si l'application n'est pas installée, vous pouvez suggérer à l'utilisateur d'installer cette application à partir d'iTunes.

41
Ievgen

Pour vérifier si une application est installée (par exemple, Clear):

BOOL installed = [[UIApplication sharedApplication] canOpenURL:[NSURL URLWithString:@"clearapp://"]];

Pour ouvrir cette application:

BOOL success = [[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"clearapp://"]];
22
Gavin Hope

Masque le message d'erreur si l'application n'est pas installée

À Branch , nous utilisons une forme du code ci-dessous - notez que l'iframe fonctionne sur plusieurs navigateurs. Remplacez simplement l'URI de votre application et votre lien App Store.

<!DOCTYPE html>
<html>
    <body>
        <script type="text/javascript">
            window.onload = function() {
                // Deep link to your app goes here
                document.getElementById("l").src = "my_app://";

                setTimeout(function() {
                    // Link to the App Store should go here -- only fires if deep link fails                
                    window.location = "https://iTunes.Apple.com/us/app/my.app/id123456789?ls=1&mt=8";
                }, 500);
            };
        </script>
        <iframe id="l" width="1" height="1" style="visibility:hidden"></iframe>
    </body>
</html>

Il existe une deuxième possibilité qui repose d’abord sur les cookies et la redirection javascript uniquement comme solution de secours. Voici la logique:

Lorsqu'un utilisateur sans l'application tape d'abord sur un lien vers votre application, il est redirigé directement vers l'App Store. Pour ce faire, un lien vers votre application est en réalité une page générée dynamiquement sur vos serveurs avec la redirection. Vous créez un cookie et enregistrez une "empreinte digitale" d'adresse IP, de système d'exploitation, de version de système d'exploitation, etc. sur votre backend.

Lorsque l'utilisateur installe l'application et l'ouvre, vous collectez et envoyez une autre "empreinte digitale" à votre serveur. Maintenant, votre serveur sait que le lien est installé Lors de toute visite ultérieure des liens associés à votre application, vos serveurs s'assurent que la page de redirection générée dynamiquement mène à l'application, et non à l'App Store, en fonction du cookie envoyé avec la demande.

Cela évite la redirection laide mais implique une tonne de travail supplémentaire.

12
st.derrick

À ma connaissance, en raison de problèmes de confidentialité, vous ne pouvez pas savoir si une application est installée sur l'appareil. Pour contourner ce problème, essayez de lancer l'application et, si elle ne se lance pas, invitez l'utilisateur à cliquer sur l'URL de secours. Pour éviter l'erreur de safari mobile, j'ai constaté que le placer dans un iframe permettait de résoudre le problème.

Voici un extrait de code que j'ai utilisé.

<form name="mobileForm" action="mobile_landing.php" method="post">
        <input type="hidden" name="url" value="<?=$web_client_url?>">
        <input type="hidden" name="mobile_app" value="<?=$mobile_app?>">
        <input type="hidden" name="device_os" value="<?=$device_os?>">
    </form>
<script type="text/javascript">
        var device_os = '<? echo $device_os; ?>'; 


        if (device_os == 'ios'){

        var now = new Date().valueOf(); 
        setTimeout(function () { 
            if (new Date().valueOf() - now > 100) 
                return;

        document.forms[0].submit(); }, 5); 


        var redirect = function (location) {
            var iframe = document.createElement('iframe');
            iframe.setAttribute('src', location);
            iframe.setAttribute('width', '1px');
            iframe.setAttribute('height', '1px');
            iframe.setAttribute('position', 'absolute');
            iframe.setAttribute('top', '0');
            iframe.setAttribute('left', '0');
            document.documentElement.appendChild(iframe);
            iframe.parentNode.removeChild(iframe);
            iframe = null;
        };

        setTimeout(function(){
            window.close()
            }, 150 );

        redirect("AppScheme");
2
Adrian Phan

J'ai eu du mal avec cela récemment, et voici la solution que j'ai trouvée. Notez qu'il n'y a toujours pas de moyen sûr de détecter si l'application a été lancée ou non.

Je sers une page de mon serveur qui redirige vers une variante spécifique à l'iPhone lors de la détection de l'agent utilisateur. Les liens vers cette page ne peuvent être partagés que par courrier électronique/SMS ou Facebook.

La page restitue une version minimale du document référencé, mais tente ensuite automatiquement d'ouvrir l'application dès son chargement en utilisant un <iframe> caché (AJAX échoue toujours dans cette situation - vous ne pouvez pas utiliser jQuery ou XMLHttpRequest pour cela. ).

Si le modèle d'URL est enregistré, l'application s'ouvrira et l'utilisateur pourra faire tout ce dont il a besoin. Quoi qu'il en soit, la page affiche un message comme celui-ci en bas: "L'application at-elle été lancée? Sinon, vous ne l'avez probablement pas encore installée ...." avec un lien vers le magasin.

1
user2117956