Kakao 로그인
- 우선 카카오 로그인은 카카오 공식 문서에 잘 설명되어 있습니다 -> https://developers.kakao.com/docs/latest/ko/kakaologin/ios
Kakao Developers
카카오 API를 활용하여 다양한 어플리케이션을 개발해보세요. 카카오 로그인, 메시지 보내기, 친구 API, 인공지능 API 등을 제공합니다.
developers.kakao.com
- 그래도 순서대로 해봅시다!
- 우선 https://developers.kakao.com/console/app 에 들어가 어플리케이션 추가하기
- 앱 아이콘, 이름, 사업자명 추가
- 플랫폼 설정해주기
- 플랫폼 등록해주기
- 카카오 로그인 클릭 -> 활성화
- 동의 항목 설정 후 저장
- 동의 현황 미리 보기를 누르면 확인해 볼 수 있다!
- 자 이제 XCode로 넘어와서 kakoOpenSDK 설치
- info.plist 설정
- Queried URL Schemes 타입을 Array로 설정 후 안에 item0에 kakaokompassauth, item1에 kakaolink를 넣어줍니다.
- URL Schema 설정
- 본인의 네이티브 앱키를 kako뒤에 붙혀서 URL Schemes에 넣어주면 됩니다.
- AppDelegate내 didFinishLaunchingWithOptions 함수 내에서 초기화 해줍니다.
- kakoAppKey값은 본인의 네이티브키 값을 그대로 넣어주면됩니다.(앞에 kakao 붙히지 않음)
KakaoSDK.initSDK(appKey: kakaoAppKey)
- AppDelegate에 사용자 인증 로직 추가해줍니다.
import KakaoSDKAuth
...class AppDelegate: UIResponder, UIWindowSceneDelegate {
...
func application(_ app: UIApplication, open url: URL, options: [UIApplication.OpenURLOptionsKey : Any] = [:]) -> Bool {
if (AuthApi.isKakaoTalkLoginUrl(url)) {
return AuthController.handleOpenUrl(url: url)
}
return false
}
...
}
- 이제 카카오 로그인 로직을 VC 혹은 VM에 작성해줍니다.
- 먼저 loginAction 실행 -> UserApi.isKakaoTalkLoginAvailable()로 카카오톡이 깔려있는지 확인해줌
- 깔려 있을시 카카오톡 실행
- 안 깔려 있을시 웹 브라우저로 카카오톡 실행
//kakao
private func loginAction() {
if (UserApi.isKakaoTalkLoginAvailable()) {
UserApi.shared.loginWithKakaoTalk { [weak self](oauthToken, error) in
if let error = error {
print(error)
self?.makeToastRelay.accept("로그인에 실패했습니다. 다시 시도해주세요.")
} else {
self?.setUserInfo()
}
}
} else {
UserApi.shared.loginWithKakaoAccount { [weak self] (oauthToken, error) in
if let error = error {
print(error)
self?.makeToastRelay.accept("로그인에 실패했습니다. 다시 시도해주세요.")
} else {
self?.setUserInfo()
}
}
}
}
- 로그인 액션이 문제 없이 성공했을 경우 setUserInfo 실행
- 제공해주는 user내에 필요한 값을 빼와서 사용하면 됩니다!
private func setUserInfo() {
UserApi.shared.me { [weak self] (user, error) in
if let error = error {
print(error)
} else {
guard let self = self else { return }
guard let userId = user?.id else {return}
guard let email = user?.kakaoAccount?.email else { return }
guard let profileImage = user?.kakaoAccount?.profile?.profileImageUrl else { return }
guard let nickname = user?.kakaoAccount?.profile?.nickname else { return }
print(email)
print(profileImage)
print(nickname)
}
- 짠 아래와 같이 정상적으로 출력되는 것을 확인할 수 있습니다.
- 이제 이걸 구조체에 넣어서 서버와 통신해주거나 하는 다른 작업들을 처리할 수 있게 되었습니다!
'IS' 카테고리의 다른 글
iOS Swift - 개인 앱 출시 프로젝트 - FURY (0) | 2023.02.28 |
---|---|
iOS Swift - Rx Input Output pattern (0) | 2023.02.26 |
iOS Swift - Service Level Project(SLP) 회고 (0) | 2023.02.13 |
RxSwift(Observable, Observe, Subject, Relay etc) (0) | 2022.10.29 |
iOS Collection View APIs (1) | 2022.10.18 |