본문 바로가기

내컴퓨터/컴퓨터사용하기

IOS SCHEME install check / 아이폰 앱 설치 체크 /

web에서 app을 호출하기 위해, app을 개발할때 scheme 기능을 넣어둔다.

그럼 web에서 href로 스키마를 호출해서 app을 실행할 수 있다.

 

android의 경우,

간단하지만, ios의 경우 좀 복잡하다.

 

인터넷에 많이 돌아다니는 setTimeout을 이용해서, 타이머를 걸었지만,

앱 실행하자마자, 바로 web으로 돌아와,

가만히 놔두면.. 앱스토어로 이동되는 버그가 발견되었다.

뭐, 이렇게까지 테스트하진 않겠지만,

찜찜해서 구글을 뒤져서 좋은 코드를 발견했다. 크하핫

 

 

var timeout;
function preventPopup() {
  clearTimeout(timeout);
  timeout = null;
  window.removeEventListener('pagehide', preventPopup);
}
function startApp() {
  document.location =  스키마;

  timeout = setTimeout(function(){
    if(confirm('You do not seem to have the App installed, do you want to go download it now?')){
      document.location = 마켓URL;
    }
  }, 1000);
  window.addEventListener('pagehide', preventPopup);
}

 

 

버튼 눌렀을 때 startApp()을 호출해주면 끝.

스키마에 app의 스키마를, 마켓 URL은 앱스토어 url을 넣어준다.

참고로 앱스토어 app url은

https://itunes.apple.com/app/id00000000?mt=8 <- 이런식이다. id뒤에 0000000만 본인 앱의 아이디로 바꿔주면,

앱스토어로 넘어가게 된다.

 

pagehide일경우, setTimeOut을 클리어 해주기 때문에,

웹페이지로 돌아왔을 때, 마켓으로 이동되는 버그가 사라졌다.

 

도움받은 URL :

http://www.makebetterthings.com/javascript/how-to-check-if-url-scheme-is-supported-in-ios-safari-i-using-javascript/

 

참고로, android는 스키마호출할때 저런 예외처리 해줄 필요 없이,

intent://qmenu=voicerecg&version=1#Intent;scheme=스키마;action=android.intent.action.VIEW;category=android.intent.category.BROWSABLE;package=패키지명;end

이렇게 해주면 된다.