iOS Reference
KOSession
인증 관리 클래스.
Superclass
NSObject
Declared In
Methods
- -close
- -createAccountAndOpenWithCompletion:
- +handleDidBecomeActive
- +handleDidEnterBackground
- +handleOpenURL:
- +isKakaoAccountLoginCallback:
- +isKakaoAgeAuthCallback:
- +isKakaoLinkCallback:
- -isOpen
- +isStoryPostCallback:
- -logoutAndCloseWithCompletionHandler:
- -openWithCompletionHandler:
- -openWithCompletionHandler:authType:
- -openWithCompletionHandler:authTypes:
- -openWithCompletionHandler:parameters:
- -openWithCompletionHandler:parameters:authType:
- -openWithCompletionHandler:parameters:authTypes:
- -openWithToken:completionHandler:
- -refreshAccessTokenWithCompletionHandler:
- +sharedSession
현재 session 정보
- -showAgeAuthWithAuthLevel:completionHandler:
- -updateScopes:completionHandler:
현재 로그인된 사용자에게 새로운 scope이 필요할 경우 지정된 동의항목에 대한 동의창을 노출하고 사용자 동의를 유도합니다. 사용자가 동의 버튼을 누르면 해당 scope이 적용된 새로운 토큰으로 세션을 갱신합니다.
close
- (void)close;
Discussion
인증 토큰을 세션 객체에서 제거한다.
createAccountAndOpenWithCompletion:
- (void)createAccountAndOpenWithCompletion:(KOSessionCompletionHandler)completionHandler;
Parameters
Discussion
새로운 카카오계정을 만들고 로그인을 시도한다.
handleDidBecomeActive
+ (void)handleDidBecomeActive;
Discussion
openWithCompletionHandler로 인증 도중에 빠져나와 앱으로 돌아올때의 인증처리를 취소한다. 보통 applicationDidBecomeActive에서 해당 부분을 호출한다.
handleDidEnterBackground
+ (void)handleDidEnterBackground;
Discussion
application이 background 상태로 변경시 알려준다. 보통 applicationDidEnterBackground에서 해당 부분을 호출한다.
handleOpenURL:
+ (BOOL)handleOpenURL:(nullable NSURL *)url;
Parameters
Discussion
url에 포함된 code 정보로 oauth 인증 토큰을 요청한다. 인증 토큰 요청이 완료되면 completionHandler를 실행한다.
isKakaoAccountLoginCallback:
+ (BOOL)isKakaoAccountLoginCallback:(nullable NSURL *)url;
Parameters
Discussion
카카오계정 로그인 callback인지 여부
isKakaoAgeAuthCallback:
+ (BOOL)isKakaoAgeAuthCallback:(nullable NSURL *)url;
Parameters
Discussion
카카오계정 연령인증 callback인지 여부
isKakaoLinkCallback:
+ (BOOL)isKakaoLinkCallback:(nullable NSURL *)url DEPRECATED_ATTRIBUTE;
Parameters
Discussion
KakaoLink 메시지의 Action인지 여부
isOpen
- (BOOL)isOpen;
Discussion
인증되어 있는지 여부. [token canRefresh]와 동일한 결과를 리턴합니다.
isStoryPostCallback:
+ (BOOL)isStoryPostCallback:(nullable NSURL *)url;
Parameters
Discussion
KakaoStory Post의 Action인지 여부
logoutAndCloseWithCompletionHandler:
- (void)logoutAndCloseWithCompletionHandler:(KOCompletionSuccessHandler)completionHandler;
Parameters
Discussion
현재 기기에서만 로그아웃한다. 발급 받았던 토큰은 만료된다.
openWithCompletionHandler:
- (void)openWithCompletionHandler:(KOSessionCompletionHandler)completionHandler;
Parameters
Discussion
기기의 로그인 수행 가능한 카카오 앱에 로그인 요청을 전달한다.
openWithCompletionHandler:authType:
- (void)openWithCompletionHandler:(KOSessionCompletionHandler)completionHandler authType:(KOAuthType)authType, ...;
Parameters
Discussion
기기의 로그인 수행 가능한 카카오 앱에 로그인 요청을 전달한다.
openWithCompletionHandler:authTypes:
- (void)openWithCompletionHandler:(KOSessionCompletionHandler)completionHandler authTypes:(nullable NSArray<NSNumber *> *)authTypes;
Parameters
Discussion
기기의 로그인 수행 가능한 카카오 앱에 로그인 요청을 전달한다.
openWithCompletionHandler:parameters:
- (void)openWithCompletionHandler:(KOSessionCompletionHandler)completionHandler parameters:(nullable NSDictionary<NSString *, NSString *> *)parameters;
Parameters
Discussion
기기의 로그인 수행 가능한 카카오 앱에 로그인 요청을 전달한다.
openWithCompletionHandler:parameters:authType:
- (void)openWithCompletionHandler:(KOSessionCompletionHandler)completionHandler parameters:(nullable NSDictionary<NSString *, NSString *> *)parameters authType:(KOAuthType)authType, ...;
Parameters
Discussion
기기의 로그인 수행 가능한 카카오 앱에 로그인 요청을 전달한다.
openWithCompletionHandler:parameters:authTypes:
- (void)openWithCompletionHandler:(KOSessionCompletionHandler)completionHandler parameters:(nullable NSDictionary<NSString *, NSString *> *)parameters authTypes:(nullable NSArray<NSNumber *> *)authTypes;
Parameters
Discussion
기기의 로그인 수행 가능한 카카오 앱에 로그인 요청을 전달한다.
openWithToken:completionHandler:
- (void)openWithToken:(nullable KOToken *)token completionHandler:(KOSessionCompletionHandler)completionHandler;
Parameters
Discussion
이전에 발급 받았던 토큰을 재사용하여 로그인을 시도한다.
refreshAccessTokenWithCompletionHandler:
- (void)refreshAccessTokenWithCompletionHandler:(KOSessionCompletionHandler)completionHandler;
Parameters
Discussion
세션을 유효한 access token으로 유지하기 위해 서버로 토큰을 요청하고 현재 세션을 갱신한다.
sharedSession
현재 session 정보
+ (nullable KOSession *)sharedSession;
showAgeAuthWithAuthLevel:completionHandler:
- (void)showAgeAuthWithAuthLevel:(nullable KOAgeAuthQueryStringBuilder *) ageAuthQueryStringBuilder completionHandler:(KOCompletionSuccessHandler)completionHandler;
Discussion
새로운 연령 인증이 필요할 경우 사용자에게 연령 인증관련 창을 띄워서 연령 인증을 유도합니다. 제휴를 통해 권한이 부여된 특정 앱에서만 호출 가능합니다.
updateScopes:completionHandler:
현재 로그인된 사용자에게 새로운 scope이 필요할 경우 지정된 동의항목에 대한 동의창을 노출하고 사용자 동의를 유도합니다. 사용자가 동의 버튼을 누르면 해당 scope이 적용된 새로운 토큰으로 세션을 갱신합니다.
- (void)updateScopes:(nullable NSArray<NSString *> *)scopes completionHandler:(KOSessionCompletionHandler)completionHandler;
Parameters
Properties
- appKey
카카오에서 발급한 클라이언트 아이디. (네이티브 앱키)
- automaticPeriodicRefresh
access token의 자동 주기적 갱신 여부 설정. 해당 값이 YES일 경우 handleDidBecomeActive 및 특정 시간 주기로 필요시 토큰을 자동 갱신함.
- presentingViewController
login view 가 present 될 뷰컨트롤러를 설정. 지정하지 않을 경우 SDK 자체적으로 최상단 뷰컨트롤러를 탐색합니다.
- redirectUri
클라이언트 실행을 위한 커스텀 스킴 주소
- state
인증 상태
- token
로그인 기반 API 인증에 사용되는 OAuth 토큰
appKey
카카오에서 발급한 클라이언트 아이디. (네이티브 앱키)
@property(nonatomic, readonly) NSString *appKey;
Discussion
.plist 파일 내에 있는 KAKAO_APP_KEY 값을 읽어옵니다. 해당 키 값이 없거나 빈 문자열인 경우 KOSession 인스턴스를 초기화 할 수 없으며 sharedSession 호출 시 nil을 반환합니다.
automaticPeriodicRefresh
access token의 자동 주기적 갱신 여부 설정. 해당 값이 YES일 경우 handleDidBecomeActive 및 특정 시간 주기로 필요시 토큰을 자동 갱신함.
@property (nonatomic, getter=isAutomaticPeriodicRefresh) BOOL automaticPeriodicRefresh;
Discussion
값을 설정하면 현재 토큰 상태에 따라 타이머를 설정하거나 갱신이 필요할 경우 바로 갱신합니다. 이 속성 값은 기기에 저장되지 않고 메모리에서만 유지되므로 AppDelegate의 application:didFinishLaunchingWithOptions: 메소드 내에서 설정하는 것을 권장합니다. iOS 특성상 앱이 백그라운드로 내려가거나 suspend 상태가 되면 갱신이 불가능합니다.
See Also
presentingViewController
login view 가 present 될 뷰컨트롤러를 설정. 지정하지 않을 경우 SDK 자체적으로 최상단 뷰컨트롤러를 탐색합니다.
@property (nullable, nonatomic, weak) UIViewController *presentingViewController;
redirectUri
클라이언트 실행을 위한 커스텀 스킴 주소
@property(nonatomic, readonly) NSString *redirectUri;
Discussion
"kakao${KAKAO_APP_KEY}://oauth" 형식의 OAuth 리다이렉트 URI입니다. .plist 파일에 URL Scheme으로 kakao${KAKAO_APP_KEY} 값을 설정해야 합니다. 설정하지 않을 경우 KOSession 인스턴스를 초기화 할 수 없으며 sharedSession 호출 시 nil을 반환합니다.
See Also
state
인증 상태
@property(nonatomic, readonly) KOSessionState state;
token
로그인 기반 API 인증에 사용되는 OAuth 토큰
@property(nullable, readonly) KOToken *token;
Discussion
KOSessionTask에 있는 API 사용시 자동으로 Authroization 헤더에 현재 access token을 채워줍니다.
발급 받은 토큰은 NSUserDefaults에 저장되고 앱을 종료하고 다시 시작할 경우 세션이 초기화 될 때(ex. sharedSession 최초 호출) 로드됩니다.
세션 초기화 시 저장된 토큰을 읽어오는데 성공하면 세션은 open 상태가 되며 일반적인 state 변경 상황과 동일하게 KOSessionDidChangeNotification 알림을 전달 받을 수 있습니다.
토큰을 좀 더 안전하게 저장하고 싶을 경우 .plist 파일에 KAKAO_SECURE_MODE를 YES로 설정하여 accessToken과 refreshToken을 암호화 할 수 있습니다.
암호화 방식은 SDK 버전에 따라 다르게 제공될 수 있으며 최신 버전에 사용되고 있는 암호화 방식은 1.5.1 버전에서 마지막으로 수정되었습니다.
KAKAO_SECURE_MODE 설정을 바꾸어서 앱을 배포하고 사용자의 기기에서 업데이트 했을 때 다음 케이스에 대해 마이그레이션을 지원합니다.
- 평문토큰 to 암호문토큰: KAKAO_SECURE_MODE를 사용하지 않다가 활성화시킨 상태로 업데이트한 경우 등
- 암호문토큰 to 평문토큰: KAKAO_SECURE_MODE를 YES로 사용하다가 NO로 변경한 경우 등
- (old)암호문토큰 to (new)암호문토큰: KAKAO_SECURE_MODE를 YES로 설정하고 변경하지 않았으나 오래된 버전의 SDK에서 최신(1.5.1이상) SDK로 업데이트한 경우
위 케이스에는 앱을 업데이트하고 재시작해도 로그인이 유지되며 이외 케이스는 토큰을 읽어올 수 없으므로 세션이 닫힌 상태로 초기화됩니다.