@Alistair chỉ ra trong câu trả lời này rằng đôi khi người dùng sẽ quay lại trình duyệt sau khi mở ứng dụng. Một người bình luận cho câu trả lời đó chỉ ra rằng thời gian giá trị được sử dụng phải được thay đổi tùy thuộc vào phiên bản iOS. Khi nhóm của chúng tôi phải giải quyết vấn đề này, chúng tôi thấy rằng các giá trị thời gian cho thời gian chờ ban đầu và cho biết liệu chúng tôi có quay lại trình duyệt hay không và thường không hoạt động cho tất cả người dùng và thiết bị.
Thay vì sử dụng ngưỡng chênh lệch thời gian tùy ý để xác định xem chúng tôi có quay lại trình duyệt hay không, việc phát hiện các sự kiện "pagecoat" và "pagehow" là điều hợp lý.
Tôi đã phát triển trang web sau đây để giúp chẩn đoán những gì đang xảy ra. Nó bổ sung chẩn đoán HTML khi các sự kiện diễn ra, chủ yếu là do sử dụng các kỹ thuật như ghi nhật ký bảng điều khiển, cảnh báo hoặc Trình kiểm tra web, jsfiddle.net, v.v ... đều có nhược điểm trong quy trình làm việc này. Thay vì sử dụng ngưỡng thời gian, Javascript sẽ đếm số lượng sự kiện "trang da" và "trang cách" để xem liệu chúng có xảy ra hay không. Và tôi thấy rằng chiến lược mạnh mẽ nhất là sử dụng thời gian chờ ban đầu là 1000 (thay vì 25, 50 hoặc 100 được báo cáo / đề xuất bởi người khác).
Điều này có thể được phục vụ trên một máy chủ cục bộ, ví dụ python -m SimpleHTTPServer
và được xem trên iOS Safari.
Để chơi với nó, nhấn liên kết "Mở ứng dụng đã cài đặt" hoặc "Ứng dụng chưa cài đặt". Các liên kết này sẽ khiến ứng dụng Bản đồ hoặc App Store mở tương ứng. Sau đó, bạn có thể quay lại Safari để xem trình tự và thời gian của các sự kiện.
(Lưu ý: điều này sẽ chỉ hoạt động với Safari. Đối với các trình duyệt khác (như Chrome), bạn phải cài đặt trình xử lý cho các sự kiện tương đương với trang / hiển thị).
Cập nhật: Như @Mikko đã chỉ ra trong các bình luận, các sự kiện pagehow / page leather chúng tôi đang sử dụng dường như không còn được hỗ trợ trong 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>