Apple로 로그인 추가하기

leeokmin
nbt-tech
Published in
6 min readApr 28, 2020

안녕하세요. G파티에서 캐시슬라이드 스텝업의 iOS 버전(이하 스텝업)을 개발하고 있는 이옥민입니다.

NBT에 입사하고 처음 진행한 과제에 대한 회고를 하며 정리하고자 합니다. 제가 처음 진행한 과제는 스텝업에 Apple로 로그인 기능을 추가하는 것이었습니다.

Apple로 로그인

Apple로 로그인은 애플이 제공하는 새로운 서비스입니다. 이미 소유한 Apple 아이디를 이용해 앱이나 웹사이트를 빠르고 쉽게 로그인할 수 있습니다.

Apple로 로그인은 사용자 정보를 비공개할 수 있습니다. 식별자로 주로 사용하는 email 정보도 비공개 처리가 가능합니다. 비공개하는 경우 앱 개발자에게도 비공개 처리되며 임의의 이메일 주소가 제공됩니다. 제공되는 형식은 <unique-alphanumeric-string>@privaterelay.appleid.com 입니다. 참고로 <unique-alphanumeric-string> 부분은 개발문서에 명시되어 있지 않지만 10자임을 확인했습니다.

꼭 그렇게 추가 했었어야만 속이 후련했나

스텝업은 이미 페이스북, 구글, 카카오를 이용한 소셜 로그인을 지원합니다. Apple로 로그인은 이들과 거의 동일한 기능입니다. 그럼에도 추가한 이유는 앱스토어 심사 규정 사항이 추가되었기 때문입니다. 구체적인 내용은 아래와 같습니다.

4.8 Apple로 로그인
앱에서 사용자의 기본 계정을 설정 또는 인증하기 위해 타사 또는 소셜 로그인 서비스(Facebook 로그인, Google 로그인, Twitter로 로그인, LinkedIn으로 로그인, Amazon으로 로그인 또는 WeChat 로그인 등)를 사용하는 앱은 Apple로 로그인 역시 동등한 옵션으로 제공해야 합니다.

신규로 앱을 제출할 때 이심사 규정이 적용 됩니다. 기존의 앱은 6월 30일까지 위의 규정을 준수해야합니다. 원래는 4월 30일까지 였지만 기간이 연장되었습니다.

코드부터 시작하자

앱의 개발 목표는 크게 2개 입니다.

  • Apple로 로그인을 통해 유저정보를 획득
  • 획득한 유저정보로 기존의 통합 회원가입/로그인 로직을 정상적으로 동작

Apple로 로그인 기능은 AuthenticationServices 프레임워크를 이용했습니다. 애플 개발문서에 샘플 프로젝트도 있어 이를 참고해 간단히 구현했습니다. 유저정보를 획득하는 방법도 간단합니다.

다만, 이 유저정보는 최초 1회만 획득할 수 있습니다. 두번째 로그인 부터 email 값은 nil 입니다.

앱을 삭제해도 Apple로 로그인 기록은 아이폰의 설정에 남습니다. 만약 앱을 재설치 하고 다시 Apple로 로그인을 하면 어떻게 될까요? 로그인 기록이 남아 있으니 email 값이 nil이 됩니다. 사용자를 식별할 수 없겠죠. 이 이슈로 인해 Apple로 로그인을 기존 통합 회원가입/로그인 로직에 적용할 수 없었습니다.

이슈는 백엔드 개발자와 협업을 통해 해결했습니다. 추가된 로직을 정리하면 다음과 같습니다.

Apple로 로그인을 성공하면 ASAuthorizationAppleIDCredential 인스턴스를 획득합니다. 인스턴스에는 authorizationCode 라는 프로퍼티가 있습니다. 이 프로퍼티를 이용해 백엔드에서 email을 다시 획득합니다. 백엔드에서 email값을 앱으로 전달하고 이후 과정은 기존 소셜 로그인 과정과 동일합니다.

디자인도 애플스럽게

스텝업의 소셜 로그인 화면은 그림자가 있는 원형 버튼과 하단에는 서비스 이름이 표시되어 있었습니다. 애플에서 요구하는 가이드라인과 기존 디자인과 통일성을 맞춰 디자인을 수정했습니다.

Apple로 로그인이 추가된 소셜 로그인 화면, 버튼을 클릭했을 때

아쉽지만 이 디자인은 앱스토어에 심사 제출 후 반려되었습니다. Apple로 로그인 버튼이 디자인 가이드를 준수하지 않는다는군요. 예상보다 가이드라인이 더 엄격함을 느꼈습니다.

다시 살펴보니 위의 디자인은 가이드라인과 다른 두가지 문제가 있었습니다.

  • 뷰의 배경색이 버튼의 스타일과 대비되지 않는다.
  • 로고 외에 다른 요소(“Apple” 문구)가 있다.

이 문제를 해결하기 위해 Black 스타일의 버튼을 이용했고, 아래의 문구를 삭제 했습니다. 다른 소셜 로그인 버튼 디자인도 통일성을 갖추기 위해서 수정했습니다. 마침내, 글 하단의 화면으로 현재 사용자가 볼 수 있는 디자인이 완성되었습니다.

수정을 거쳐 출시된 앱 버전의 첫 화

One more thing

Apple로 로그인기능은 이를 지원하는 iOS13 이상 버전 기기에서만 동작되어야 합니다. 그래서 iOS13 미만인 기기에서는 로그인 버튼을 숨겨야 했습니다. 다행히 코드 2줄로 해결할 수 있습니다.

iOS의 버전을 확인해 13 미만인 경우 로그인 버튼을 superView에서 지우는 함수입니다. 이 함수를 ViewController의 viewDidLoad 단계에서 호출했습니다.

iOS 13 미만에서의 첫 화면

결론

개인적으로는 업무를 진행하며 스텝업의 소스코드를 파악하며 적응할 수 있던 과제였습니다. 스텝업은 앱스토어의 심사 지침을 준수하는 더 단단한 앱이 되었구요.

고민할 사항은 남아 있습니다.

  • Apple로 로그인 할 때 이메일을 비공개한 사용자의 이메일 주소 표시 방법은 어떻게 할 것인가
  • 첫 화면 디자인을 좀 더 좋게 하는 방법은 무엇인가

이런 고민들을 해결하며 더 발전하는 스텝업을 만들겠습니다. 앞으로의 성장을 기대합니다.

참조

--

--