webentwicklung-frage-antwort-db.com.de

iOS9: Versuchen Sie, die App nach Möglichkeit über das Schema zu öffnen oder leiten Sie sie ansonsten zum App Store weiter

Meine Frage bezieht sich nur auf iOS9!

Ich habe eine HTML Landing Page und versuche, den Benutzer über das URL-Schema zu meiner App umzuleiten, wenn die App installiert ist, oder ansonsten zum Appstore umleiten .

Mein Code ist:

document.addEventListener("DOMContentLoaded", function(event) {

  var body = document.getElementsByTagName('body')[0];
  body.onclick = function () {
    openApp();
  };
});

var timeout;

function preventPopup() {

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

function openApp(appInstanceId, platform) {

  window.addEventListener('pagehide', preventPopup);
  document.addEventListener('pagehide', preventPopup);

  // create iframe
  var iframe = document.createElement("iframe");
  document.body.appendChild(iframe);
  iframe.setAttribute("style", "display:none;");
  iframe.src = 'myscheme://launch?var=val';

  var timeoutTime = 1000;
  timeout = setTimeout(function () {

    document.location = 'https://iTunes.Apple.com/app/my-app';

  }, timeoutTime);
}

Das Problem ist, dass der Trick iframe in SafariiOS9 Nicht funktioniert.

Irgendeine Idee warum?

Mein iframe Trick basiert auf this Antwort.

39
gran33

Der iframe-Trick funktioniert nicht mehr - ich vermute, dass Apple) mehr Entwickler ermutigt, Universal Links schneller zu implementieren.

Sie können immer noch window.location='your-uri-scheme://'; und nach 500 ms auf den App Store zurückgreifen. Es gibt einen "Tanz" zwischen Popups, wenn Sie diesen Ansatz wählen, wie wir es bei Branch tun (wir tun es als Fallback, wenn Universal Links nicht funktionieren).

window.location = 'your-uri-scheme://'; // will result in error message if app not installed
setTimeout(function() {
   // Link to the App Store should go here -- only fires if deep link fails                
   window.location = "https://iTunes.Apple.com/us/app/myapp/id123456789?ls=1&mt=8";
}, 500);

Ich wünschte, ich hätte eine bessere Antwort für dich. iOS 9 ist definitiv etwas eingeschränkter.

Um eine hilfreiche Übersicht über die für Universal Links erforderlichen Funktionen zu erhalten, lesen Sie meine Antwort hier oder lesen Sie dieses Tutorial

23
st.derrick

Wie bereits erwähnt Einstellung window.location unter iOS 9 funktioniert immer noch. Dadurch wird jedoch ein Dialogfeld "In App öffnen" geöffnet. Ich habe ein Beispiel für https://bartt.me/openapp gegeben:

  1. Startet Twitter, wenn auf In Twitter-App öffnen geklickt wird.
  2. Fällt zurück auf die Twitter-App im App Store.
  3. Leitet auf Twitter oder den App Store um , ohne dass der Benutzer auswählt Öffnen im Im App-Dialogfeld öffnen.
  4. Funktioniert in allen Browsern unter iOS und Android.

Weitere Informationen finden Sie in der Quelle von https://lab.bartt.me/openapp .

2
Bart Teeuwisse

Versuchen Sie vielleicht, Ihnen App-Unterstützung für Universal Links zu geben

Idee: Vermeiden Sie benutzerdefinierte (JavaScript, iframe) Lösungen in Safari und ersetzen Sie Ihren Code durch einen unterstützten Universal Link.

Beispiel

<html>
<head>
...
</head>
<body>
    <div class"app-banner-style">
        <a href="http://yourdomain.com">In app open</a> 
    </div>
...content
</body>
</html>

wenn Ihre App Universal Links unterstützt (z. B. yourdomain.com), müssen Sie Ihre Domain (und Ihren Pfad) konfigurieren und iOS9 sollte auf den Link reagieren, mit dem Sie Ihre App öffnen. Das ist nur Theorie , aber ich denke, sollte funktionieren :)

https://developer.Apple.com/library/prerelease/ios/documentation/General/Conceptual/AppSearch/UniversalLinks.html#//Apple_ref/doc/uid/TP40016308-CH12

1
carlos.baeza

iFrame Hack funktioniert nicht mehr in ios9. Mögliche Lösung ist die Verwendung von zwei Tasten. Beispiel:

$('#goToStoreBtn').text( "go to store" ).click(function(event){
    event.preventDefault();
    event.stopPropagation();
    window.location = storeUrl; // https://iTunes.Apple.com/...
});

$('#goToAppBtn').text( "go to app" ).click(function(event){
    event.preventDefault();
    event.stopPropagation();
    window.location = appUrl;  // myApp://...
});
0
xac