고급 가이드

고급 가이드에서는 자동로그인 구현 시 사용할 수 있는 옵션에 대한 소개와 배송지 정보 조회 APi에 대한 소개를 합니다.

자동로그인

사용자가 서비스 페이지 진입 시, 카카오싱크 간편가입창을 띄우도록 구현할 수 있습니다.

카카오 회원(카카오싱크 간편가입으로 가입한 사용자)의 경우 별도의 액션 없이, 로그인된 상태로 서비스를 이용할 수 있다는 장점이 있습니다.

하지만 카카오 회원이 아닌 사용자는 서비스 페이지보다 카카오싱크 간편가입 화면을 먼저 보게 될 수 있습니다.

이러한 경우 auto_login 파라미터를 사용하면 사용자에게 서비스 페이지를 먼저 보게 만들 수 있습니다.

auto_login 파라미터를 사용했을 때 동작 (권장)

  • 카카오 회원: 인증 코드를 query string으로 전달
  • 카카오 회원이 아닌 사용자: 동의창을 표시하지 않고 query string으로 미연결 상태임을 전달

auto_login 파라미터를 사용하지 않았을 때의 동작 (권장하지 않음)

  • 카카오 회원: 인증 코드를 query string으로 전달
  • 카카오 회원이 아닌 사용자: 동의창 표시

sync_ad_01.png

REST API 사용하기

auto_login 파라미터는 REST API 방식만 지원하며 카카오톡 인앱브라우저에서만 동작합니다.

카카오톡 인앱브라우저에 대한 판단은 User Agent에 KAKAOTALK이 있는지 확인하면 됩니다.

[카카오톡 인앱브라우저 판단]

브라우저 규칙 설명
카카오톡 인앱브라우저 KAKAOTALK Mozilla/5.0 (Android; Mobile; rv:13.0) Gecko/13.0 Firefox/13.0 KAKAOTALK
요청

[요청 URL 정보]

메서드 요청 URL 설명
GET https://kauth.kakao.com/oauth/authorize 카카오 로그인 인증 요청

[요청 파라미터]

파라미터명 타입 필수 여부 설명
client_id String Y 앱 생성시 발급 받은 REST API 키
redirect_uri String Y code를 받을 URI
response_type String Y code 문자열 값으로 고정
auto_login String Y true 문자열 값으로 고정

[요청 샘플]

GET /oauth/authorize?client_id={app_key}&redirect_uri={redirect_uri}&response_type=code&auto_logi=true HTTP/1.1
Host: kauth.kakao.com
응답

동의 버튼을 클릭하면 코드를 쿼리 스트링으로 담아 redirect_uri로 리다이렉트 합니다. redirect_uri 요청에 대해 처리하여 code를 얻도록 합니다.

HTTP/1.1 302 Found
Content-Length: 0
Location: {redirect_uri}?code={authorize_code}

[응답 정보]

파라미터명 타입 설명
code String 인증 성공 시 반환되는 코드
error String 인증 실패 시 반환되는 에러 코드
error_description String 인증 실패 시 반환되는 에러 메시지

[응답 샘플]

카카오 회원

로그인된 상태로 서비스 페이지를 보여주면 됩니다.

HTTP/1.1 302 Found
Content-Length: 0
Location: {redirect_uri}?code={authorize_code}

카카오 회원이 아닌 사용자

로그인이 안된 상태로 서비스 페이지를 보여주면 됩니다.

HTTP/1.1 302 Found
Content-Length: 0
Location: {redirect_uri}?error=auto_login&error_description=NOT_CONNECTED_USER

배송지 조회하기

카카오싱크 간편가입을 통해서 얻은 토큰으로 카카오계정의 배송지 정보를 조회할 수 있습니다.

REST API 사용하기

요청

[요청 URL 정보]

메서드 요청 URL 설명
GET https://kapi.kakao.com/v1/user/shipping_address 배송지 조회 API

[요청 헤더]

헤더명 타입 필수 여부 설명
Authorization String Y 사용자 토큰(access_token)을 전달하는 헤더 포맷
(Authorization: Bearer ${access_token})

[요청 샘플]

curl -v -X GET https://kapi.kakao.com/v1/user/shipping_address
-H "Authorization: Bearer ${access_token}"
응답
필드명 타입 설명
user_id Long 사용자의 고유 ID
has_shipping_addresses Boolean 사용자가 배송지 정보를 소유하고 있는지 여부
shipping_addresses List of Shipping_Address 배송지 정보 리스트

[Shipping_Address]

필드명 타입 필수 여부 설명
id Long Y 배송지 ID
name String Y 배송지명
is_default Boolean Y 기본 배송지 여부
updated_at Integer Y 수정시각
type String Y 배송지 타입, 구주소 또는 신주소(도로명주소)
(OLD/NEW)
base_address String Y 우편번호 검색시 채워지는 기본 주소
detail_address String Y 기본 주소에 추가하는 상세 주소
receiver_name String N 수령인 이름
receiver_phone_number1 String N 수령인 연락처
receiver_phone_number2 String N 수령인 추가 연락처
zone_number String N 신주소 우편번호
zip_code String N 구주소 우편번호

