Navigateur iPhone: Vérifier si l'application iPhone est installée à partir du navigateur
J'ai de la page web où j'ai un Bouton qui ouvre une application (si installé) ou dirige à l'App store si l'application n'est pas installée.
Tout cela fonctionne si l'Application est installée (je l'appelle "MYAPP://"). Toutefois, si l'application n'est pas installé Safari affiche le message d'erreur "impossible d'ouvrir l'URL" et c'est tout. Est-il possible de désactiver ce message de JScript ou est-il une autre manière de trouver de JScript si l'application installée (au lieu de frapper URL d'application)?
À un MODÉRATEUR: j'ai vu quelqu'un a demandé question similaire et Modérateur à tort marqué comme en double. S'il vous plaît comprendre que la question a été spécifiquement de le faire à partir du Navigateur.
Trouvé un peu adapté la solution ici
BTW, si quelqu'un intéressé par la façon de faire la même chose pour Android, voici le code. Nous utilisons Dojo de la bibliothèque:
dojo.io.iframe.send({
url: "yourApp://foo/bar",
load: function(resp) {
//nothing to do since it will automagically open App
},
error: function () {
window.location = "go to Android market";
}
});
source d'informationauteur Andrei V
Vous devez vous connecter pour publier un commentaire.
À Branche nous utilisons une forme de code ci-dessous: à noter que l'iframe fonctionne sur plusieurs navigateurs. Il vous suffit de remplacer dans votre URI de l'application et de votre App Store lien. Par la façon dont, à l'aide de l'iframe silences de l'erreur si ils n'ont pas l'application installée. C'est génial!
Si d'autres ont de meilleures solutions pour détecter si le schéma d'URI fait appel a échoué, veuillez les poster! Je n'en ai pas vu, et j'ai passé une tonne de temps à la recherche. Toutes les solutions s'appuient sur l'utilisateur de toujours être sur la page et le setTimeout tir.
voici un code qui fonctionne sur iOs, même si le "ne Peut pas ouvrir URL" toujours afficher.
Merci pour android solution.
Je pense que vous pouvez toujours utiliser l'application de l'url pour faire un test. Essayez en l'enveloppant dans un
try...catch
bloc,J'ai combiné un peu de choses et utilisé le code suivant pour vérifier si il est un appareil iOS avant d'utiliser le try/catch méthode de chazbot. Malheureusement, l'appareil envoie toujours une boîte pop-up à l'utilisateur indiquant l'adresse n'est pas valide...quelqu'un sait si ce comportement est normal pour essayer d'ouvrir une URL non valide dans un "essayer" bloc?
Il ya quelques choses que vous pouvez faire pour améliorer sur d'autres réponses. Depuis iOS 9, un lien peut être ouvert dans une
UIWebView
ou dans unSFSafariViewController
. Vous souhaitez peut-être gérer différemment.La
SFSafariViewController
actions des cookies dans les applications, et avec la construction dans le Safari. Donc, dans votre application, vous pouvez faire une demande par le biais d'unSFSafariViewController
qui permettra de définir un cookie qui a dit: "mon application a été installée". Par exemple, vous ouvrez votre site web, en demandant à votre serveur pour définir ce témoin. Chaque fois que vous obtenez une demande d'unSFSafariViewController
vous pouvez vérifier que les cookies et les rediriger versMYAPP://
si vous le trouvez, ou à l'app store si vous ne le faites pas. Pas besoin d'ouvrir une page web et faire une redirection javascript, vous pouvez faire une 301 de votre serveur. Des applications commeMessages
ouSafari
partager ces cookies.La
UIWebView
est très délicate, car il est totalement en bac à sable et partagé pas de cookies avec quoi que ce soit d'autre. De sorte que vous aurez à revenir à ce qui a été décrit dans d'autres réponses:Je l'ai trouvé ennuyeux que cela demandera à l'utilisateur s'il souhaite quitter l'application en cours (aller à votre application), même si votre application n'est pas installée. (de façon empirique qui semble vrai à partir d'un
UIWebView
si vous le faites dans le cours normal de Safari, par exemple, qui n'arrivera jamais), mais c'est tout ce que nous avons!Vous pouvez différencier les
UIWebView
de laSFSafariViewController
à partir de votre serveur, car ils ont de différent de l'agent utilisateur en-tête: leSFSafariViewController
contient Safari tandis que leUIWebView
ne l'est pas. Par exemple:D'autres considérations:
"Can not open URL"
message. J'ai réagi en supprimant le cookie après quelques essais qui n'ont pas l'ouverture de l'application (qui, je le sais car à chaque application ouverte, je suis à la réinitialisation de cet échec de la tente cookie)setInterval
ousetTimeout
. Le problème avec le délai d'attente est que si il déclenche alors une invite est sur, il sera ignoré. Par exemple, si vous ouvrez le lien à partir de Messenger, le système d'exploitation vous demande de "Laisser Messenger? Vous êtes sur le point d'ouvrir une autre application" lorsque l'iframe essaie de charger votre application. Si vous ne répondez pas dans les 500ms de la temporisation, la redirection dans le délai sera ignoré.UIWebView
est en bac à sable, vous pouvez lui donner un témoin de l'identifier, de le faire passer dans votre deeplink, et enregistrez ce code correspondant à votre appareil avec l'application sur votre serveur lorsque votre application s'ouvre. La prochaine fois, si vous voyez ce qu'un cookie dans la demande en provenance de laUIWebView
vous pouvez vérifier si elle correspond à un dispositif connu avec l'application et de rediriger directement avec une 301 comme avant.