적당한 고통은 희열이다

- 댄 브라운 '다빈치 코드' 중에서

초보 iOS 개발자의 일상/개발 업무

[Swift iOS, JavaScript] url schemes 사용하여 웹에서 앱 호출 및 앱스토어 연결하기

hongssup_ 2021. 4. 16. 16:52
반응형

iOS url schemes open app / app store

모바일 웹에서 스키마를 이용하여 앱을 호출하고, 앱이 미설치 되어있을 경우 앱스토어로 이동하는 방법

 

URL Schemes (커스텀 스키마) 설정해주는 법

우선 url schemes 사용해서 웹에서 앱 연결해주는 건 굉장히 쉽다. 

[Targets - Info - 맨밑에 URL Types] 추가 해주고 

Identifier 와 URL Schemes(원하는 스키마 명)을 등록해줄 수 있다.

그리고 나서

info plist - URL Types - Itme 0 - URL identiifier 입력해주면 완료. 

시뮬레이터 혹은 기기에 앱을 설치하고, 홈화면으로 돌아가서 사파리를 열어주고 

주소창에 설정해준 URL Schemes + :// 를 넣고 이동하면 앱이 뜨는 걸 확인할 수 있다. 

만약 내가 설정한 URL Schemes가 "testapp" 이라면 주소창에 "testapp://" 를 입력하면 된다.  

+ 나는 모바일 웹페이지에서 어떤 버튼을 누르면 앱이 열리도록 요청을 받아서 웹 서버 담당하시는 분께 스키마 url만 알려드렸다.  

 

앱이 설치되어 있을 경우, 이 스키마 url만 설정해주면 아주 간단하게 구현이 가능한데 

문제는 앱이 설치되어 있지 않을 경우!!!

 

하.. 이거때매 스트레스 많이 받았다. 

아무리 생각해봐도 앱이 설치되어 있지 않는데 대체 내가 Xcode 프로젝트에서 뭘 해줄 수 있지? 

그냥 서버에서 앱스토어 url로 연결시켜줘야하는 거 아닌가??

근데 일단 해달라고 하니까 방법을 오지게 찾아보는데도 마땅한 해결책이 나오지 않았다. 

(차라리 검색결과가 없으면 몰라.. 막 할 수 있는 것처럼 해놓고 결국 마땅한 답변이 없었음. 

내가 혹시 못찾은 거라면 제발 누가 알려줘요.. )

 

암튼 그래서 결국 웹의 JavaScript에서 코드를 추가해주기로 했다. 

(내가 JavaScript 코드까지 찾아보게 될줄이야.. )

 

var userAgent = navigator.userAgent;
var visitTime = (new Date()).getTime();
if (userAgent.match(/Android/i)) { //안드로이드일 때
    location.href = 'intent://main_web#Intent;scheme="testapp://";package=""';
} else if (userAgent.match(/iPhone/i)) { //아이폰일 때
    setTimeout(function() {
        if ((new Date()).getTime() - visitTime < 3000) {
            location.href = "앱스토어 주소";
        }
    } ,2500);
    setTimeout(function() {
        location.href = "testapp://";
    } ,0);
}

이런 식으로 안드로이드일 때와 아이폰일 때를 나눠서 해주면 된다는데

아이폰이 훨씬 까다롭구만 ㅠㅠ 

 

이렇게 하니까 연결이 되긴 하는데 문제가

앱이 설치가 안되어있을 때 앱으로 바로 이동하는 게 아니라

'주소가 유효하지 않기 때문에 Safari가 해당 페이지를 열 수 없습니다' 라는 alert 창이 뜬다...

이거 뜨고 나서 앱스토어가 열리긴 함.. 

근데 이거 어떻게 없애죠..?

 

참고 : 모바일 웹에서 앱 호출하기 

 


다양한 방법을 찾아보다, 딥링크에 대해 알게 되었고

스키마 대신 Firebase DynamicLink를 사용하여 웹에서 앱 호출 및 앱스토어로 연결하게끔 만들어주어 해당 문제를 해결하였다.

 

참고 : 딥링크란? + Firebase 이용한 Deep Link iOS


2021. 12. 09 

글 올린지 8개월 만에 찾은 해답.. ㅎ

스키마를 이용해서 앱스토어 주소를 그대로 넣어서 이동시키면 '주소가 유효하지 않기 때문에 Safari가 해당 페이지를 열 수 없습니다' 라는 alert 창이 뜨는데, 이유는 모르겠다. 그냥 사파리 방침?이라고 한다.

근데 앱스토어 주소 대신 "itms-apps://itunes.apple.com/app/" 뒤에다 해당 앱의 앱스토어 Apple ID를 넣어서 

location.href = "itms-apps://itunes.apple.com/app/AppleID";

이렇게 연결 url을 설정해주니깐 앱스토어 페이지로 연결이 잘 되는 것 같다! 😊 

 

 


혹시나 제 글이 도움이 되셨다면 하트 한번 눌러주시면 감사하겠습니다 🥰

iOS 개발자분들 모두 화이팅입니다👍🏻

728x90
반응형