사용자 관리

사용자 관리는 카카오 플랫폼 서비스에서 제공하는 핵심 기능 중 하나입니다. 사용자 관리는 쉽고 빠른 방법으로 사용자의 계정을 카카오 플랫폼과 연결해줍니다. 해당 기능을 통하여 안전하고 보다 더 강력한 참여형 사용환경의 앱을 만들 수 있습니다.

  • 시작하기 전에
    사용자 관리 기능을 연동하기 전에 필요한 앱 설정 항목과 특징을 설명합니다.

사용자 관리의 상세 기능은 다음과 같습니다.

  • 로그인
    카카오계정을 통한 빠르고 간편한 로그인 기능을 지원합니다.
  • 로그아웃
    로그인된 사용자의 세션 연결을 해제합니다.
  • 상태변경 이벤트 관리
    로그인/로그아웃 등의 세션 상태 변경을 감지합니다.
  • 앱 연결
    로그인한 사용자와 앱을 카카오 플랫폼에 연결합니다. 사용자가 앱 가입/등록 요청을 하는 경우와 비슷합니다.
  • 앱 연결 해제
    카카오 플랫폼에 연결된 사용자와 앱의 연결을 영구 해제합니다. 사용자가 앱 탈퇴 요청을 하는 경우와 비슷합니다.
  • 사용자 정보 요청
    사용자에 대한 정보를 얻어 올 수 있습니다. 해당 기능을 사용하기 위해서는 로그인 및 앱 연결이 되어 있어야 합니다.
  • 사용자 정보 저장
    사용자에 대한 특정 정보를 저장할 수 있습니다. 해당 기능을 사용하기 위해서는 로그인 및 앱 연결이 되어 있어야 합니다.
  • 토큰 정보 얻기
    사용자 토큰의 정보를 얻고, 해당 토큰의 유효성을 검증합니다.
  • 토큰 주기적 갱신
    사용자 토큰을 자동으로 주기적 갱신을 지원합니다. API호출 없이 로그인만을 사용할 경우 유용하게 사용할 수 있습니다.
  • 토큰 암호화 저장
    사용자 토큰을 암호화하여 보다 안전하게 저장하는 기능입니다.

시작하기 전에

Kakao iOS SDK를 설치하고 초기화해야 합니다. 자세한 내용은 시작하기를 참고해 주세요.

사용자 관리 기능을 사용하기 위해서 설정 > 사용자 관리에서 추가 설정이 필요합니다.

