 Sign in with Apple + Rx

Sign in with Apple

Apple의 심사지침 “4.8 Apple로 로그인” 항목에 의해서 소셜 로그인 서비스를 사용하는 앱은 Apple로 로그인 기능을 동등한 옵션으로 제공해야 합니다.

그리고 이 옵션은 2020년 4월중으로 적용하라고 했었습니다.

그리고 다시 6월 말 까지로 연장되었죠.

그동안 미뤄왔던 이제 애플로그인을 적용할 때가 됐네요..
레퍼런스는 이미 많기 때문에 적용하는데 어려움은 없습니다.
근데, 이걸 Rx로 적용해서 하려고 찾아보니 의외로 없네요.

그래서 하나 만들었습니다.
라이브러리로 만들까도 했지만 코드 몇 줄 넣으면 되는 일이라 번거롭게 하지 않았습니다.


소스코드는 Gist로 공유합니다.
https://gist.github.com/iamchiwon/20aa57d4e8f6110bc3f79742c2fb6cc5

Apple Login 에 Rx를 적용하면
이렇게 됩니다.

(1) ASAuthorizationAppleIDButton 를 사용하는 경우

1
2
3
4
5
6
7
8
9
10
appleLoginButton.rx
.loginOnTap(scope: [.fullName, .email])
.subscribe(onNext: { result in
guard let auth = result.credential as? ASAuthorizationAppleIDCredential else { return }
print(auth.user)
print(auth.email)
print(auth.fullName?.givenName)
print(auth.fullName?.familyName)
})
.disposed(by: disposeBag)

(2) CustomButton 을 사용하는 경우

1
2
3
4
5
6
7
8
9
10
11
12
customButton.rx.tap
.map { _ in ASAuthorizationAppleIDProvider() }
.flatMap { $0.rx.login(scope: [.fullName, .email], on: customButton.window!)
}
.subscribe(onNext: { result in
guard let auth = result.credential as? ASAuthorizationAppleIDCredential else { return }
print(auth.user)
print(auth.email)
print(auth.fullName?.givenName)
print(auth.fullName?.familyName)
})
.disposed(by: disposeBag)

행복하시길..