[응답 샘플]

{
 "user_id": 1111111,
 "has_shipping_addresses": true,
 "shipping_addresses_needs_agreement": false,
 "shipping_addresses": [
  {
   "default": true,
   "id": 12345,
   "name": "홍길동",
   "is_default": true,
   "updated_at": 1551883189,
   "type": "OLD",
   "base_address": "제주특별자치도 제주시 첨단로 216-19",
   "detail_address": "스페이스닷투",
   "receiver_name": "홍길동",
   "receiver_phone_number1": "010-1111-1111",
   "receiver_phone_number2": null,
   "zone_number": "63309",
   "zip_code": ""
  },
  {
   "default": false,
   "id": 12346,
   "name": "홍길동",
   "is_default": false,
   "updated_at": 1551883189,
   "type": "OLD",
   "base_address": "경기 성남시 분당구 판교역로 235 에이치스퀘어 N동",
   "detail_address": "7층",
   "receiver_name": "홍길동",
   "receiver_phone_number1": "010-1111-1111",
   "receiver_phone_number2": "",
   "zone_number": "13494",
   "zip_code": "447-713"
  }
 ]
}

Android SDK 사용하기

안드로이드 SDK를 사용하여 카카오계정의 배송지 정보를 조회할 수 있습니다. 3.1.2 단계에 안내되어 있는대로 SDK 초기화 및 유저 로그인이 이루어진 후에 조회가 가능합니다.

배송지 조회 API를 안드로이드 SDK에서 사용하시기 위해서는 프로젝트에 아래와 같이SDK 의존성을 설정해 주어야 합니다.

[build.gradle]

subprojects {
  repositories {
    google()
    jcenter()
    maven { url 'http://devrepo.kakao.com:8088/nexus/content/groups/public/' }
  }
}

[app/build.gradle]

dependencies {
  // 카카오 로그인
  implementation 'com.kakao.sdk:usermgmt:1.17.0'
  // 카카오톡
  implementation 'com.kakao.sdk:kakaotalk:1.17.0'
}

com.kakao.usermgmt 패키지의 UserManagement 클래스를 사용하여 API를 호출합니다

UserManagement.getInstance().shippingAddresses(new
ApiResponseCallback<ShippingAddressResponse>() {
  @Override
  public void onSessionClosed(ErrorResult errorResult) {
    // 자동 가입이 켜진 상태이기 때문에 이 블록은 진입하지 않는다.
  }

  @Override
  public void onNotSignedUp() {
    // 재 로그인이 필요함.
  }

  @Override
  public void onFailure(ErrorResult errorResult) {
  }

  @Override
  public void onSuccess(ShippingAddressResponse result) {
    if (result.shippingAddresses != null) {
      // 배송지 정보 조회 성공
    } else if (result.shippingAddressNeedsAgreement()) {
      // 동적 동의 요청
    } else {
      // 배송지 조회 불가
    }
  }
});

성공 콜백에서 넘겨받는 ShippingAddressResponse 응답 클래스는 REST API 가이드를 참조하세요.

iOS SDK 사용하기

카카오 iOS SDK를 사용해서 배송지를 조회할 수 있습니다.

배송지를 조회하기 위해서는 카카오 로그인 연동을 마친 후 사용자가 로그인이 된 상태여야 합니다.

로그인 된 상태에서 아래와 같이 호출합니다.

KOSessionTask.shippingAddressTask(completionHandler: { (userShippingAddress, error) in
  if let userShippingAddress = userShippingAddress {
    if let shippingAddresses = userShippingAddress.shippingAddresses {
      // 배송지 조회 성공
    } else if userShippingAddress.shippingAddressNeedsAgreement {
      // 배송지 정보를 얻기 위해 사용자에게 동의를 요청해야 함
      KOSession.shared()?.updateScopes(["shipping_address"], completionHandler: { (error) in
        if let error = error as NSError? {
          if error.code == KOErrorCancelled.rawValue {
            // 배송지 정보 동의 취소
          } else {
            // 그 외 에러
          }
        } else {
          // 사용자가 배송지 정보 제공에 동의함
          // 배송지 정보를 다시 요청하면 배송지 획득 가능
        }
      })
    } else {
      // 배송지 조회 가능한 사용자가 아님
    }
  }
})

JavaScript SDK 사용하기

카카오 JavaScript SDK를 사용해서 배송지를 조회할 수 있습니다.

배송지를 조회하기 위해서는 카카오 로그인 연동을 마친 후 사용자가 로그인이 된 상태여야 합니다.

JavaScript SDK 사용을 위해서 SDK를 import 합니다.

<script src="//developers.kakao.com/sdk/js/kakao.min.js"></script>

로그인 된 상태에서 Kakao.API.request 함수를 사용해서 배송지 조회 API를 호출합니다.

Kakao.API.request({
  url: '/v1/user/shipping_address',
  success: function(res) {
    console.log(res);
  },
  fail: function(error) {
    console.log(error);
  }
});

요청에 대한 응답은 REST API 응답과 동일합니다


Last Modified : 2019-05-16