dev_021.png

  • 첫째, 사용ON 해야합니다

  • 둘째, 앱 연동 설정 > 자동 가입 을 선택할 수 있습니다.

    카카오 플랫폼 서비스는 편의를 위해 자동 앱 연결 기능을 제공합니다. 해당 설정이 활성화되어 있을 경우 최초 로그인시 자동으로 앱 연결이 호출되므로 별도의 앱 연결 과정을 수행할 필요는 없습니다.

    사용자가 서비스에 최초 로그인하여 토큰을 얻는 순간과 실제 서비스 가입 시점이 동일하지 않는 경우(예를 들어, 서비스 내에 가입절차가 별도로 있거나 서비스약관동의 등의 절차가 별도로 있는 경우) 반드시 자동 가입 옵션을 끄셔야 합니다. 자동 가입 옵션을 끈 경우 사용자 최초 로그인 후에 명시적으로 가입API를 호출해야 사용자 가입이 완료됩니다.

    실제 서비스 가입하는 순간이 다름에도 불구 하고 자동 가입 옵션을 켜서 사용하는 경우는 사용자에게 혼란을 줄 수 있습니다. 예를 들어, 서비스 가입 과정 중에 이탈한 경우 카카오 로그인이 완료된 상태라면 연결된 앱관리에 해당 앱이 나타나게 됩니다. 이런 과정은 서비스를 탈퇴하고 난 후 탈퇴가 잘 되었는 지 확인차 로그인을 해보는 과정에서 자주 겪게 됩니다.

    사용자는 카카오계정으로 연결된 앱의 정보를 카카오톡이나 카카오스토리 내에 존재하는 카카오계정의 연결된 앱관리 페이지에서 확인할 수 있습니다.

  • 셋째, 앱 연동 설정 > 카카오 계정 연동 을 선택할 수 있습니다.

    기본으로 제공되는 사용자 정보로 카카오톡 서비스 정보를 사용할지, 카카오스토리 서비스 정보를 사용할지, 두 서비스 모두 사용하는 사용자의 경우는 어느 서비스 정보에 우선순위를 둘지를 결정합니다. 기본으로 추가되어 있는 사용자 프로퍼티로는 nickname, profile_image, thumbnail_image가 있습니다.

    앱 연결 과정에서 최초 한번만 카카오톡 또는 카카오스토리 서비스와 동기화 연동을 하게 됩니다. 사용자가 해당 정보를 카카오톡 또는 카카오스토리에서 변경하였어도 추후 변경된 데이타는 반영되지 않습니다.

    카카오톡 또는 카카오스토리와의 동기화 연동 기능을 사용하지 않도록 설정되어 있을 경우, 해당 부가정보는 빈값으로 채워져 있습니다. 이 기본 부가정보는 사용자 정보 저장 기능을 통해 다른 데이타로 언제든 교체가 가능합니다.

  • 넷째, 가입시 추가하고 싶은 사용자 정보를 사용자 목록 및 프로퍼티 관리 메뉴를 통해 추가할 수 있습니다.

    커스텀 사용자 정보 컬럼은 5개 이하로 제한 하고, 각 커스텀 사용자 정보 값은 160자 이내로 권장합니다. 실제로 사용자의 프로퍼티는 앱 연결 시에 추가 가능합니다. 또한 사용자 정보 저장 기능을 통해서도 추가 가능합니다.

  • 다섯째, 서비스에서 사용할 API에서 요구하는 동의항목을 선택하고, 해당 API를 호출하는 목적, 즉 해당 정보의 수집 목적을 설정해야 합니다.

    입력한 수집목적의 내용과 실제 서비스에서 해당 개인 정보를 사용하는 목적이 다를 경우 API서비스의 거부 사유가 될 수 있습니다. 카카오계정 이메일을 사용하기 위해서는 여기에서 이메일 사용을 설정해야 합니다.

  • 여섯째, 서비스를 운영하는 곳이 국외라면 사용자 관리 > 개인정보 국외이전 에서 개인정보가 저장되는 국가의 정보를 입력해야 합니다.

로그인

카카오계정을 이용하여 빠르고 간편하게 로그인을 할 수 있습니다.

kakao_account_login_browser.png

일반적으로 사용자는 카카오계정으로 로그인 버튼을 클릭함으로서 카카오계정 기반의 로그인을 수행합니다. 간편한 로그인을 위해 Kakao SDK는 사용자의 카카오톡 앱과 연결된 카카오계정을 활용합니다. 로그인 과정은 사용자 기기의 환경에 따라 다음과 같이 나뉩니다.

  • 카카오톡 앱이 설치되어 있고 카카오계정이 연결되어 있는 경우: 카카오톡의 카카오계정을 이용합니다.
  • 카카오톡 앱이 설치되어 있으나 카카오계정 연결이 되어 있지 않은 경우: 사파리(Safari) 웹브라우저를 통해 카카오계정 연결을 수행하게 됩니다.
  • 카카오톡 앱이 설치되어 있지 않은 경우: SDK의 내부 웹뷰를 통해 카카오계정 연결을 수행하게 됩니다.

해당 로그인 기능은 OAuth 2.0을 지원합니다. 다음은 카카오 플랫폼 서비스에서 제공하는 가장 일반적인 OAuth 인증의 과정입니다.

  1. 사용자는 카카오계정으로 로그인 버튼을 클릭합니다.
  2. 카카오톡 앱에 연결된 카카오계정의 자격정보(Credentials)를 통해 사용자를 인식합니다.
  3. 자격정보가 올바르다면 사용자(Resource Owner)로부터 접근 자원에 대한 동의/허가를 얻습니다.
  4. 위 3까지 성공적으로 수행되었다면 인증 코드(Authorization Code)가 발급됩니다. 해당 인증 코드는 Redirection URI를 기반으로 Third 앱에 전달됩니다.
  5. Third 앱에서는 전달받은 인증 코드를 기반으로 사용자 토큰(Access Token, Refresh Token)을 요청하고 얻게 됩니다.

    사용자 토큰은 카카오 플랫폼 서비스에서 제공하는 로그인 기반의 기능을 사용하는데 있어 중요한 키로 사용됩니다. OAuth 2.0의 보다 자세한 내용은 여기를 참고하세요.

