엄코딩의 개발 일지

React Native 환경에서 개발하고, Apple Login 기능이 필요한 상황이라면 RN Apple Login Library를 사용하는 것이 상당히 편하다는 것을 느낄 수 있다.

 

최근에 Apple Login 작업을 진행하면서 겪었던 이슈와 해결 방법에 대해서 알아보자.

 

문제 상황

 

일단 마케팅 용도로 이메일 정보가 필요한 상황에서 문제는 시작되었다.

 

우선 애플로그인시 나타나는 화면을 살펴보자.

 

위 이미지처럼 애플로그인을 진행하면 나의 이메일 공유하기, 나의 이메일 가리기 두가지 항목이 존재한다.

 

이메일을 공유한다면 유저의 실제 이메일 정보 값을 받아올 수 있었고, 가린다면 나름 암호화된 메일 주소를 받게 된다.

 

여기까지는 순조로웠다. 하지만.

 

애플 로그인은 보안상 문제로 처음 로그인시에만 email값을 주게된다. 그 이후로는 null로 온다.

 

하지만 프로젝트의 로직상 애플 로그인을 진행하고, 추가로 입력해야 하는 부분까지 진행해야 회원가입이 된다.

 

여기서 고민이 되었다. 이메일 정보를 로컬에 저장하는게 좋을지, 서버에서 저장해두는게 좋을지.

 

로컬에 저장한다면 문제점이 생긴다.

 

앱을 삭제했을때. 구체적으로 말해보자면, 앱을 켜고, 애플로그인을 하고, 추가입력화면으로 진입했을 때, 추가 입력을 하지 않고 앱을 끈 경우 로컬에 이메일을 저장했다면 문제없다. 하지만 앱을 삭제한다면? 문제는 여기서부터 생겨났다.

 

애플은 보안상( 또 보안상 ) Apple Login을 단 한번이라도 진행한 앱을 저장하고있다. ( 애플폰에서 )

 

이를 확인해볼 수 있는 방법은 아래와 같다.

 

설정 -> 자신의 Apple 프로필 클릭 -> 암호 및 보안 -> 내 Apple ID를 사용하는 앱

 

 

위와 같은 경로로 진입해본다면 Apple ID를 사용했던 앱들을 볼 수 있다. 이는 앱을 지워도 이 목록은 지워지지 않는다. 사용자가 직접 지워야 지워진다...만약 사용자가 직접 지운다면 Email 값을 받을 수 있지만....너무 좋겠지만...

 

결국 애플로그인을 한번이라도 했다면 email 정보는 저장해두어야 한다. 그렇지 않으면 null값 만을 받을 수 있기 때문에 해당 정보를 사용하기가 어렵다.

 

그래서 검색 또 검색을 한 결과 해당 결과값을 디코딩하면 이메일 정보를 확인할 수 있다는 정보를 알게되었다.

 

바로 jwt에 접속해서 진행해보았다.

 

결과값으로 받은 identityToken을 넣어보니 email 정보를 얻을 수 있었다.

 

 

( 최대한 가리면서 어떤 유형의 값인지를 보여주고 싶다보니.. 이미지가 좀 난해한 점 이해부탁드립니다. )

 

토큰속에 이메일 정보가 있었다. 

 

서버측에서 이 로직을 진행하게 되면 해결!!! ( 기존 서버에서 이미 해당 로직으로 작업하고 있어서 문제될 부분이 없었다. )