@Alistair wskazał w tej odpowiedzi że czasami użytkownicy wracają do przeglądarki po otwarciu aplikacji. Komentator tej odpowiedzi wskazał, że użyte wartości czasów musiały zostać zmienione w zależności od wersji iOS. Kiedy nasz zespół musiał sobie z tym poradzić, odkryliśmy, że wartości czasu dla początkowego limitu czasu i stwierdzenia, czy wróciliśmy do przeglądarki, musiały zostać dostrojone i często nie działały dla wszystkich użytkowników i urządzeń.
Zamiast używać arbitralnego progu różnicy czasu do określenia, czy wróciliśmy do przeglądarki, sensowne było wykrycie zdarzeń „ukrycie strony” i „pokazu stron”.
Opracowałem następującą stronę internetową, aby pomóc zdiagnozować, co się dzieje. Dodaje diagnostykę HTML w miarę rozwoju wydarzeń, głównie dlatego, że używanie technik takich jak rejestrowanie konsoli, alerty lub Inspektor sieci, jsfiddle.net itp. Miało swoje wady w tym przepływie pracy. Zamiast używać progu czasowego, JavaScript zlicza liczbę zdarzeń „pagehide” i „pagehow”, aby sprawdzić, czy wystąpiły. Odkryłem, że najbardziej niezawodną strategią było użycie początkowego limitu czasu wynoszącego 1000 (zamiast 25, 50 lub 100 zgłoszonych / sugerowanych przez innych).
Można to udostępnić na serwerze lokalnym, np. python -m SimpleHTTPServer
I wyświetlić na iOS Safari.
Aby się nią bawić, naciśnij łącze „Otwórz zainstalowaną aplikację” lub „Aplikacja niezainstalowana”. Te linki powinny spowodować otwarcie odpowiednio aplikacji Mapy lub App Store. Następnie możesz wrócić do Safari, aby zobaczyć sekwencję i czas wydarzeń.
(Uwaga: to zadziała tylko dla Safari. W przypadku innych przeglądarek (takich jak Chrome) musisz zainstalować programy obsługi dla zdarzeń równoważnych pagehide / show).
Aktualizacja: Jak @Mikko wskazał w komentarzach, wydarzenia Pageshow / Pagehide, których używamy, najwyraźniej nie są już obsługiwane w iOS8.
<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>