위의 복잡한 과정들은 Kakao SDK가 많은 부분 담당하고 있으며, 이를 어떻게 사용하는지에 대해 다음에서 설명합니다.

로그인 버튼 추가

로그인을 위해 버튼을 추가합니다. UIButton 을 상속한 KOLoginButton 을 이용하여 로그인 버튼을 손쉽게 생성할 수 있습니다.

// button position
int xMargin = 30;
int marginBottom = 25;
CGFloat btnWidth = self.view.frame.size.width - xMargin * 2;
int btnHeight = 42;

UIButton* kakaoLoginButton
    = [[KOLoginButton alloc] initWithFrame:CGRectMake(xMargin, self.view.frame.size.height-btnHeight-marginBottom, btnWidth, btnHeight)];
kakaoLoginButton.autoresizingMask = UIViewAutoresizingFlexibleTopMargin | UIViewAutoresizingFlexibleWidth;

[self.view addSubview:kakaoLoginButton];

위에서 생성한 버튼에 로그인 호출을 담당할 method(여기서는 invokeLoginWithTarget method)를 연결합니다.

[kakaoLoginButton addTarget:self
                     action:@selector(invokeLoginWithTarget:)
           forControlEvents:UIControlEventTouchUpInside];

아래는 invokeLoginWithTarget method 내부입니다. 이로서 사용자가 '카카오계정으로 로그인' 버튼을 클릭하여 로그인 과정을 시작할 수 있게 합니다.

// ensure old session was closed
[[KOSession sharedSession] close];

[[KOSession sharedSession] openWithCompletionHandler:^(NSError *error) {
    if ([[KOSession sharedSession] isOpen]) {
        // login success
        NSLog(@"login succeeded.");
    } else {
        // failed
        NSLog(@"login failed.");
    }
}];

로그인시 기본적으로 앱의 상황에 맞게 카카오톡, 카카오스토리, 다른 카카오계정으로 로그인의 다중 인증 선택창이 나타납니다. 인증 타입의 종류를 직접 컨트롤하고 싶을 경우, 원하는 인증방식의 KOAuthType을 파라미터로 넘길 수 있습니다. 다음은 오직 카카오톡으로 간편로그인만을 원하는 경우의 예제입니다.

[[KOSession sharedSession] openWithCompletionHandler:^(NSError *error) {
    ...
} authType:(KOAuthType)KOAuthTypeTalk, nil]];

미리 정의한 Redirection URI을 통해, 인증 과정이 올바로 진행되도록 AppDelegate에 아래와 같은 코드를 추가합니다. 해당 코드를 추가함으로서 Kakao SDK는 사용자 토큰을 취득하게 됩니다.

- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url
                                       sourceApplication:(NSString *)sourceApplication
                                              annotation:(id)annotation {
    ...
    if ([KOSession isKakaoAccountLoginCallback:url]) {
        return [KOSession handleOpenURL:url];
    }
    ...
}

- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url
                                                 options:(NSDictionary<NSString *,id> *)options {
    ...
    if ([KOSession isKakaoAccountLoginCallback:url]) {
        return [KOSession handleOpenURL:url];
    }
    ...    
}

- (void)applicationDidBecomeActive:(UIApplication *)application
{
    [KOSession handleDidBecomeActive];
}

로그인 성공시 Access Token, Refresh Token을 참조 할 수도 있습니다.

[KOSession sharedSession].accessToken

카카오 로그인에서는 보안 수준을 강화하기 위하여 OAuth 클라이언트 시크릿을 제공합니다.

클라이언트 시크릿은 개발자 웹사이트의 내 애플리케이션 설정 > 일반 > Client Secret 메뉴를 통해 발급 및 활성화를 수행할 수 있습니다.

클라이언트 시크릿을 사용하려면 AppDelegate의 application:didFinishLaunchingWithOptions: 메소드 내에서 다음과 같이 클라이언트 시크릿을 설정해야 합니다.

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
    [KOSession sharedSession].clientSecret = @"<your client secret>";
    return YES;
}

결과 예시

다음은 이해를 돕기위한 로그인 과정의 결과 예시입니다.

