์ต๊ทผ ์๋ก์ด iOS ์ฑ ๊ฐ๋ฐ์ ์์ํ๋ฉด์ ์๋กญ๊ฒ ์์ ๋ก๊ทธ์ธ ์ฐ๊ฒฐ์ ์์ ํ๊ฒ ๋์์ต๋๋ค. (๊ธฐ์กด ์ฑ์ objective-c ์ฝ๋์ ํ๊ฒ ๋ฒ์ ๋ ๋ฎ์์ ์ฌํ์ฉ์ด ์ฝ์ง ์์ ๊ฑฐ์ ์๋ก ๊ตฌํํด์ผ ํ์ต๋๋ค)
๋๋ถ๋ถ 2022๋ 2์ ๊ธฐ์ค ์ต์ ๋ฒ์ ์ ์ฐจ์ฉํ์ผ๋ ๋น๋ถ๊ฐ ์ด ํฌ์คํธ๊ฐ ์ ์ฉํ๊ฒ ์ฐธ๊ณ ๋๋ฉด ์ข๊ฒ ์ต๋๋ค.
์ผ๋จ ์ ๊ฐ ๊ฐ๋ฐ์ ์ฐธ์ฌํ๋ ์ฑ์์๋ ์นด์นด์คํก์ ์์ ๋ก๊ทธ์ธ ๊ธฐ๋ฅ์ ๋ชฉ์ ๋ง ์์ต๋๋ค. SDK๋ cocoapod์ ์ด์ฉํด ์ค์นํ๊ธฐ๋ก ํ์ต๋๋ค. ๋ฒ์ ์ 2.8.5๋ฅผ ์ฌ์ฉํ์ต๋๋ค.
pod KakaoSDKUser๊ทธ ํ์๋ ์นด์นด์ค ๊ฐ๋ฐ์ ํ์ด์ง์ ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ฑ๋ก ํด์ผํฉ๋๋ค.
iOS ์ฑ์ ๊ฒฝ์ฐ ํ์์ ์ผ๋ก Xcode ํ๋ก์ ํธ์ Bundle Id๋ฅผ ๋ฑ๋กํด์ผ ํฉ๋๋ค.
์ดํ ๋ฐ๊ธ๋๋ ๋ค์ดํฐ๋ธ ์ฑํค๋ AppDelegate.swift ํ์ผ์์ ์ฐ์ ๋๋ค.
import UIKit
import KakaoSDKAuth
class AppDelegate: UIResponder, UIApplicationDelegate {
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
//์นด์นด์คํก SDK ์ด๊ธฐํํ๊ธฐ
KakaoSDK.initSDK(appKey: Appkey.kakao)
}Appkey.kakao์ ์์น์ ๊ฐ์ ๋ฐ๊ธ ๋ฐ์ ๋ค์ดํฐ๋ธ ์ฑ ํค๋ฅผ ์ ์ผ๋ฉด ๋ฉ๋๋ค.
๊ทธ๋ฆฌ๊ณ ์นด์นด์คํก ๋งํฌ ๋์์ ์ํด AppDelegate.swift์ ์ฝ๋๋ฅผ ๋ ์ถ๊ฐํด์ค๋๋ค.
func application(_ app: UIApplication, open url: URL, options: [UIApplication.OpenURLOptionsKey : Any] = [:]) -> Bool {
//์นด์นด์คํก
if AuthApi.isKakaoTalkLoginUrl(url) {
return AuthController.handleOpenUrl(url: url)
}
return false
}iOS 13๋ถํฐ๋ SceneDelegate.swift์์ ํด๋น ์ก์ ์ ๊ด๋ฆฌํ๋ค๋๊ตฐ์.
import UIKit
import KakaoSDKAuth
class SceneDelegate: UIResponder, UIWindowSceneDelegate {
func scene(_ scene: UIScene, openURLContexts URLContexts: Set<UIOpenURLContext>) {
if let url = URLContexts.first?.url {
if AuthApi.isKakaoTalkLoginUrl(url) {
_ = AuthController.handleOpenUrl(url: url)
}
}
}
}iOS 13 ์ด์ ๋ฒ์ ์ ์ง์ํ๋ค๋ฉด Appdelegate.swift์๋ ์์ ์ด ํ์ํ ๊ฒ ๊ฐ์ต๋๋ค.
์ ์ด์ ์ง์ ์ ์ธ ๋ก๊ทธ์ธ ํํธ ์ ๋๋ค.
if UserApi.isKakaoTalkLoginAvailable() {
UserApi.shared.loginWithKakaoTalk(channelPublicIds: nil, serviceTerms: nil) { (oauthToken, error) in
if let error = error {
}
else {
//(1) ์นด์นด์ค ์ฑ์ผ๋ก ๋ก๊ทธ์ธ ์ฑ๊ณต
}
}
}
else {
//(2) ์นด์นด์ค ๊ณ์ ์ผ๋ก ๋ก๊ทธ์ธ
UserApi.shared.loginWithKakaoAccount(prompts: nil, channelPublicIds: nil, serviceTerms: nil) { (oauthToken, error) in
if let error = error {
print(error)
}
else {
print("Login Kakao account Success.")
//์นด์นด์ค ๊ณ์ ์ผ๋ก ๋ก๊ทธ์ธ ์ฑ๊ณต
}
}
}๊ธฐ์กด ๋ฉ๋ด์ผ ๋๋ก์ ์ฝ๋์์ ์ค์ง์ ์ผ๋ก ์ฌ์ฉ ๋ ์ ์๋๋ก ๋ณ๊ฒฝํ์ต๋๋ค.
์นด์นด์คํก ์ฑ์ผ๋ก ๋ก๊ทธ์ธ์ด ๋ถ๊ฐ๋ฅํ ๊ฒฝ์ฐ์๋ ์นด์นด์ค ๊ณ์ ์ผ๋ก ๋ก๊ทธ์ธ ํ๋ ๋ฐฉ๋ฒ์ ์๋ํ๋๋ก ์์ ํ ์ฝ๋์ ๋๋ค.
๊ณต์ ํ์ด์ง์ ์ํ ์ฝ๋์ ๊ฒฝ์ฐ 2.8.5 ๊ธฐ์ค์ผ๋ก ์ต์ ๋ฒ์ ์ด ์ ์ฉ๋์ด ์์ง ์์๋ฏ ํ์ต๋๋ค.
prompts, channelPublicIds,serviceTerms ๋ฑ์ ์ด๋ค ์ ๋ณด๋ฅผ ๋ฃ์ด์ผ ํ๋์ง ๊ถ๊ธํด์ ์ฐพ์๋ด๋ ์์ ๋ ๋ธ๋ก๊ทธ ๋ค๋ ์์ด ๋นํฉํ๋ ์ค์ ์ผ๋จ nil์ ๋ฃ์ด๋ ์คํ์ ๋ฌธ์ ๊ฐ ์์ด nil์ ๋ฃ์ด ์ฒ๋ฆฌํ์ต๋๋ค.
๋ง์ง๋ง์ผ๋ก info.plist์ CFBundleURLTypes์ kakao url scheme์ ๋ฑ๋กํด์ผํ๊ณ (kakao$(kakaoAppkey))
LSApplicationQueriesSchemes์๋ kakaokompassauth,kakaolink ์ ์ถ๊ฐํด์ผ ํฉ๋๋ค.
์ด ๋ฐฉ๋ฒ๊น์ง ํด์ค๋ค๋ฉด ์นด์นด์คํก์์ ์ฑ๊ณต์ ์ผ๋ก ๋ก๊ทธ์ธ์ ์ฐ์ด๋ AccessToken์ด๋ ํ๋กํ ๋ฑ์ ์ ๋ณด๋ฅผ ๋ฐ์ ์ฌ ์ ์์ต๋๋ค.