# trouble shooting
번들 ID가 다를 경우 KOE009에러가 발생한다. -> 그래서 프로젝트 타켓에 있는 Bundle ID를 명확하게 입력해줘야한다. -> 에러해결
# 카카오 로그인 서비스 등록하는 과정
## 1 초기설정
- Kakao login api 검색해서 사이트 접속 -> 내 애플리에키션에서 앱 등록 -> 앱 설정의 플랫폼들어가서 번들 ID에 프로젝트 번들 ID를 넣어준다.
- 시작하기 > iOS -> api를 다운로드 받는다 (SPM or cocoapod)
- 네이버갈떄 url사용해서 접속하듯 앱안에서도 특정 앱, 스킴을 지정할 수 있는데 카카오 앱을 열기위해 스킴에 네이티브앱키를 등록한다.
- 여기서 잠깐 있는 그대로 사용하면 노출이 될 수 있기에 config파일내에 넣어
서 사용해줄 수 있다.
- config파일에 네이티브키를 저장하고 이를 ${} 를 이용해 Info.list에 추가해준다. 그다음 프로젝트파일 -> 타겟 -> URL TYPE에서 URL scheme을 네이티브앱 ${네이티브앱키}로 넣어준다.
마지막으로 프로젝트 파일 -> Info -> configureation에 가서 Debug와 Realease를 config파일로 등록해준다.
그리고 빠트린게있는데 info파일 우클릭 -> 소스코드 들어가서 Key로 등록해줘야한다. 혹시 Info.List에 간혹다가 등록이 잘안될수도있으니 다시한번 확인해주면 좋다.
- Info.list에 App Transport Security Setting > Allow Arbitaty Loads 프로퍼티를 추가한다. 왜냐하면 인터넷접속을 하거기때문에,
- AppDelegate에서 KakaoSDKCommon을 import한 후 런치메서드내에 KakaoSDK.init으로 appkey를 넣어준다 -> config에 네이티브앱 키를 저장했던 변수명을 넣어주면됨
## 2 코드 등록
공통
isKakaoTalkLoginAvailable() // 카카오톡앱이 등록안되있을수있기때문에 이메서드로 확인해주어야한다.
iOS SDK
ReactiveX iOS SDK
- AppDelegate와 ScenDelegate에 카카오 url로 접근해서 현재 등록된 scheme과 일치할경우 앱에 접근할 수 있또록하는 코드를 각각 추가해준다. (사이트참고)
2. viewModel을 생성해주고 SDKAuth, KakaoSDKUser를 Import해준 후 input method인 kakaoLogin메서드를 만들어준다. 내부에는 설치되있는 경우와 아닌 경우에 대해서 코드를 사이트참고하여 넣어준다.
import Foundation
import Combine
import KakaoSDKAuth
import KakaoSDKUser
final class KakaoAuthViewModel: ObservableObject {
func handleKakaoLogin() {
print("KakaoAuthViewModel - handleKakaoLogin() called")
// 카카오톡 설치 여부 확인
// 카톡이 설치되 있다면 ??? -> loginWithKakaoTalk() 메서드 호출
if (UserApi.isKakaoTalkLoginAvailable()) {
UserApi.shared.loginWithKakaoTalk {(oauthToken, error) in
if let error = error {
print(error)
} else {
print("loginWithKakaoTalk() success.")
//do something
_ = oauthToken
}
}
} else { // 카톡이 설치가 안되있다면 ??? -> loginWithKakaoAccount() 메서드 호출
UserApi.shared.loginWithKakaoAccount {(oauthToken, error) in
if let error = error {
print(error)
} else {
print("loginWithKakaoAccount() success.")
//do something
_ = oauthToken
}
}
}
}
func kakaoLogout() {
UserApi.shared.logout {(error) in
if let error = error {
print(error)
}
else {
print("logout() success.")
}
}
}
}
# Reference
- https://developers.kakao.com/docs/latest/ko/kakaologin/ios
- https://www.youtube.com/watch?v=7Y4UR0UhgHs&t=1852s