login_button.png

카카오톡 앱이 설치되어 있다면, 카카오톡으로 간편로그인을 할지 다른 계정을 직접 입력해서 로그인할지 선택할 수 있는 창이 뜨게 됩니다.

카카오스토리로 간편로그인의 경우 카카오스토리 2.9.0이상의 버젼이 필요합니다.

choose_account_dialog.png

1. 카카오톡으로 간편로그인을 선택한 경우
1-1. 카카오계정이 연결되어 있는 경우, 접근 자원에 대한 동의/허가를 위한 화면이 나타납니다.

sample_app_approval_on_talk.png

1-2. 카카오계정 연결이 되어 있지 않은 경우, 사파리(Safari) 웹브라우저를 통해 아이디와 비밀번호를 요구하는 화면이 나타납니다. 자격 정보(Credentials)에 대한 검증이 통과하면 접근 자원에 대한 동의/허가를 위한 화면이 나타납니다.

kakao_account_login_browser.png sample_app_approval.png

2. 다른 계정으로 로그인을 선택한 경우 카카오톡 앱이 설치되어 있지 않은 경우, 웹뷰를 통해 아이디와 비밀번호를 요구하는 화면이 나타납니다. 자격 정보(Credentials)에 대한 검증이 통과하면 접근 자원에 대한 동의/허가를 위한 화면이 나타납니다.

kakao_account_login_webview.png sample_app_approval_on_talk.png

로그아웃

사용자의 기기에서 앱과 카카오계정과의 세션 연결을 해제하는 기능입니다.

로그인 기능은 멀티디바이스를 지원합니다. 만약 사용자가 여러 기기에서 하나의 같은 카카오계정으로 로그인 후 로그아웃을 수행한다면, 해당 로그아웃을 수행한 기기에서만 세션 연결이 해제됩니다.

다음은 로그아웃을 수행하는 예제 코드입니다.

[[KOSession sharedSession] logoutAndCloseWithCompletionHandler:^(BOOL success, NSError *error) {
    if (success) {
        // logout success.
    } else {
        // failed
        NSLog(@"failed to logout.");
    }
}];

로그아웃의 경우 아래의 원인들로 실패할 수 있습니다.

상태변경 이벤트 관리

카카오계정의 세션 연결 상태는 로그인, 로그아웃 등의 과정을 통해 동적으로 변할 수 있습니다. 해당 상태변경시 발생하는 이벤트(Notification)는 다음 예제 코드를 통해 다룰 수 있습니다.

이벤트를 처리할 메소드를 정의합니다.

- (void)kakaoSessionDidChangeWithNotification:(NSNotification *)notification
{
    if ( ! [[KOSession sharedSession] isOpen] ) {
        // do something for unauthenticated user
    }
}

위에서 정의한 메소드를 NSNotificationCenter에 Observer로 등록합니다.

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    ...
    // 카카오계정의 세션 연결 상태가 변했을 시,
    // Notification을 kakaoSessionDidChangeWithNotification 메소드에 전달하도록 설정
    [[NSNotificationCenter defaultCenter] addObserver:self
                                             selector:@selector(kakaoSessionDidChangeWithNotification:)
                                                 name:KOSessionDidChangeNotification
                                               object:nil];
    ...
}

앱 연결

앱 연결은 로그인한 사용자와 앱을 카카오 플랫폼에 연결함으로서 일반적으로 사용자가 앱 가입/등록 요청을 하는 경우와 비슷합니다. 카카오 플랫폼 서비스를 올바로 사용하기 위해서는 로그인 후 반드시 앱 연결이 선행되어야 하며, 최초 한번만 수행가능합니다. 앱 연결이 올바로 수행되면 해당 사용자에 대한 고유한 아이디(ID)가 부여됩니다.

다음은 앱 연결을 수행하는 예제 코드입니다.

[KOSessionTask signupTaskWithProperties:nil
                      completionHandler:^(BOOL success, NSError *error) {
    if (success) {
        // success
    } else {
        // failed
        if( error.code == KOServerErrorAlreadyRegisteredUser ){
            // do something for already registered user.
        }
    }
}];

앱연결의 경우 아래의 원인들로 실패할 수 있습니다.

앱 연결 해제

