@Alistair wies in dieser Antwort darauf hin, dass Benutzer manchmal nach dem Öffnen der App zum Browser zurückkehren. Ein Kommentator zu dieser Antwort gab an, dass die verwendeten Zeitwerte je nach iOS-Version geändert werden mussten. Als sich unser Team damit befassen musste, stellten wir fest, dass die Zeitwerte für das anfängliche Timeout und die Feststellung, ob wir zum Browser zurückgekehrt waren, angepasst werden mussten und oft nicht für alle Benutzer und Geräte funktionierten.
Anstatt einen beliebigen Zeitdifferenzschwellenwert zu verwenden, um festzustellen, ob wir zum Browser zurückgekehrt sind, war es sinnvoll, die Ereignisse "pagehide" und "pageshow" zu erkennen.
Ich habe die folgende Webseite entwickelt, um zu diagnostizieren, was los ist. Im Verlauf der Ereignisse wird eine HTML-Diagnose hinzugefügt, hauptsächlich weil die Verwendung von Techniken wie Konsolenprotokollierung, Warnungen oder Web Inspector, jsfiddle.net usw. ihre Nachteile in diesem Arbeitsablauf hatte. Anstatt einen Zeitschwellenwert zu verwenden, zählt das Javascript die Anzahl der Ereignisse "pagehide" und "pageshow", um festzustellen, ob sie aufgetreten sind. Und ich fand, dass die robusteste Strategie darin bestand, ein anfängliches Zeitlimit von 1000 zu verwenden (anstelle der 25, 50 oder 100, die von anderen gemeldet / vorgeschlagen wurden).
Dies kann auf einem lokalen Server bereitgestellt werden, z. B. python -m SimpleHTTPServer
auf iOS Safari.
Um damit zu spielen, klicken Sie entweder auf die Links "Installierte App öffnen" oder "App nicht installiert". Diese Links sollten dazu führen, dass die Maps-App bzw. der App Store geöffnet wird. Sie können dann zu Safari zurückkehren, um die Reihenfolge und das Timing der Ereignisse anzuzeigen.
(Hinweis: Dies funktioniert nur für Safari. Für andere Browser (wie Chrome) müssten Sie Handler für die pagehide / show-äquivalenten Ereignisse installieren.)
Update: Wie @Mikko in den Kommentaren ausgeführt hat, werden die von uns verwendeten Pageshow / Pagehide-Ereignisse in iOS8 anscheinend nicht mehr unterstützt.
<html>
<head>
</head>
<body>
<a href="maps://" onclick="clickHandler()">Open an installed app</a>
<br/><br/>
<a href="xmapsx://" onclick="clickHandler()">App not installed</a>
<br/>
<script>
var hideShowCount = 0 ;
window.addEventListener("pagehide", function() {
hideShowCount++ ;
showEventTime('pagehide') ;
});
window.addEventListener("pageshow", function() {
hideShowCount++ ;
showEventTime('pageshow') ;
});
function clickHandler(){
var hideShowCountAtClick = hideShowCount ;
showEventTime('click') ;
setTimeout(function () {
showEventTime('timeout function '+(hideShowCount-hideShowCountAtClick)+' hide/show events') ;
if (hideShowCount == hideShowCountAtClick){
// app is not installed, go to App Store
window.location = 'http://itunes.apple.com/app' ;
}
}, 1000);
}
function currentTime()
{
return Date.now()/1000 ;
}
function showEventTime(event){
var time = currentTime() ;
document.body.appendChild(document.createElement('br'));
document.body.appendChild(document.createTextNode(time+' '+event));
}
</script>
</body>
</html>