사이드 메뉴
커뮤니케이션
API 제공
어드민 API
iOS
이 문서는 Partner iOS SDK(Kakao Partner SDK for iOS)를 사용한 카카오 로그인 모듈 사용 방법을 안내합니다.
사용자에게 카카오톡 앱으로 로그인을 요청합니다.
자세한 안내와 예제는 카카오톡으로 로그인을 참고합니다.
사용자에게 카카오계정 정보 입력으로 로그인을 요청합니다.
자세한 안내는 카카오계정으로 로그인을 참고합니다.
사용자가 [카카오톡으로 로그인]과 [카카오계정으로 로그인] 둘 중 원하는 방식을 선택할 수 있는 로그인 선택 화면를 제공합니다. 개발자는 별도의 UI 구현 없이 간편하게 통합 로그인을 구현할 수 있습니다.
자세한 안내와 예제는 카카오 로그인 방법 선택을 참고합니다.
카카오 로그인 완료 시 발급받은 액세스 토큰으로 사용자 정보 조회를 요청해 회원 가입에 필요한 사용자 정보를 제공받을 수 있습니다. 일부 사용자 정보는 동의항목 설정 및 사용자 동의가 필요합니다.
카카오 로그인 시 사용할 수 있는 추가 기능을 안내합니다.
사용자가 첫 카카오 로그인 시 동의 화면에서 동의하지 않았지만, 서비스 이용 중 추가로 동의해야 하는 항목을 동적으로 동의 요청하는 기능입니다.
자세한 안내와 예제는 동의항목 추가 동의 요청을 참고합니다.
카카오싱크 서비스에서 동의하지 않은 약관을 선택해 사용자에게 동의 요청하는 기능입니다.
자세한 안내와 예제는 서비스 약관 선택해 동의 요청을 참고합니다.
카카오싱크 간편가입 화면에서 상황에 따라 카카오톡 채널을 선택해 노출하는 기능입니다.
자세한 안내와 예제는 채널 선택해 동의 요청을 참고합니다.
동의항목 추가 동의 요청 시, scope 파라미터에 openid 값을 추가 전달해야 합니다.
자세한 안내와 예제는 동의항목 추가 동의 요청을 참고합니다.
기존 로그인 여부와 상관없이 로그인은 서비스의 필요에 따라 사용자 인증을 다시 수행하고자 할 때 사용하는 추가 기능입니다.
자세한 안내와 예제는 기존 로그인 여부와 상관없이 로그인을 참고합니다.
사용자에게 카카오계정 신규 가입 후 로그인하도록 하기 위해 사용하는 기능입니다.
자세한 안내와 예제는 카카오계정 가입 후 로그인을 참고합니다.
카카오계정 로그인 화면의 ID란에 login_hint 파라미터 값을 자동 입력하는 기능입니다.
자세한 안내와 예제는 로그인 힌트를 참고합니다.
카카오 로그인 요청 시 브라우저에 카카오계정 간편로그인 정보가 있으면 계정 선택 화면을 표시하는 추가 기능입니다.
자세한 안내와 예제는 카카오계정 간편로그인을 참고합니다.
SSO(Single Sign On)는 카카오톡에 이미 로그인된 세션을 활용하여, 별도의 앱 전환이나 UI 노출 없이 사용자를 서비스에 로그인시킬 수 있는 기능입니다.
| 레퍼런스 | 앱 설정 |
|---|---|
[SDK] prepareForSso(groupName:)[SDK] isSsoLoginAvailable()[SDK] getTalkUsers()[SDK] sso(id:completion:)[SDK] sso(_ type:useUnifiedTerms:completion:)[SDK] TalkUser[SDK] SsoLoginType | 설치 모듈 설정 초기화 |
사용 방법을 확인한 후, 아래와 같이 구현합니다.
- SSO 가능 여부를 확인합니다.
- SSO 인증을 요청합니다. 아래 두 가지 방법 중 하나를 선택할 수 있습니다.
SSO 기능은 카카오 통합서비스약관에 동의한 통합계정 사용자만 이용할 수 있습니다. 사용자가 통합서비스 약관에 동의하지 않았다면, SSO 토큰이 발급되지 않습니다.
따라서 통합서비스 약관을 사용하는 서비스는 SSO 토큰 발급 시 아래와 같이 처리해야 합니다.
- 사용자 ID를 지정해 SSO 요청 시, 카카오톡 사용자 조회 결과 중
isUnifiedTermsAgreed프로퍼티를 확인해 통합계정 사용자인지 확인 후 처리해야 합니다. - 카카오톡 활성화 계정으로 SSO를 요청 시,
useUnifiedTerms파라미터를true로 설정해야 합니다. 선택된 계정이 통합 서비스 약관에 동의하지 않았다면 에러가 발생합니다.
SSO 연동 전, 사용하려는 키 체인의 액세스 그룹을 등록해야 합니다. (참고: Apple 공식 문서(Set a keychain item’s access group))
인하우스 앱에서 SSO 기능을 사용하기 위해 최초 1번 호출이 필요합니다.
groupName 값은 페이즈별로 다르므로, 엑세스 그룹 정보를 참조하여 해당하는 페이즈의 액세스 그룹 값을 사용합니다.
// SSO 초기화UserApi.shared.prepareForSso(groupName: ${APP_GROUP_NAME})
키 체인에 접근하기 위해 서비스 단계(페이즈)에 맞는 액세스 그룹과 서비스 키 값을 등록해야 합니다.
액세스 그룹은 카카오톡과 인하우스 앱이 사용할 공용 키 체인 저장소 이름입니다.
서비스 키는 키 체인에 저장된 SSO 인증 토큰을 식별하고 관리하기 위한 고유한 값입니다. 키 체인에 저장된 토큰을 조회하기 위해 사용됩니다. 보안을 위해 base64 인코딩 값으로 제공되나, 디버깅 목적상 원래 문자열도 함께 제공합니다.
| 환경 | 액세스 그룹 | 서비스 키 |
|---|---|---|
| alpha | group.com.kakao.sdk.sso.dev | 원본: com.kakao.sdk.sso.keychain.tokens.Devbase64: Y29tLmtha2FvLnNkay5zc28ua2V5Y2hhaW4udG9rZW5zLkRldg== |
| sandbox | group.com.kakao.sdk.sso.sandbox | 원본: com.kakao.sdk.sso.keychain.tokens.Sandboxbase64: Y29tLmtha2FvLnNkay5zc28ua2V5Y2hhaW4udG9rZW5zLlNhbmRib3g= |
| prod | group.com.kakao.sdk.sso | 원본: com.kakao.sdk.sso.keychain.tokensbase64: Y29tLmtha2FvLnNkay5zc28ua2V5Y2hhaW4udG9rZW5z |
- 위에 안내된 액세스 그룹의 서비스 키를 그대로 사용해야 합니다. 임의로 변경하거나 재사용하지 않도록 주의합니다.
- 서비스 키 값이 외부에 노출되지 않도록 유의 바랍니다. 키 값이 변경되지 않도록 조회만 하는 것을 권장합니다.
SSO 로그인 가능 여부를 판단합니다.
카카오톡이 설치되어 있고, SSO 요청을 할 수 있는 토큰이 디바이스에 저장되어 있는지 확인하여 판단합니다. 키 체인에 카카오톡에서 발급한 토큰이 저장되어 있다면 true를 반환합니다.
SSO 로그인이 가능한 경우, SSO 인증으로 현재 활성화된 카카오톡 계정으로 로그인할 수 있습니다.
// SSO 로그인 가능 여부 확인if UserApi.shared.isSsoLoginAvailable() {UserApi.shared.sso(.active) { token, error inif let error {// SSO 에러 발생. 에러 처리} else {_ = token// SSO 성공 및 OAuth 토큰 발급}}} else {// SSO 로그인 불가}
getTalkUsers()를 호출해 키 체인에 저장된 카카오톡 계정 목록을 조회합니다. 계정 정보에는 사용자 ID, 이메일, 닉네임, 프로필 이미지, 통합 약관 동의 여부가 포함됩니다.
서비스가 직접 구현한 SSO 로그인 화면을 사용할 경우 호출합니다. SSO 로그인 화면에서 사용자가 원하는 계정을 선택하고, 해당 계정으로 SSO 로그인을 완료하는 플로우에서 사용할 수 있습니다.
let talkUsers = UserApi.shared.getTalkUsers()for user in talkUsers {print("User ID: \(user.id)")print("Nickname: \(user.nickName)")print("Display ID: \(user.displayId)")print("Thumbnail URL: \(user.thumbnailUrl ?? "N/A")")print("Unified Terms Agreed: \(user.isUnifiedTermsAgreed)")}
사용자 ID를 지정해 SSO 인증을 하거나, 카카오톡 활성화 계정으로 SSO 인증할 수 있습니다.
성공 시, 지정한 사용자의 토큰이 반환됩니다.
서비스에서 직접 UI를 구현해 SSO 인증을 하려면, 사용자 ID를 지정해 요청해야 합니다. 카카오톡 사용자를 조회해 얻은 사용자 ID를 sso() 호출 시 함께 전달합니다.
// 사용자가 선택한 계정의 카카오톡 ID로 SSO 인증UserApi.shared.sso(id: userId) { token, error inif let error {// SSO 에러 발생. 에러 처리return}_ = token// SSO 성공 및 OAuth 토큰 발급}
현재 카카오톡에 로그인된 계정으로 SSO 인증을 진행합니다. sso() 호출 시, SsoLoginType을 active로 지정합니다.
// 현재 카카오톡에 로그인된 계정으로 SSO 인증UserApi.shared.sso(.active) { token, error inif let error {// SSO 에러 발생. 에러 처리} else {_ = token// SSO 성공 및 OAuth 토큰 발급}}
앱 실행 시 사용자가 앞서 로그인으로 발급받은 토큰이 있는지 확인합니다.
자세한 안내와 예제는 토큰 존재 여부 조회를 참고합니다.
iOS SDK에 저장된 토큰을 폐기하여 사용자를 로그아웃 처리합니다.
자세한 안내와 예제는 로그아웃을 참고합니다.
수동 연결은 자동 연결 설정(auto_regi)을 비활성화(False)한 앱에서 사용하는 기능으로, 회원가입 완료 시 수동으로 사용자와 앱의 연결 상태를 연결(Registered)로 변경하기 위해 호출합니다.
자동 연결을 비활성화한 앱에서 Partner iOS SDK의 사용자 정보 조회(meForPartner) 호출 시, 응답에 hasSignedUp 값을 반환합니다. 앱과 연결되어 있지 않은 사용자라면 hasSignedUp 값은 false입니다. hasSignedUp 값이 nil인 경우, 자동 연결을 사용하는 앱이므로 수동 연결이 불필요합니다.
사용자의 hasSignedUp 값이 false이고, 서비스에서의 가입 준비가 끝나 앱과 연결하려면 signupForPartner() 메서드를 호출합니다.
요청 성공 시 앱과 연결된 사용자의 회원번호가 반환됩니다. 자세한 응답 정보는 REST API를 참고합니다.
수동 연결 시 RequiredAgeVerification 에러가 발생하면 Partner iOS SDK가 내부적으로 연령인증 페이지를 호출하기 위해 verifyAge() 메서드를 호출합니다. 이 외 연령인증이 필요한 경우, 연령인증 정보 조회 및 연령인증 페이지 호출을 참고해 연령인증 처리를 해야 합니다.
UserApi.shared.signupForPartner { (userId, error) inif let error = error {print(error)}else {print("signupForPartner() success.")}}
properties 파라미터로 사용자 프로퍼티 저장을 함께 요청할 수 있습니다. properties 파라미터의 구성 방법은 사용자 프로퍼티 저장을 참고합니다.
앱과 사용자의 연결 상태를 해제합니다.
자세한 안내와 예제는 연결 해제를 참고합니다.
현재 iOS SDK에 저장 중인 액세스 토큰의 정보를 조회합니다.
자세한 안내와 예제는 액세스 토큰 정보 조회를 참고합니다.
사용자가 동의한 동의항목의 상세 정보 목록을 조회합니다.
자세한 안내와 예제는 동의항목 동의 내역 조회를 참고합니다.
사용자의 특정 동의항목에 대한 동의를 철회(Revoke)합니다.
자세한 안내와 예제는 동의항목 동의 철회를 참고합니다.
지정한 동의항목(Scope)을 사용자가 동의한 동의항목으로 추가합니다. 사용자로부터 동의를 받는 주체가 공동체이고 명시적인 제3자 제공 동의 화면을 제공하지 않을 경우, 동의항목 동의 처리 API가 아닌 동의항목 추가 동의 요청 API를 사용할 것을 권장합니다.
upgradeScopes() 메서드를 호출합니다. 추가할 동의항목의 ID를 scopes 파라미터의 값으로 전달해야 합니다. 동의항목 ID는 앱 관리 페이지의 [카카오 로그인] > [동의항목]에서 확인할 수 있습니다. 14세 미만 보호자 동의가 필요한 서비스일 경우, guardianToken 값을 함께 전달해야 합니다.
성공 시 응답은 동의항목 추가 결과를 반영한 동의항목 상세 정보로 scopeInfo 객체입니다. 자세한 응답 정보는 REST API를 참고합니다. 실패 시 에러 코드와 주의 사항을 참고합니다.
UserApi.shared.upgradeScopes(scopes:["friends"], guardianToken: nil, completion: { (scopeInfo, error) inif let error = error {self?.errorHandler(error: error)}else {print("scopeInfo: \(String(describing: scopeInfo))")self?.success()}})
카카오싱크 서비스에서 사용자가 어떤 약관에 동의한 상태인지 조회합니다.
자세한 안내와 예제는 서비스 약관 동의 내역 조회를 참고합니다.
카카오싱크 서비스에서 사용자가 동의한 서비스 약관의 동의를 철회합니다.
자세한 안내와 예제는 서비스 약관 동의 철회를 참고합니다.
사용처 제한 API는 지정된 사용처에만 제공하는 카카오 API입니다. 지정된 사용처 이외의 서비스에서 사용처 제한 API를 사용하려면 [서비스] API플랫폼 아지트에서 별도 협의가 필요합니다.
사용자의 연령인증 정보를 확인합니다. 연령인증의 내용을 숙지한 후 사용해야 합니다.
기준 제한 연령(age_limit), 계산 기준(age_criteria)을 지정하면 요청 시점의 제한 연령 만족 여부를 추가적으로 확인할 수 있습니다.
성공 시 응답은 사용자 ID와 연령인증 상세 정보를 포함합니다. 자세한 응답 정보는 REST API를 참고합니다.
UserApi.shared.ageAuthInfo(ageLimit: 30, ageCriteria: .International, propertyKeys: nil, completion: { (ageAuthInfo, error) inif let error = error {print(error)}else {print("ageAuthInfo() success.")// 성공 시 동작 구현_ = ageAuthInfo}})
사용자 연령인증을 수행하기 위한 페이지를 호출합니다. 연령인증 페이지는 카카오계정에서 제공하는 기능이며, 공동체 서비스에서는 사용할 수 없습니다. 또한 연령인증의 내용을 숙지한 후 사용해야 합니다.
연령인증 방식 중 'B. 필요 시 연령인증' 또는 'C. 앱 설정 없음'을 사용하는 경우, 수동 연결 API 요청 시 사용자의 연령인증 정보를 확인하지 않습니다. 이 경우, 서비스에서 직접 사용자가 서비스의 제한연령을 만족하는지 확인하기 위해 연령인증 정보 조회 후 연령인증 페이지 호출을 요청해야 합니다.
파라미터로 연령인증 레벨(authLevel), 제한 연령(ageLimit) 등을 지정할 수 있습니다. 자세한 파라미터 정보는 레퍼런스에서 확인할 수 있습니다.
UserApi.shared.verifyAge(authLevel: .Level1,ageLimit: 25,skipTerms: false,adultsOnly: false,underAge: false) { (error) inif let error = error {print(error)}else {print("verifyAge() success.")}}