앱 연결 해제는 카카오 플랫폼에 연결된 사용자와 앱의 연결을 영구 해제함으로서 일반적으로 사용자가 앱 탈퇴 요청을 하는 경우와 비슷합니다. 앱 연결 해제가 수행된 사용자는 영구적으로 복구가 불가능하며 카카오 플랫폼 서비스를 더이상 사용할 수 없습니다. 단, 다시 앱 연결을 통해 새로운 데이타로 카카오 플랫폼 서비스를 이용할 수는 있습니다.

앱 연결 해제를 수행할 경우 카카오 플랫폼에서 관리하는 해당 사용자의 데이타는 모두 지워집니다. 단, Third앱에서 저장하는 데이타의 경우 카카오 플랫폼 서비스에서는 책임을 질 수 없습니다. 이는 Third앱에서 지워야 할 의무를 가집니다(보다 자세한 내용은 정책 및 약관을 참고하세요). 이것이 흔히 말하는 앱 탈퇴와 앱 연결 해제와의 차이점입니다.

다음은 앱 연결 해제를 수행하는 예제 코드입니다.

[KOSessionTask unlinkTaskWithCompletionHandler:^(BOOL success, NSError *error) {
    if (success) {
        // success
    } else {
        // failed
    }
}];

앱연결 해제의 경우 아래의 원인들로 실패할 수 있습니다.

사용자 정보 요청

사용자 정보 요청은 사용자에 대한 아이디(ID) 와 카카오계정 이메일(email) 및 개별 상세 정보를 얻어 올 수 있는 기능입니다. 해당 기능을 사용하기 위해서는 성공적인 로그인 후에 얻을 수 있는 사용자 토큰이 필요합니다. 또한 앱 연결이 전제가 되어 있어야 합니다.

사용자 아이디(ID)의 경우 앱 연결 과정에서 발급하는 앱별 사용자의 고유 아이디입니다. 해당 아이디를 통해 사용자를 앱에서 식별 가능하며, 앱 연결 해제를 하지 않는 한 같은 사용자는 같은 값으로 계속 유지됩니다.

카카오계정 이메일을 수집하여 사용할때 다음 내용을 주의하세요.

  • 서비스에 제공되는 사용자의 카카오계정 이메일은 인증 받지 않은 이메일도 포합됩니다. 사용자 정보 요청시 이메일과 이메일 인증여부도 포함되어 있으니, 서비스에서는 이메일을 활용하기 전에 이메일 인증여부를 항상 확인해야 합니다.

    서비스 가입시 사용자의 이메일 정보가 필요하다면, 서비스에서 사용자에게 카카오계정 이메일이 인증받지 않았음을 안내하고 사용자로부터 직접 이메일을 입력받는 방법을 권장합니다.(예. 인증받지 않은 카카오계정을 사용중입니다. 이메일주소 입력이 필요합니다.)

  • 사용자가 카카오계정의 이메일 제공을 거부한 경우 사용자의 이메일은 제공되지 않습니다. 서비스 가입시 사용자의 이메일 정보가 필요하다면, 사용자로부터 직접 이메일을 입력받는 방법을 권장합니다.

  • 카카오계정의 이메일은 사용자의 요청으로 인해 변경 될 수 있습니다. 서비스에서는 이메일을 활용하는 시점에 이메일의 변경 유무를 확인할 것을 권장합니다.

카카오 플랫폼 서비스에서는 편의를 위해 카카오톡 또는 카카오스토리 서비스와 연동하여 사용자별 다음과 같은 기본 부가정보를 제공합니다.

  • nickname: 카카오톡 또는 카카오스토리의 닉네임 정보
  • profile_image: 카카오톡 또는 카카오스토리의 프로필 이미지 URL
  • thumbnail_image: 프로필 이미지의 썸네일 URL

해당 부가정보는 설정에 의해, 필요시 앱 연결 과정에서 최초 한번만 카카오톡 또는 카카오스토리 서비스와 동기화 연동을 하게 됩니다. 사용자가 해당 정보를 카카오톡 또는 카카오스토리에서 변경하였어도 추후 변경된 데이타는 반영되지 않습니다.

