@Alistair señaló en esta respuesta que a veces los usuarios volverán al navegador después de abrir la aplicación. Un comentarista de esa respuesta indicó que los valores de tiempos utilizados tenían que cambiarse dependiendo de la versión de iOS. Cuando nuestro equipo tuvo que lidiar con esto, descubrimos que los valores de tiempo para el tiempo de espera inicial y saber si habíamos regresado al navegador tenían que ajustarse, y a menudo no funcionaban para todos los usuarios y dispositivos.
En lugar de utilizar un umbral de diferencia de tiempo arbitrario para determinar si habíamos regresado al navegador, tenía sentido detectar los eventos de "ocultación de página" y "presentación de páginas".
Desarrollé la siguiente página web para ayudar a diagnosticar lo que estaba sucediendo. Agrega diagnósticos HTML a medida que se desarrollan los eventos, principalmente porque el uso de técnicas como el registro de la consola, las alertas o el Inspector web, jsfiddle.net, etc.todos tenían sus inconvenientes en este flujo de trabajo. En lugar de usar un umbral de tiempo, el Javascript cuenta el número de eventos de "ocultación de página" y "presentación de páginas" para ver si han ocurrido. Y descubrí que la estrategia más sólida era usar un tiempo de espera inicial de 1000 (en lugar de los 25, 50 o 100 reportados / sugeridos por otros).
Esto se puede servir en un servidor local, por ejemplo, python -m SimpleHTTPServer
y se puede ver en iOS Safari.
Para jugar con él, presione los enlaces "Abrir una aplicación instalada" o "Aplicación no instalada". Estos enlaces deberían hacer que se abran respectivamente la aplicación Mapas o la App Store. Luego puede regresar a Safari para ver la secuencia y el momento de los eventos.
(Nota: esto solo funcionará para Safari. Para otros navegadores (como Chrome), tendrías que instalar controladores para los eventos equivalentes a mostrar / mostrar páginas).
Actualización: como @Mikko ha señalado en los comentarios, los eventos de presentación de página / ocultación de página que estamos usando aparentemente ya no son compatibles con 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>