@Alistair у цій відповіді вказав, що інколи користувачі повернуться до браузера після відкриття програми. Користувач цієї відповіді вказав, що використовувані значення часу потрібно змінювати залежно від версії iOS. Коли нашій команді довелося розібратися з цим, ми виявили, що значення часу для початкового тайм-ауту і повідомляти про те, чи повернулися ми до браузера, повинні бути налаштовані, і часто працювали не для всіх користувачів і пристроїв.
Замість того, щоб використовувати довільний поріг різниці у часі, щоб визначити, чи повернулись ми до браузера, має сенс виявити події "pagehide" та "showhow".
Я розробив наступну веб-сторінку, щоб допомогти діагностувати, що відбувається. Він додає діагностику HTML, коли події розгортаються, головним чином тому, що використання таких методів, як консольний журнал, оповіщення або веб-інспектор, jsfiddle.net тощо, всі мали свої недоліки в цьому робочому процесі. Замість того, щоб використовувати поріг часу, Javascript підраховує кількість подій "pagehide" та "showhow", щоб побачити, чи відбулися вони. І я виявив, що найбільш надійною стратегією було використання початкового тайм-ауту 1000 (а не 25, 50 або 100, про які повідомили / запропонували інші).
Це можна подавати на локальному сервері, наприклад, python -m SimpleHTTPServer
і переглядати на iOS Safari.
Щоб грати з ним, натисніть посилання "Відкрити встановлений додаток" або "Додаток не встановлено". Ці посилання повинні спричинити відкриття відповідно програми "Карти" або магазину додатків. Потім ви можете повернутися до Safari, щоб переглянути послідовність та час проведення подій.
(Примітка. Це працюватиме лише для Safari. Для інших браузерів (наприклад, Chrome) вам доведеться встановити обробники подій, що стосуються сторінки / показ-еквівалент).
Оновлення: Як @Mikko вказував у коментарях, події, які ми використовуємо, показують сторінки / сторінки, схоже, більше не підтримуються в 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>