✔️ 왜 사용했는가?
보통 안드로이드에서는 구글 로그인을 사용하거나 네이버, 카카오 같은 소셜 로그인을 사용하지 애플 로그인을 사용하는 경우는 생소할 것이다. 하지만 가끔 안드로이드에서도 애플로그인을 사용하는 경우가 있을 수 있다.
내가 이번에 새롭게 시작하게 된 프로젝트는 이미 IOS 서비스가 먼저 출시되었고 애플로그인 방식만을 사용하고 있다.
그런데 만약 아이폰을 사용하던 유저가 갤럭시폰으로 갈아타게 된다면 서비스 계정을 계속 사용할 수 있어야 하기 때문에 안드로이드에서 애플로그인을 구현해야 하는 상황이 발생한 것이다.
✔️ 어떻게 구현했는가?
안드로이드에서는 애플 소셜로그인을 위한 로그인 API를 제공하지 않기 때문에 웹브라우저를 띄워 로그인을 진행해야 한다.
아래 블로그를 참고해 3가지 방법 중 트민녀인 나는 가장 깔끔해 보이고 요즘 안드로이드에서 밀고 있다는 Custom Tabs 방식을 사용했다.
**** 반드시 아래 블로그를 읽고 조금 부족하다 싶거나 에러가 났을 때 내 글을 참고하시라 ****
💡안드로이드에서 애플 로그인 구현 방법 간단 요약
- 소셜 로그인을 위해서는 애플로부터 받은 auth code, id token 필요 → 백에 넘겨주면 토큰 생성
- IOS는 자체적으로 로그인 가능한 API 있지만 안드로이드는 없기 때문에 딥링크 방식으로 auth code, id token 받아야 함
- 웹브라우저를 띄워 로그인을 진행 → 실제 프로젝트에서 운영중인 서버의 url로 애플이 auth code, id token 를 전달 → 백엔드에서는 auth code, id token 를 전달받아 안드 개발자가 지정한 url로 다시 전달 → 웹브라우저가 종료되면서 액티비티가 다시 실행되고, 액티비티에 미리 안드 개발자가 지정한 url 을 지정해 놓으면 백엔드로부터 auth code, id token 받아 파싱해 사용 가능
여기서 두개의 url이 존재하는데 이 두가지는 서로 다른 것이다.
실제 프로젝트에서 운영중인 서버의 url → 애플 서버가 auth code, id token 을 전달할 url, 백엔드가 받을 url
안드 개발자가 지정한 url → 백엔드가 안드로이드에게 auth code, id token 을 전달할 url, 안드로이드가 받을 url
✔️ 시행착오 (auth code, id token 요청)
우리 프로젝트의 AWS 서버가 존재하기 때문에 Redirect url 부분은 백엔드 개발자에게 부탁했고, 딥링크를 설정해 정보를 받아야 하는데 백엔드 개발자와 나 둘다 Redirect url 을 사용하는게 처음이다 보니 3xx 에러를 많이 마주했었다.
- 애플 로그인 개발자 계정에 실제 프로젝트에서 운영중인 서버의 url 를 명시해놨는지 확인
- custom tabs와 같은 웹뷰를 사용해 앱에서 애플로그인을 할 경우 애플 로그인 개발자 계정에 앱에 대한 도메인 명시 (우리도 그래서 돈 주고 도메인 삼…ㅜ)
- GET, POST 방식 등등 시도해보기
- CORS활성화
⇒ 1번과 2번은 필수적을 확인해야 할 요소이지만 그 외의 것들은 해결을 위해 이것저것 시도해봤던 것들인데 우리 백개발자도 CORS도 적용과 header 맵핑 방법 수정, 응답 방법 수정 등 다양한 수정을 통해서 해결했다. (아무튼 안드로이드 개발자는 위 블로그 참고해서 하면 되고 나머지는 백에게 달렸다. 그래도 같이 해결하려고 이것저것 찾아보고 이야기 해주는 과정이 중요한 것 같다.)
✔️ 시행착오 (access, refresh token 요청)
사실 token 발행을 위해서 auth code, id token 이 필요하기 때문에 굳이 백엔드에서 auth code, id token를 다시 안드로이드에게 전당해주는 것이 아니라 바로 token을 생성해 token만 안드로이드에게 줘도 된다. 하지만 나는 최대한 현재 AVIRO API 로직을 활용해 토큰을 생성하는 방식으로 구현하고 싶었기 때문에 이렇게 구현했다.
아무튼 이제 본격적으로 Access Token, Refresh Token 을 백엔드로부터 요청을 해야 하는데 자꾸만
이런 에러가 떴다….ㅠㅠ 이번에도 이것저것 바꿔보고 시도해봤었는데 솔직히 안드로이드에서는 딱히 이것과 관련해 복잡한 로직을 짤게 없어서 뭐가 문제인지 도저히 몰라 몇일 고민했었다.
** 안드로이드에서 중요한건 custom tabs 를 사용해 로그인을 할 때 사용할 클라이언트를 생성할 때 클라이언트 ID를 잘 확인하는 것!!!
생각보다 허무하게 해결했는데 아래 2가지 방법을 시도 후 해결했다ㅎㅎ
- 애플의 클라이언트 ID가 안드로이드, 백엔드에서 모두 일치하는지 확인
2. 백엔드 로직 확인
'Android' 카테고리의 다른 글
[안드로이드/아키텍쳐] 클린아키텍쳐 총정리 & 적용 중간 점검 (1) | 2024.02.10 |
---|---|
[안드로이드/RecyclerView] 리사이클러뷰 + 데이터바인딩 + MVVM 적용하기 (0) | 2024.02.03 |
[안드로이드/DI] 의존성 주입(DI) & Hilt 시작해보기! (0) | 2024.01.09 |
[안드로이드/AI] 앱에서 Segmentation 모델을 사용하기 위한 다양한 시도 (0) | 2023.08.17 |
[안드로이드/아키텍쳐] 안드로이드 공식 권장 아키텍쳐 (구vs신버전) (0) | 2023.07.19 |