iOS Reference

KOSession


인증 관리 클래스.

Superclass

NSObject

Declared In

KOSession.h


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:


Parameters
completionHandler

요청 완료시 실행될 block. 오류 처리와 로그인 완료 작업을 수행한다.

Discussion

새로운 카카오계정을 만들고 로그인을 시도한다.


handleDidBecomeActive


+ (void)handleDidBecomeActive; 
Discussion

openWithCompletionHandler로 인증 도중에 빠져나와 앱으로 돌아올때의 인증처리를 취소한다. 보통 applicationDidBecomeActive에서 해당 부분을 호출한다.


handleDidEnterBackground


+ (void)handleDidEnterBackground; 
Discussion

application이 background 상태로 변경시 알려준다. 보통 applicationDidEnterBackground에서 해당 부분을 호출한다.


handleOpenURL:


+ (BOOL)handleOpenURL:(nullable NSURL *)url; 
Parameters
url

인증 요청 code 또는 오류 정보(error, error_description)를 담은 url

Discussion

url에 포함된 code 정보로 oauth 인증 토큰을 요청한다. 인증 토큰 요청이 완료되면 completionHandler를 실행한다.


isKakaoAccountLoginCallback:


+ (BOOL)isKakaoAccountLoginCallback:(nullable NSURL *)url; 
Parameters
url

카카오 계정 인증 요청 code 또는 오류정보를 담은 url

Discussion

카카오계정 로그인 callback인지 여부


isKakaoAgeAuthCallback:


+ (BOOL)isKakaoAgeAuthCallback:(nullable NSURL *)url; 
Parameters
url

카카오 연령인증 요청결과를 담은 url

Discussion

카카오계정 연령인증 callback인지 여부


isKakaoLinkCallback:


+ (BOOL)isKakaoLinkCallback:(nullable NSURL *)url DEPRECATED_ATTRIBUTE; 
Parameters
url

KakaoLink 메시지의 execparam 을 담은 url

Discussion

KakaoLink 메시지의 Action인지 여부


isOpen


- (BOOL)isOpen; 
Discussion

인증되어 있는지 여부. [token canRefresh]와 동일한 결과를 리턴합니다.


isStoryPostCallback:


+ (BOOL)isStoryPostCallback:(nullable NSURL *)url; 
Parameters
url

KakaoStory Post 메시지의 execparam 을 담은 url

Discussion

KakaoStory Post의 Action인지 여부


logoutAndCloseWithCompletionHandler:


Parameters
completionHandler

요청 완료시 실행될 block.

Discussion

현재 기기에서만 로그아웃한다. 발급 받았던 토큰은 만료된다.


openWithCompletionHandler:


Parameters
completionHandler

요청 완료시 실행될 block. 오류 처리와 로그인 완료 작업을 수행한다.

Discussion

기기의 로그인 수행 가능한 카카오 앱에 로그인 요청을 전달한다.


openWithCompletionHandler:authType:


- (void)openWithCompletionHandler:(KOSessionCompletionHandler)completionHandler 
        authType:(KOAuthType)authType, ...; 
Parameters
completionHandler

요청 완료시 실행될 block. 오류 처리와 로그인 완료 작업을 수행한다.

authType

로그인 요청시의 인증 타입(KOAuthType)의 array(var arguments로서 nil-terminated list). 주의) list의 마지막은 꼭 nil로 끝나야함. 예) KOAuthTypeTalk, KOAuthTypeStory, KOAuthTypeAccount, nil

Discussion

기기의 로그인 수행 가능한 카카오 앱에 로그인 요청을 전달한다.


openWithCompletionHandler:authTypes:


- (void)openWithCompletionHandler:(KOSessionCompletionHandler)completionHandler 
        authTypes:(nullable NSArray<NSNumber *> *)authTypes; 
Parameters
completionHandler

요청 완료시 실행될 block. 오류 처리와 로그인 완료 작업을 수행한다.

authTypes

로그인 요청시의 인증 타입(KOAuthType)의 array.

Discussion

기기의 로그인 수행 가능한 카카오 앱에 로그인 요청을 전달한다.


openWithCompletionHandler:parameters:


- (void)openWithCompletionHandler:(KOSessionCompletionHandler)completionHandler 
        parameters:(nullable NSDictionary<NSString *, NSString *> *)parameters; 
Parameters
completionHandler

요청 완료시 실행될 block. 오류 처리와 로그인 완료 작업을 수행한다.

parameters

인증코드 요청에 추가로 전달할 파라미터

Discussion

기기의 로그인 수행 가능한 카카오 앱에 로그인 요청을 전달한다.


openWithCompletionHandler:parameters:authType:


- (void)openWithCompletionHandler:(KOSessionCompletionHandler)completionHandler 
        parameters:(nullable NSDictionary<NSString *, NSString *> *)parameters 
        authType:(KOAuthType)authType, ...; 
Parameters
completionHandler

요청 완료시 실행될 block. 오류 처리와 로그인 완료 작업을 수행한다.

parameters

인증코드 요청에 추가로 전달할 파라미터

authType

로그인 요청시의 인증 타입(KOAuthType)의 array(var arguments로서 nil-terminated list). 주의) list의 마지막은 꼭 nil로 끝나야함. 예) KOAuthTypeTalk, KOAuthTypeStory, KOAuthTypeAccount, nil

Discussion

기기의 로그인 수행 가능한 카카오 앱에 로그인 요청을 전달한다.


openWithCompletionHandler:parameters:authTypes:


- (void)openWithCompletionHandler:(KOSessionCompletionHandler)completionHandler 
        parameters:(nullable NSDictionary<NSString *, NSString *> *)parameters 
        authTypes:(nullable NSArray<NSNumber *> *)authTypes; 
Parameters
completionHandler

요청 완료시 실행될 block. 오류 처리와 로그인 완료 작업을 수행한다.

parameters

인증코드 요청에 추가로 전달할 파라미터

authTypes

로그인 요청시의 인증 타입(KOAuthType)의 array.

Discussion

기기의 로그인 수행 가능한 카카오 앱에 로그인 요청을 전달한다.


openWithToken:completionHandler:


- (void)openWithToken:(nullable KOToken *)token 
        completionHandler:(KOSessionCompletionHandler)completionHandler; 
Parameters
token

로그인 시도할 토큰. 갱신 가능한 토큰이면 로그인에 성공한다.

completionHandler

요청 완료시 실행될 block. 오류 처리와 로그인 완료 작업을 수행한다.

Discussion

이전에 발급 받았던 토큰을 재사용하여 로그인을 시도한다.


refreshAccessTokenWithCompletionHandler:


Parameters
completionHandler

갱신 완료시 실행될 block.

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
scopes

요청할 scope 목록

completionHandler

요청 완료시 실행될 block. 오류 처리와 갱신 완료 작업을 수행한다.


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로 업데이트한 경우

위 케이스에는 앱을 업데이트하고 재시작해도 로그인이 유지되며 이외 케이스는 토큰을 읽어올 수 없으므로 세션이 닫힌 상태로 초기화됩니다.