안녕하세요. 질문하나가 있어서 글 남깁니다.
웹페이지에서 어플리케이션이 있는지 여부를 확인. 있으면 어플리케이션을 호출하고 없으면 앱스토어를 호출하여 다운로드가 가능하도록 합니다.
이를 위해
- 카카오톡을 통한 웹페이지 url 전달
- url call -> 카카오톡 웹페이지를 통해서 open
- 어플리케이션 설치 확인.
3.1 어플리케이션이 설치되어 있으면, 어플리케이션 호출 및 1의 url 페이지내에서 web visibility 확인. hidden 이면 아무 작업 X
3.2 어플리케이션이 설치되어 있지 않으면, App 스토어 호출 후 다운로드 가능하도록 가이드.
여기 3.1에서 어플리케이션을 호출했음에도 web visibility 가 hidden 이 아닌 visible 로 detect 됩니다.
ios에서만 그러는데… ios의 특징일까요…ㅠ?
아래는 소스일부입니다.
저기서 어플리케이션이 열려도 document.hidden은 false값이되고 나머지는 읽히지도 않습니다…
setIntervalTime = () => {
let now = +new Date();
let hidden = ‘’;
if (typeof document.hidden !== “undefined”) {
alert('hidden ’ + document.hidden);
hidden = “hidden”;
} else if (typeof document.mozHidden !== “undefined”) {
alert('mozHidden ’ + document.mozHidden)
hidden = “mozHidden”;
} else if (typeof document.msHidden !== “undefined”) {
alert('msHidden ’ + document.msHidden)
hidden = “msHidden”;
} else if (typeof document.webkitHidden !== “undefined”) {
alert('webkitHidden ’ + document.webkitHidden)
hidden = “webkitHidden”;
}
alert(document.visibilityState); // visibilityState도 계속 visible이 됩니다.
if ((now - startTime < 1000) && !(document[hidden])) {
let marketUrl = "";
if (isAndroid) {
marketUrl = androidMarketUrl;
} else if (isIos) {
marketUrl = iosMarketUrl;
}
window.location.href = marketUrl;
}
}
};
setTimeout(setIntervalTime, 800);
if (isAndroid) {
openAndroid();
} else if (isIos) {
openiOS();
} else {
alert('제공되지 않는 운영체제 입니다.');
console.error("Unsupported OS");
clearTimeout(setIntervalTime);
setIntervalTime = null;
}
function openAndroid() {
const iframe = document.createElement('iframe');
iframe.style.visivility = 'hidden';
iframe.src = url;
document.body.appendChild(iframe);
document.body.removeChild(iframe);
}
function openiOS() {
const iframe = document.createElement('iframe');
iframe.style.visivility = 'hidden';
iframe.src = url;//'schemeName://hostName?param1=someValue1¶m2=someValue2';
document.body.appendChild(iframe);
document.body.removeChild(iframe);
// window.location.href = url;
}