냅다 Gitodo! 로그인 화면으로 시작하기
Gitodo!는 Github 저장소 별 할 일 및 이슈를 관리할 수 있는 앱으로, Github 로그인이 아니면 앱을 사용할 수 없다 ..! 그런데 앱 스토어 심사 기준에 'OAuth 로그인을 사용하는 경우 애플 로그인은 필수로 구현해야 한다'는 항목이 있다. 그치만 나는 배포했지롱 ?
1차 시도
결론부터 말하자면, 명확한 이유가 있으면 OAuth 로그인을 사용하더라도 애플 로그인이 필수는 아니다 ! 나의 경우 왜 애플 로그인을 제공할 수 없는지에 대한 설명을 [App Review Information] - [notes] 항목에 적어 제출했다.
그런데 다른 문제가 있었다.
요약하자면 ... 로그인 시도 시 앱 외부로 이동하는 것은 사용자 경험 측면에서 좋지 않다는 내용이다.
내가 알고 있는 iOS 앱에서의 OAuth 로그인 과정은 아래와 같은데 ...
1. OAuth 로그인 시도
2. 로그인 페이지로 이동
3. 로그인 성공 시 앱으로 인증 코드를 보내줌
4. SceneDelegate에서 인증 코드를 받음
여기에서 로그인 페이지로 이동하는 게 당연히 앱 외부일 것이라고 생각을 했다 ... 아래 스크린샷이 앱 외부(사파리)로 이동한 모습이다.
이전에 바닐라 자바스크립트로 SPA 핑퐁 게임을 만드는 과제에서 OAuth 로그인을 처음 구현해봤는데, 이 때 다른 페이지(SPA 외부)로 요청을 보냈던 경험때문에 자연스럽게(?) 잘못 생각한 것 같다 ...
2차 시도
메일에서 안내해준대로 Safari View Controller를 사용하기로 했다. 간단히 URL을 여는 방식만 변경해주면 되는 문제라 수정 후 가벼운 마음으로 심사 제출을 했다. ( 벌써 불안 )
기존 코드 :
func loginWithGithub() {
guard let url = LoginManager.shared.getLoginURL() else { return }
UIApplication.shared.open(url)
}
변경 코드 :
func loginWithGithub() {
guard let url = LoginManager.shared.getLoginURL() else { return }
safariViewController = SFSafariViewController(url: url)
present(safariViewController!, animated: true, completion: nil)
}
결과는 ?
로그인 방식에는 문제가 없었는데 ... Github 로그인 과정에서 2FA 인증을 요구하는 바람에, 심사 과정에 문제가 있었나보다 (ㅠ ㅠ) 이런 상황을 대비하여 미리 2FA 인증을 비활성화했는데도 Github에서 다시 설정하라는 안내가 뜨는 문제라 어쩔 수 없이 심사용 계정을 만들어 다시 제출하기로 했다.
3차 시도
다시 제출을 하는 김에 ! 약간의 문제를 해결했다. ( 럭키비키잖아 🥹🍀 )
문제는 Safari View Controller에 쿠키가 저장된다는 것이다. 때문에 앱에서 로그아웃을 한 후 다른 계정으로 로그인을 하려고 해도 쿠키 정보 때문에 자동으로 이전 계정으로 로그인이 됐다. 검색 결과 Safari 앱과 Safari View Controller가 쿠키를 공유한다는데, Safari 앱에서 쿠키를 삭제해봐도 결과는 같았다. ( 왜 ..? ) 만약 Safari 앱에서 쿠키를 삭제하는 것으로 해결이 잘 된다고 해도 사용자에게 "다른 계정으로 로그인하려면 Safari 앱에서 쿠키를 삭제한 후 시도하세요"라는 안내를 하는 것이 사용자 경험 측면에서 좋지 않다는 생각이 들어 URL을 여는 방식을 다시 한 번 변경했다.
바로 WKWebView를 사용하는 방식 ! WKWebView는 아래와 같이 쿠키를 삭제할 수 있다.
private func clearCookies() {
let websiteDataTypes = Set([WKWebsiteDataTypeCookies])
let dateFrom = Date(timeIntervalSince1970: 0)
WKWebsiteDataStore.default().removeData(ofTypes: websiteDataTypes, modifiedSince: dateFrom) {
print("WKWebView Cookies 삭제 완료")
}
}
쿠키를 삭제하는 시점은 로그인 시도 직전으로 설정했다. 앱 내에서 "문의하기" 기능을 누르면 Github Wiki 페이지로 이동이 되는데, 이 때도 WKWebView를 이용하여 웹뷰를 보여주기 때문에 로그인 정보가 남아 있어야 모든 기능을 이용할 수 있기 때문이다. ( 이것도 앱 스토어 심사 기준에 포함 ! )
배포 성공 !
시작은 "Github OAuth 로그인만 가능한 앱 배포하기" 였으나 마무리는 "iOS 앱에서 URL을 여는 모든 방법"이 된 것 같다. 뉴빗은 한 번에 심사를 통과해서 이렇게 여러 번 거절 당하는 게 처음이었는데, 아침에 일어날 때마다 리젝 메일이 와있을까봐 두려웠던 며칠이었다 ...
'iOS 🍎 Swift' 카테고리의 다른 글
UITextField의 텍스트 변경 감지 (0) | 2024.09.05 |
---|---|
Xcode 메모리 누수 체크하기 (2) | 2024.08.05 |
iOS 민감한 정보 숨기기 (0) | 2024.07.18 |
타겟 간 같은 Realm 저장소 사용하기 (feat. Tuist) (0) | 2024.07.18 |
iOS/Swift 토스트 메시지 🍞 (2) | 2024.07.16 |