wake-up-neo.net

Wie vermeide ich einen iOS-Safari-Alarm, wenn ich versuche, eine nicht installierte native App zu öffnen?

Ich habe nach einer Möglichkeit gesucht, eine native iOS-App über den Browser zu öffnen. Ich habe hier eine anständige Lösung gefunden: Ist es möglich, ein http + -domänenbasiertes URL-Schema für iPhone-Apps wie YouTube und Maps zu registrieren?

Diese Lösung funktioniert hervorragend, wenn Sie die App installiert haben. Aber wenn ein Benutzer diese App nicht installiert hat, gibt Safari eine Fehlermeldung aus: "Safari kann die Seite nicht öffnen, da die Adresse ungültig ist."

Gibt es eine Möglichkeit, dieses Verhalten zu verhindern und stattdessen den Benutzer zum Herunterladen der App aufzufordern?

40
Dima Feldman

Hier ist eine Lösung, die für mich funktioniert:

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
ElizaS

benutze iframe.

$('<iframe />').attr('src', "appname://").attr('style', 'display:none;').appendTo('body');
5
Kohei Iwasaki

Um dies zu lösen und keine iOS-Safari-Warnung zu vermeiden, habe ich einen anderen Ansatz verwendet, der auch einen Iframe behandelt, jedoch ohne JQuery- und Listener-Ereignisse. Das funktioniert einwandfrei.

    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
akruspe

Ich verwende Meta Refresh als Fallback, da dies ohne Javascript funktioniert. Dieser Code funktioniert unter iOS und 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/

1
Pablo Moretti