AuthController
public class AuthController : NSObject
카카오 로그인의 주요 기능을 제공하는 클래스입니다.
이 클래스를 이용하여 카카오톡 간편로그인 또는 웹 쿠키를 이용한 로그인을 수행할 수 있습니다.
카카오톡 간편로그인 예제입니다.
// 로그인 버튼 클릭
if (AuthController.isTalkAuthAvailable()) {
AuthController.shared.authorizeWithTalk()
.subscribe(onNext: { (token) in
print(token)
}, onError: { (error) in
print(error)
})
.disposed(by: self.disposeBag)
}
// AppDelegate
func application(_ app: UIApplication, open url: URL, options: [UIApplication.OpenURLOptionsKey : Any] = [:]) -> Bool {
if AuthController.handleOpenUrl(url: url, options: options) {
return true
}
...
}
웹 로그인 예제입니다.
AuthController.shared.authorizeWithAuthenticationSession()
.subscribe(onNext: { (token) in
print(token.accessToken)
}, onError: { (error) in
print(error)
})
.disposed(by: self.disposeBag)
-
간편하게 API를 호출할 수 있도록 제공되는 공용 싱글톤 객체입니다.
Declaration
Swift
public static let shared: AuthController
-
카카오톡 간편로그인을 실행합니다.
Note
isTalkAuthAvailable() 메소드로 실행 가능한 상태인지 확인이 필요합니다. 카카오톡을 실행할 수 없을 경우 authorizeWithAuthenticationSession() 메소드로 웹 로그인을 시도할 수 있습니다.Declaration
Swift
public func authorizeWithTalk(plusFriendPublicIds: [String]? = nil, serviceTerms: [String]? = nil, autoLogin: Bool = false) -> Observable<OAuthToken>
-
카카오톡 간편로그인이 실행 가능한지 확인합니다.
내부적으로 UIApplication.shared.canOpenURL() 메소드를 사용합니다. 카카오톡 간편로그인을 위한 커스텀 스킴은
kakaokompassauth
이며 이 메소드를 정상적으로 사용하기 위해서는 LSApplicationQueriesSchemes에 해당 스킴이 등록되어야 합니다. 등록되지 않은 상태로 메소드를 호출하면 카카오톡이 설치되어 있더라도 항상 false를 반환합니다.// info.plist <key>LSApplicationQueriesSchemes</key> <array> <string>kakaokompassauth</string> </array>
Declaration
Swift
public static func isTalkAuthAvailable() -> Bool
-
카카오톡 간편로그인 등 외부로부터 리다이렉트 된 코드요청 결과를 처리합니다. AppDelegate의 openURL 메소드 내에 다음과 같이 구현해야 합니다.
func application(_ app: UIApplication, open url: URL, options: [UIApplication.OpenURLOptionsKey : Any] = [:]) -> Bool { if AuthController.handleOpenUrl(url: url, options: options) { return true } // 서비스의 나머지 URL 핸들링 처리 }
Declaration
Swift
public static func handleOpenUrl(url: URL, options: [UIApplication.OpenURLOptionsKey : Any] = [:]) -> Bool
-
iOS 11 이상에서 제공되는 (SF/ASWeb)AuthenticationSession 을 이용하여 로그인 페이지를 띄우고 쿠키 기반 로그인을 수행합니다. 이미 사파리에에서 로그인하여 카카오계정의 쿠키가 구워져 있다면 이를 활용하여 ID/PW 입력 없이 간편하게 로그인할 수 있습니다.
Declaration
Swift
public func authorizeWithAuthenticationSession() -> Observable<OAuthToken>
-
사용자로부터 카카오가 보유중인 사용자 정보 제공에 대한 동의를 받습니다.
카카오로부터 사용자의 정보를 제공 받거나 카카오서비스 접근권한이 필요한 경우, 사용자로부터 해당 정보 제공에 대한 동의를 받지 않았다면 이 메소드를 사용하여 동적 동의를 받아야 합니다. 필요한 동의항목과 매칭되는 scope id를 배열에 담아 파라미터로 전달해야 합니다. 동의항목과 scope id를 확인하시려면 개발자사이트 사용자관리 > 동의항목 설정을 참고하실 수 있습니다.
사용자 동의 획득 시나리오
간편로그인 또는 웹 로그인을 수행하면 최초 로그인 시 개발자사이트에 설정된 동의항목 설정에 따라 사용자의 동의를 받습니다. 동의항목을 설정해도 상황에 따라 동의를 받지 못할 수 있습니다. 대표적인 케이스는 아래와 같습니다.
- 선택 으로 설정된 동의항목이 최초 로그인시 선택받지 못한 경우
- 필수 로 설정하였지만 해당 정보가 로그인 시점에 존재하지 않아 카카오에서 동의항목을 보여주지 못한 경우
- 사용자가 해당 동의항목이 설정되기 이전에 로그인한 경우
이외에도 다양한 여건에 따라 동의받지 못한 항목이 발생할 수 있습니다.
동적 동의 주의사항
선택 으로 설정된 동의항목에 대한 동적 동의는, 반드시 사용자가 동의를 거부하더라도 서비스 이용이 지장이 없는 시나리오에서 요청해야 합니다. 선택 동의를 거부했을 때 서비스를 이용할 수 없도록 구현된 경우 카카오의 운영 정책에 따라 API 이용제제 대상이 될 수 있습니다.
Declaration
Swift
public func authorizeWithAuthenticationSession(scopes: [String]) -> Observable<OAuthToken>