@Alistair a souligné dans cette réponse que, parfois, les utilisateurs seront de retour pour le navigateur après l'ouverture de l'application. Un intervenant la réponse à cette question ont indiqué que le temps de l'utilisation de valeurs a dû être modifiée en fonction de la version iOS. Lors de notre équipe a eu à faire face à cela, nous avons constaté que les valeurs de temps pour le délai d'attente initiale et dire que l'on avait renvoyé au navigateur a dû être à l'écoute, et souvent ne fonctionne pas pour tous les utilisateurs et les périphériques.
Plutôt que d'utiliser un arbitraire de la différence de temps de seuil pour déterminer si nous avions renvoyé au navigateur, il fait sens pour détecter les "pagehide" et "pageshow" des événements.
J'ai développé la page web suivante pour aider à diagnostiquer ce qui se passait. Il ajoute du code HTML de diagnostic comme les événements se déroulent, principalement parce que l'utilisation de techniques comme la console de journalisation, alertes, ou de l'Inspecteur Web, jsfiddle.net etc tous avaient leurs inconvénients dans ce flux de travail. Plutôt que d'utiliser un seuil de temps, le Javascript compte le nombre de "pagehide" et "pageshow" des événements pour voir si elles ont eu lieu. Et j'ai trouvé que le plus robuste de la stratégie est d'utiliser un délai d'attente initiale de 1000 (plutôt que le 25, 50, ou 100 déclarés/suggéré par d'autres).
Cela peut être servi sur un serveur local, par exemple, python -m SimpleHTTPServer
et visualisés sur iOS Safari.
De jouer avec elle, appuyez sur le bouton "Ouvrir une application installée" ou "Application non installée" des liens. Ces liens devraient entraîner respectivement l'application Maps ou l'App Store pour l'ouvrir. Vous pouvez ensuite revenir à Safari pour voir la séquence et le calendrier des événements.
(Note: cela fonctionne pour Safari. Pour les autres navigateurs (Chrome), vous auriez à installer des gestionnaires pour les pagehide/show-événements équivalents).
<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>