하이염.
이번에는 IOS에서 카카오 로그인을 구현하는 방법에 대하여 알아보겠습니다.
전반적인 틀 개발의 경우 아래의 공식문서를 참고하시면 됩니다.
https://developers.kakao.com/docs/latest/ko/kakaologin/ios
우선 앱을 실행하게 되면 카카오 로그인을 위한 token의 존재 여부를 파악합니다.
if (AuthApi.hasToken()) {
UserApi.shared.accessTokenInfo { (_, error) in
if let error = error { //false
if let sdkError = error as? SdkError, sdkError.isInvalidTokenError() == true {
//sdk error
}
else {
//기타 에러
//loginBTN으로 처리
print("token error")
print(error)
}
}
else {
//토큰 유효성 체크 성공(필요 시 토큰 갱신됨)
//token을 가지고 있고 error가 없다면
//그냥 이동
print("loginWithKakaoTalk() success.")
self.loginDBCheck()
}
}
}
else {
//not token
//kakaoLogin(btn)으로 처리
}
}
여기서 토큰이 존재한다면 loginDBCheck라는 함수를 호출하게 됩니다.
해당 함수의 역할은 aws amplify의 appsync에서 앱에 접근한 유저의 정보를 갖고 있는지 확인합니다.
만약 정보를 갖고 있다면 메인 화면으로, 혹은 없다면 회원가입 화면으로 전환시킵니다.
private func loginDBCheck() {
UserApi.shared.me { [self] user, error in
if let error = error {
print("db error check-----------------------------")
print(error)
} else {
let email = user?.kakaoAccount?.email
Task{
let users = try await Amplify.DataStore.query(User.self, where: User.keys.id.eq(email))
for user in users{
if(user.id == email){
guard let mainVC = self.storyboard?.instantiateViewController(withIdentifier: "FirstMain") as? FirstTabBarViewController else { return }
(UIApplication.shared.connectedScenes.first?.delegate as? SceneDelegate)?.changeRootViewController(mainVC, animated: false)
} else {
guard let mainVC = self.storyboard?.instantiateViewController(withIdentifier: "FirstJoin") as? JoinViewController else { return }
(UIApplication.shared.connectedScenes.first?.delegate as? SceneDelegate)?.changeRootViewController(mainVC, animated: false)
}
}
}
}
}
}
이번에는 token이 존재하지 않는 경우를 알아보겠습니다.
우선 제가 개발한 앱의 경우, 토큰이 없을 경우, 최초 시작 시 로그인 방식을 선택 할 수 있게 세팅하엿습니다.
참고사항) 카카오 로그인 버튼 이미지는 공식문서에서 제공하고 있습니다.
여기서 카카오 로그인 버튼을 터치하면 아래의 코드가 수행됩니다.
@IBAction func kakaoLogin(_ sender: Any) {
print("press this button")
//카카오톡 실행 가능 여부 확인
if (UserApi.isKakaoTalkLoginAvailable()) {
//카톡 설치되어있으면 -> 카톡으로 로그인
UserApi.shared.loginWithKakaoTalk {(oauthToken, error) in
if let error = error {
print("button error method")
print(error)
}
else {
print("loginWithKakaoTalk() success.")
_ = oauthToken
self.loginDBCheck()
}
}
} else {
//using mac test code
guard let mainVC = self.storyboard?.instantiateViewController(withIdentifier: "FirstMain") as? FirstTabBarViewController else { return }
(UIApplication.shared.connectedScenes.first?.delegate as? SceneDelegate)?.changeRootViewController(mainVC, animated: false)
//---------------------------------------------------------------------------
let alert = UIAlertController(title: "죄송합니다", message: "카카오톡이 설치 되어있어야만 이용가능합니다.", preferredStyle: UIAlertController.Style.alert)
let yAction = UIAlertAction(title: "확인", style: UIAlertAction.Style.default, handler: nil)
alert.addAction(yAction)
present(alert, animated: true, completion: nil)
}
}
해당 코드 역시 loginDBCheck 함수를 호출하여 user의 정보가 aws amplify의 appsync에 존재하는지 확인합니다.
마지막으로 회원가입에 대하여 이야기를 가볍게 해보겠습니다.
회원가입의 경우 이전에 소개한 글을 참조하여 만드시면 됩니다.
아래에 링크 달아두겠습니다.
https://pinlib.tistory.com/entry/SWIFT-IOS-에서-AWS-Amplify를-이용해-CRUD-구현하기
이번에는 ios에서 카카오 로그인을 구현하는 방법을 소개해봤습니다.
다음 글은 ios관련으로 쓰긴할 껀데 잘 모르겠습니다.
아마도 채팅구현 할거 같기는 합니다.
'ios 앱개발' 카테고리의 다른 글
[SWIFT] IOS에서 채팅기능 구현하기(2) with AWS Amplify (0) | 2024.02.18 |
---|---|
[SWIFT] IOS에서 채팅기능 구현하기(1) with AWS Amplify (0) | 2024.02.16 |
[SWIFT] IOS에서 AWS Amplify를 이용해 이미지 저장과 불러오기(S3 storage) (0) | 2024.02.10 |
[SWIFT] IOS 에서 AWS Amplify를 이용해 CRUD 구현하기 (1) | 2024.02.08 |
ios에서 AWS Amplify S3를 이용하여 image upload, download하기 (0) | 2023.07.21 |