comment prévenir iOS safari alert lors de l'ouverture d'une application native non installée?

j'ai cherché un moyen d'ouvrir une application native iOS à partir du navigateur. J'ai trouvé une bonne solution ici: est-il possible d'enregistrer un schéma D'URL http+basé sur le domaine pour les applications iPhone, comme YouTube et Maps?

cette solution fonctionne très bien lorsque vous avez l'application installée. mais quand un utilisateur n'a pas cette application installée - safari envoie un message d'erreur qui dit "Safari ne peut pas ouvrir la page parce que l'adresse n'est pas valide."

y a-t-il un moyen de prévenir ce comportement et d'inviter l'utilisateur à télécharger l'application?

39
demandé sur Community 2013-10-31 12:37:33

5 réponses

Voici une solution qui fonctionne pour moi:

var timeout;

function preventPopup() {
    clearTimeout(timeout);
    timeout = null;
    window.removeEventListener('pagehide', preventPopup);
}

function openApp() {    
    $('<iframe />')
    .attr('src', appurl)
    .attr('style', 'display:none;')
    .appendTo('body');

    timeout = setTimeout(function() {
            document.location = appstore;
    }, 500);
    window.addEventListener('pagehide', preventPopup);
} 
27
répondu ElizaS 2014-07-31 09:04:26

utilisez iframe.

$('<iframe />').attr('src', "appname://").attr('style', 'display:none;').appendTo('body');
5
répondu Kohei Iwasaki 2014-07-11 08:05:03

pour résoudre ce problème et éviter Aucune alerte safari iOS non désirée j'ai utilisé une approche différente manier aussi une iframe, mais sans jQuery et écouteur événements. Il fonctionne parfaitement.

    var iframe = document.createElement("iframe");

    iframe.style.border = "none";
    iframe.style.width = "1px";
    iframe.style.height = "1px";
    iframe.onload = function () {
        document.location = alt;
    };
    iframe.src = nativeSchemaUrl; //iOS app schema url

    window.onload = function(){
        document.body.appendChild(iframe);
    }

    setTimeout(function(){
        window.location = fallbackUrl; //fallback url
    },300);
2
répondu akruspe 2015-06-03 11:32:43

j'utilise meta refresh comme repli car cela fonctionne sans javascript. Ce code fonctionne dans iOS et Android.

<html>
  <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
    <meta http-equiv="refresh" content="1; url=http://www.facebook.com">
    <title>Redirecting..</title>
    <script>
    function tryOpenApp() {
                var iframe = document.createElement("iframe");
                iframe.style.border = "none";
                iframe.style.width = "1px";
                iframe.style.height = "1px";
                iframe.src = "fb://feed/";
                document.body.appendChild(iframe);
    }
    </script>
  </head>
  <body onload="tryOpenApp()">
  </body>
</html>

Test http://static-pmoretti.herokuapp.com/deep-link /

0
répondu Pablo Moretti 2015-08-02 21:12:42

la bonne façon de le faire est d'utiliser des bannières D'applications intelligentes: https://developer.apple.com/library/ios/documentation/AppleApplications/Reference/SafariWebContent/PromotingAppswithAppBanners/PromotingAppswithAppBanners.html

Si votre application n'est pas installée, la bannière va permettre à l'utilisateur de l'installer. S'il est installé, il ouvrira l'application, et vous aurez une façon de spécifier des arguments D'URL personnalisés pour passer à l'application.

-1
répondu Thomas Deniau 2014-03-19 09:36:52