fix: open and download (#529)
* fix: open and download * fix: remove listener * fix: mobile event * fix: mobile download * fix: remove * fix: replace click * fix: adjust code order * fix: open type * fix: open link * fix: open link * fix: open link * fix: open link * fix: open link * fix: open link * fix: open link * fix: open link * fix: open link * fix: open link * fix: open link
This commit is contained in:
parent
3508262d1d
commit
1eb29cd614
|
|
@ -6,29 +6,120 @@
|
||||||
</head>
|
</head>
|
||||||
<body>
|
<body>
|
||||||
<script>
|
<script>
|
||||||
document.addEventListener("DOMContentLoaded", function() {
|
const getDeviceType = () => {
|
||||||
var fallbackLink = 'https://appflowy.io/download/'+window.location.search+window.location.hash;
|
const ua = navigator.userAgent;
|
||||||
|
|
||||||
// Mobile
|
if (/(iPad|iPhone|iPod)/g.test(ua)) {
|
||||||
const isiOS = navigator.userAgent.match(/iPad|iPhone|iPod/);
|
return 'iOS';
|
||||||
const isAndroid = navigator.userAgent.match(/Android/);
|
} else if (/Android/g.test(ua)) {
|
||||||
|
return 'Android';
|
||||||
|
} else {
|
||||||
|
return 'Desktop';
|
||||||
|
}
|
||||||
|
};
|
||||||
|
const deviceType = getDeviceType();
|
||||||
|
const isMobile = deviceType !== 'Desktop';
|
||||||
|
const getFallbackLink = () => {
|
||||||
|
|
||||||
if (isiOS) {
|
if (deviceType === 'iOS') {
|
||||||
fallbackLink = 'https://testflight.apple.com/join/6CexvkDz';
|
return 'https://testflight.apple.com/join/6CexvkDz';
|
||||||
} else if (isAndroid) {
|
} else if (deviceType === 'Android') {
|
||||||
fallbackLink = 'https://play.google.com/store/apps/details?id=io.appflowy.appflowy';
|
return 'https://play.google.com/store/apps/details?id=io.appflowy.appflowy';
|
||||||
|
} else {
|
||||||
|
return 'https://appflowy.io/download/#pop';
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
const getDuration = () => {
|
||||||
|
switch (deviceType) {
|
||||||
|
case 'iOS':
|
||||||
|
return 250;
|
||||||
|
default:
|
||||||
|
return 1500;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
const APPFLOWY_SCHEME = 'appflowy-flutter://';
|
||||||
|
|
||||||
|
const iframe = document.createElement('iframe');
|
||||||
|
iframe.style.display = 'none'
|
||||||
|
iframe.src = APPFLOWY_SCHEME;
|
||||||
|
|
||||||
|
const openSchema = () => {
|
||||||
|
if (isMobile) return window.location.href = APPFLOWY_SCHEME;
|
||||||
|
document.body.appendChild(iframe);
|
||||||
|
setTimeout(() => {
|
||||||
|
document.body.removeChild(iframe);
|
||||||
|
}, 1000);
|
||||||
|
};
|
||||||
|
|
||||||
|
const openAppFlowy = (force) => {
|
||||||
|
openSchema();
|
||||||
|
|
||||||
|
if (force) return;
|
||||||
|
|
||||||
|
const initialTime = new Date();
|
||||||
|
let interactTime = initialTime;
|
||||||
|
let waitTime = 0;
|
||||||
|
const duration = getDuration();
|
||||||
|
|
||||||
|
const updateInteractTime = () => {
|
||||||
|
interactTime = new Date();
|
||||||
|
};
|
||||||
|
|
||||||
|
document.removeEventListener('mousemove', updateInteractTime);
|
||||||
|
document.removeEventListener('mouseenter', updateInteractTime);
|
||||||
|
|
||||||
|
const checkOpen = setInterval(() => {
|
||||||
|
waitTime = new Date() - initialTime;
|
||||||
|
|
||||||
|
if (waitTime > duration) {
|
||||||
|
clearInterval(checkOpen);
|
||||||
|
if (isMobile || new Date() - interactTime < duration) {
|
||||||
|
document.getElementById('download-link').click();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}, 20);
|
||||||
|
|
||||||
|
if (!isMobile) {
|
||||||
|
document.addEventListener('mouseenter', updateInteractTime);
|
||||||
|
document.addEventListener('mousemove', updateInteractTime);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Attempt to redirect
|
document.addEventListener('visibilitychange', () => {
|
||||||
window.location = 'appflowy-flutter://'+window.location.search+window.location.hash;
|
const isHidden = document.hidden;
|
||||||
|
if (isHidden) {
|
||||||
|
clearInterval(checkOpen);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
window.onpagehide = () => {
|
||||||
|
clearInterval(checkOpen);
|
||||||
|
};
|
||||||
|
|
||||||
|
window.onbeforeunload = () => {
|
||||||
|
clearInterval(checkOpen);
|
||||||
|
};
|
||||||
|
|
||||||
|
};
|
||||||
|
document.addEventListener("DOMContentLoaded", function() {
|
||||||
|
document.getElementById('open-appflowy').addEventListener('click', (e) => {
|
||||||
|
e.preventDefault();
|
||||||
|
openAppFlowy(true);
|
||||||
|
});
|
||||||
|
|
||||||
|
document.getElementById('download-link').addEventListener('click', (e) => {
|
||||||
|
e.preventDefault();
|
||||||
|
window.open(getFallbackLink(), '_current');
|
||||||
|
});
|
||||||
|
|
||||||
|
openAppFlowy();
|
||||||
|
|
||||||
// Update the fallback download link
|
|
||||||
document.getElementById('download-link').href = fallbackLink;
|
|
||||||
});
|
});
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<h1>Opening AppFlowy</h1>
|
<h1>Opening AppFlowy</h1>
|
||||||
<p>If AppFlowy does not open, you can click <a href="appflowy-flutter://">here</a> to launch the app.</p>
|
<p>If AppFlowy does not open, you can click <a id="open-appflowy" href="#">here</a> to launch the app.</p>
|
||||||
<p>If AppFlowy is not installed, you can <a id="download-link" href="#">download AppFlowy manually</a>.</p>
|
<p>If AppFlowy is not installed, you can <a id="download-link" href="#">download AppFlowy manually</a>.</p>
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue