Je souhaite créer une page Web, une page qui redirigera un iPhone vers l'App-Store si l'application n'est pas installée sur l'iPhone, mais si l'application est installée sur l'iPhone, je veux qu'elle ouvre l'application.
J'ai déjà implémenté une URL personnalisée dans l'application iPhone, j'ai donc une URL pour l'application qui ressemble à quelque chose comme:
myapp://
Et si cette URL n'est pas valide, je souhaite que la page soit redirigée vers l'App Store. Est-ce possible?
Si l'application n'est pas installée sur le téléphone et que j'écris l'url myapp: // dans safari, tout ce que j'obtiens est un message d'erreur.
Même s'il existe un vilain hack avec javascript j'aimerais vraiment savoir?
iphone
ios
web-applications
mobile-safari
Joakim Engstrom
la source
la source
Réponses:
Autant que je sache, vous ne pouvez pas, à partir d'un navigateur, vérifier si une application est installée ou non.
Mais vous pouvez essayer de rediriger le téléphone vers l'application, et si rien ne se passe, redirigez le téléphone vers une page spécifiée, comme ceci:
Si la deuxième ligne de code donne un résultat, la première ligne n'est jamais exécutée.
J'espère que cela t'aides!
Question similaire:
la source
Pour approfondir la réponse acceptée, vous devez parfois ajouter du code supplémentaire pour gérer les personnes qui retournent le navigateur après le lancement de l'application - cette fonction setTimeout s'exécutera chaque fois qu'elles le feront. Alors, je fais quelque chose comme ça:
De cette façon, s'il y a eu un gel dans l'exécution du code (c.-à-d. Changement d'application), il ne fonctionnera pas.
la source
iOS Safari a une fonctionnalité qui vous permet d'ajouter une bannière «intelligente» à votre page Web qui sera liée soit à votre application, si elle est installée, soit à l'App Store.
Pour ce faire, ajoutez une
meta
balise à la page. Vous pouvez même spécifier une URL d'application détaillée si vous souhaitez que l'application fasse quelque chose de spécial lors de son chargement.Les détails se trouvent sur la page de promotion des applications d' Apple avec des bannières d'applications intelligentes .
Le mécanisme présente les avantages d'être simple et de présenter une bannière standardisée. L'inconvénient est que vous n'avez pas beaucoup de contrôle sur l'apparence ou l'emplacement. De plus, tous les paris sont désactivés si la page est affichée dans un navigateur autre que Safari.
la source
À partir de 2017, il semble qu'il n'y ait aucun moyen fiable de détecter qu'une application est installée, et l'astuce de redirection ne fonctionnera pas partout.
Pour ceux comme moi qui ont besoin de créer un lien profond directement à partir d'e-mails (assez courant), il convient de noter ce qui suit:
L'envoi d'e-mails avec appScheme: // ne fonctionnera pas correctement car les liens seront filtrés dans Gmail
La redirection automatique vers appScheme: // est bloquée par Chrome: je suppose que Chrome nécessite que la redirection soit synchrone à une interaction de l'utilisateur (comme un clic)
Vous pouvez maintenant créer un lien profond sans appScheme: // et c'est mieux, mais cela nécessite une plate-forme moderne et une configuration supplémentaire. Android iOS
Il convient de noter que d'autres personnes y ont déjà réfléchi en profondeur. Si vous regardez comment Slack implémente sa fonction de "lien magique", vous pouvez remarquer que:
la source
Vous pouvez consulter ce plugin qui tente de résoudre le problème. Il est basé sur la même approche que celle décrite par missemisa et Alastair etc., mais utilise à la place une iframe cachée.
https://github.com/hampusohlsson/browser-deeplink
la source
@Alistair a souligné dans cette réponse que parfois les utilisateurs reviennent au navigateur après l'ouverture de l'application. Un commentateur à cette réponse a indiqué que les valeurs de temps utilisées devaient être modifiées en fonction de la version d'iOS. Lorsque notre équipe a dû faire face à cela, nous avons constaté que les valeurs de temps pour le délai d'expiration initial et indiquer si nous étions retournés au navigateur devaient être réglées, et souvent ne fonctionnaient pas pour tous les utilisateurs et appareils.
Plutôt que d'utiliser un seuil de différence de temps arbitraire pour déterminer si nous étions retournés au navigateur, il était logique de détecter les événements "pagehide" et "pageshow".
J'ai développé la page Web suivante pour aider à diagnostiquer ce qui se passait. Il ajoute des diagnostics HTML au fur et à mesure que les événements se déroulent, principalement parce que l'utilisation de techniques telles que la journalisation de la console, les alertes ou l'inspecteur Web, jsfiddle.net, etc. avaient tous leurs inconvénients dans ce flux de travail. Plutôt que d'utiliser un seuil de temps, le Javascript compte le nombre d'événements "pagehide" et "pageshow" pour voir s'ils se sont produits. Et j'ai trouvé que la stratégie la plus robuste était d'utiliser un délai initial de 1000 (plutôt que les 25, 50 ou 100 rapportés / suggérés par d'autres).
Cela peut être servi sur un serveur local, par exemple
python -m SimpleHTTPServer
et affiché sur iOS Safari.Pour jouer avec, appuyez sur les liens «Ouvrir une application installée» ou «Application non installée». Ces liens doivent provoquer respectivement l'ouverture de l'application Maps ou de l'App Store. Vous pouvez ensuite retourner dans Safari pour voir la séquence et le calendrier des événements.
(Remarque: cela ne fonctionnera que pour Safari. Pour les autres navigateurs (comme Chrome), vous devrez installer des gestionnaires pour les événements pagehide / show-equivalent).
Mise à jour: comme @Mikko l'a souligné dans les commentaires, les événements pageshow / pagehide que nous utilisons ne sont apparemment plus pris en charge dans iOS8.
la source
J'ai besoin de faire quelque chose comme ça, j'ai fini par choisir la solution suivante.
J'ai une URL de site Web spécifique qui ouvrira une page avec deux boutons
1) Button One aller sur le site Web
2) Bouton deux aller à l'application (iphone / téléphone Android / tablette), vous pouvez revenir à un emplacement par défaut à partir d'ici si l'application n'est pas installée (comme une autre URL ou un magasin d'applications)
3) cookie pour mémoriser le choix des utilisateurs
la source
Après avoir compilé quelques réponses, j'ai trouvé le code suivant. Ce qui m'a surpris est que la minuterie ne pas se congeler sur un PC (Chrome, FF) ou Android Chrome - la gâchette a travaillé en arrière - plan, et la vérification de la visibilité était la seule information fiable.
JS Fiddle
la source
La solution de date est bien meilleure que les autres, j'ai dû incrémenter l'heure sur 50 comme ça c'est un exemple de Tweeter:
le seul problème sur Mobile IOS Safari est lorsque l'application n'est pas installée sur l'appareil, et Safari affiche donc une alerte qui échoue automatiquement lorsque la nouvelle URL est ouverte, de toute façon est une bonne solution pour le moment!
la source
Je n'ai pas lu tout cela, mais peut-être utiliser un iframe et ajouter la source à "mon application: // peu importe".
Ensuite, vérifiez régulièrement l'intervalle défini de la page est 404ou non.
Vous pouvez également utiliser l'appel Ajax. Si la réponse 404, l'application n'est pas installée.
la source