카카오톡 또는 카카오스토리와의 동기화 연동 기능을 사용하지 않도록 설정되어 있을 경우, 해당 부가정보는 빈값으로 채워져 있습니다. 이 기본 부가정보는 사용자 정보 저장 기능을 통해 다른 데이타로 언제든 교체가 가능합니다. 카카오 플랫폼 서비스에서 제공하는 카카오톡 또는 카카오스토리 API를 통해 사용자 정보 저장 기능을 이용하여 직접 동기화를 할 수도 있습니다.

다음은 사용자 전체 정보를 얻어오는 예제 코드입니다. 사용자 본인의 아이디와 부가 정보는 KOUser 객체를 통해 반환됩니다. 이메일을 수집하도록 설정한 경우 이메일 수집에 동의한 사용자에 한해서 이메일 정보가 반환됩니다.

[KOSessionTask meTaskWithCompletionHandler:^(KOUser* result, NSError *error) {
    if (result) {
        // success
        NSLog(@"userId=%@", result.ID);
        NSLog(@"nickName=%@", [result propertyForKey:KOUserNicknamePropertyKey]);

        if (result.email) {
            NSLog(@"email=%@", result.email);
        } else {
            // disagreed
        }
    } else {
        // failed
    }
}];

위와 같이 실행할 경우 해당 사용자의 (조회 가능한) 전체 정보가 반환됩니다. 얻고 싶은 정보만 지정하기 위해서는 meTaskWithPropertyKeys:completionHandler: 또는 meTaskWithSecureResource:propertyKeys:completionHandler: 메소드를 사용합니다. 이메일과 기본 부가정보 외에 내 애플리케이션 설정의 프로퍼티 관리에 추가된 프로퍼티 이름을 지정할 수 있습니다. 이메일과 기본 부가정보의 경우 다음과 같이 미리 정의된 키가 제공됩니다. KOUser.h 파일에 정의되어 있습니다.

설명
KOUserEmailPropertyKey 사용자 카카오계정의 이메일
KOUserIsVerifiedEmailPropertyKey 인증받은 카카오계정 이메일인지 여부
KOUserNicknamePropertyKey 카카오톡 또는 카카오스토리의 닉네임 정보
KOUserProfileImagePropertyKey 카카오톡 또는 카카오스토리의 프로필 이미지 URL
KOUserThumbnailImagePropertyKey 프로필 이미지의 썸네일 URL

다음은 사용자 정보 중 닉네임과 썸네일URL 및 개발자가 별도로 추가한 “age” 프로퍼티를 얻어오는 예제 코드입니다.

[KOSessionTask meTaskWithPropertyKeys:@[KOUserNicknamePropertyKey,
                                        KOUserThumbnailImagePropertyKey,
                                        @"age"]
                    completionHandler:^(KOUser* result, NSError *error) {
    if (result) {
        // success
        NSLog(@"nickName=%@", [result propertyForKey:KOUserNicknamePropertyKey]);
        NSLog(@"thumbnailURL=%@", [result propertyForKey:KOUserThumbnailImagePropertyKey]);
        NSLog(@"age=%@", [result propertyForKey:@"age"]);
    } else {
        // failed
    }
}];

로그인 또는 신규 가입 절차에 의해서 이메일 수집 동의를 받기 전에도 propertyKeys 지정을 통해 이메일을 수집할 수 있습니다. 이메일을 수집하도록 설정되어 있다면 다음과 같이 이메일을 지정할 경우 동의를 받지 않은 사용자에 한해서 동의창이 노출되고 이메일 수집 동의를 받을 수 있습니다.(동의 받은 사용자일 경우에는 동의창이 노출되지 않습니다.) 사용자가 이메일 수집에 동의하지 않은 경우 KOErrorCancelled 에러가 반환됩니다.

[KOSessionTask meTaskWithPropertyKeys:@[KOUserEmailPropertyKey]
                    completionHandler:^(KOUser* result, NSError *error) {
    if (result) {
        // success
        NSLog(@"email=%@", result.email);
    } else {
        switch (error.code) {
            case KOErrorCancelled:
                // disagreed or cancelled
                break;
            default:
                // failed
                break;
        }
    }
}];

리턴될 수 있는 에러는 아래와 같습니다.

이메일을 수집하기 위해서는 다음과 같이 호출합니다.

사용자 정보 저장

사용자 정보 저장은 개별 사용자에 대한 특정 부가정보를 저장할 수 있는 기능입니다. 카카오 플랫폼 서비스에서 제공하는 기본 부가정보 외에도, 개발자 웹사이트를 통해 앱별 커스텀한 정보를 선언하여 유저별 데이타를 저장할 수 있습니다. 해당 기능을 사용하기 위해서는 성공적인 로그인 후에 얻을 수 있는 사용자 토큰이 필요합니다. 또한 앱 연결이 전제가 되어 있어야 합니다.

사용자 정보 저장 기능으로 수정할 수 없는 사용자의 정보도 존재합니다. 예를 들어 사용자의 아이디(ID)는 수정될 수 없습니다.

다음은 사용자 정보에 기본 부가정보 중 nickname과 커스텀 정보 age을 저장하는 예제 코드입니다. 커스텀 정보 age 항목은 대쉬보드의 설정 > 사용자 관리 메뉴에 미리 선언되어 있어야 합니다.

NSDictionary *properties = @{
    @"nickname":@"vincent",
    @"age":@"20"
};

[KOSessionTask profileUpdateTaskWithProperties:properties
                             completionHandler:^(BOOL success, NSError *error) {

   if (success) {
       NSLog(@"succeeded to set my properties.");
   } else {
       NSLog(@"failed to set my properties.");
   }
}];

리턴될 수 있는 에러는 아래와 같습니다.

토큰 정보 얻기

로그인을 통해 얻은 사용자 토큰의 정보를 얻는 기능입니다. 호출에 성공할 경우 토큰 정보(사용자 ID, 토큰유효시간)를 받을 수 있으며, refreshToken이 만료되어 갱신이 불가능하거나 기타 오류 발생 시 해당 오류를 받을 수 있습니다.

accessToken만 만료되고 refreshToken이 유효할 경우는 내부적으로 자동 갱신(KOSessionTask의 모든 API 공통) 처리되므로 기존에 로그인 되어있던 토큰이 아닌 새롭게 갱신된 토큰 정보를 받게 됩니다.

다음은 사용자 토큰의 정보를 얻는 예제 코드입니다.

[KOSessionTask accessTokenInfoTaskWithCompletionHandler:^(KOAccessTokenInfo *accessTokenInfo, NSError *error) {
    if (error) {
        switch (error.code) {
            case KOErrorDeactivatedSession:
                // 세션이 만료된(access_token, refresh_token이 모두 만료된 경우) 상태
                ...
                break;
            default:
                // 예기치 못한 에러. 서버 에러
                ...
                break;
        }
    } else {
        // 성공 (토큰이 유효함)
        NSLog(@"남은 유효시간: %@ (단위: ms)", accessTokenInfo.expiresInMillis);
        ...
    }
}];

토큰 주기적 갱신

로그인을 통해 얻은 사용자 토큰을 자동으로 주기적 갱신하는 기능입니다. 다른 API 사용 없이 오직 로그인만을 사용하는 앱일 경우, 사용자 토큰의 만료에 대한 걱정없이 SDK 내부적으로 해당 토큰을 자동 주기적으로 갱신합니다.

해당 기능과 관련없이 SDK에서는 API호출시 자동으로 사용자 토큰을 갱신하는 기능이 내장되어 있습니다.

해당 기능을 사용하기 위해서는 아래와 같이 두가지를 추가로 적용합니다. 먼저 AppDelegate의 didFinishLaunchingWithOptions에서 automaticPeriodicRefresh 옵션 사용을 활성화합니다.

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
    ...
    [KOSession sharedSession].automaticPeriodicRefresh = YES;
}

AppDelegate의 applicationDidEnterBackground부분에 아래를 추가합니다.

- (void)applicationDidEnterBackground:(UIApplication *)application {
    ...
    [KOSession handleDidEnterBackground];
}

토큰 암호화 저장

로그인을 통해 얻은 사용자 토큰은 SDK를 통해 디바이스에 저장되게 됩니다. 이때 저장 보안 방식을 앱의 plist(예를들어 프로젝트의 Info 설정, info.plist파일)의 옵션으로 선택할 수 있습니다. 다음은 토큰 암호화 저장 기능을 활성화 할때의 예입니다. 디폴트 값은 false입니다.

<key>KAKAO_SECURE_MODE</key>
<true/>

Last Modified : 2017-08-03