카카오톡

카카오톡 API는 카카오톡 서비스에서 제공하는 API를 말합니다. 카카오계정으로 로그인을 하는 앱에서 사용할 수 있고, 카카오계정에 연결한 카카오톡 사용자에 대해서만 사용할 수 있습니다.

현재 제공되는 카카오톡 API는 다음과 같습니다.

시작하기 전에

  1. 로그인 API를 사용할 수 있는 앱 설정이 되어있는 지 Kakao 계정 로그인이 필요한 앱설정을 참고하여 확인합니다.
  2. 앱 사인(sign)과정에 사용한 키를 설정 > 일반 > 플랫폼 > Android > 키 해시 에 등록한 상태인지 확인합니다.

    키 해시를 생성하는 방법은 앱 생성의 키해시 등록 과정을 참고 합니다.

TalkResponseCallback

Name Return Param Description
onNotKakaoTalkUser void NONE 카카오계정에 연결한 카카오톡 사용자가 아니여서 요청이 실패한 경우 호출된다.

KakaoTalkProfile

TalkResponseCallback을 통해 성공시 onSuccess의 Param으로 KakaoTalkProfile 정보를 넘겨준다.

Name Type Description
nickName String 카카오톡 별명
profileImageUrl String 640px * 640px 크기의 카카오톡 프로필 이미지 URL
thumbnailUrl String 110px * 110px 크기의 카카오톡 썸네일 프로필 이미지 URL
countryISO String 카카오톡 국가

시작하기

API 요청은 KakaoTalkService를 이용하여 요청합니다. 파라미터로 API 요청 결과에 따른 콜백 TalkResponseCallback을 넘깁니다. 아래 예제를 참고하여 TalkResponseCallback를 구현합니다.

Name Param Description
onSuccess T 해당 API 요청이 성공한 경우로요청 결과 T를 받습니다.
onSessionClosed ErrorResult 세션이 닫혀 실패한 경우로 에러 결과를 받습니다.
onNotKakaoStoryUser NONE 카카오톡 미가입 사용자가 요청을 하였기에 실패한 경우 호출되는 콜백입니다.
onFailure ErrorResult 세션이 닫힌 경우와 카카오계정에 연결한 카카오톡 사용자가 아닌 경우를 제외한 다른 이유로 요청이 실패한 경우로 에러 결과를 받습니다.
public class KakaoTalkMainActivity extends Activity {
    private static void redirectLoginActivity() {
        Intent intent = new Intent(this, KakaoTalkLoginActivity.class);
        startActivity(intent);
        finish();
    }

    private void redirectLoginActivity() {
        final Intent intent = new Intent(this, KakaoTalkLoginActivity.class);
        startActivity(intent);
        finish();
    }

    private abstract class KakaoTalkResponseCallback<T> extends TalkResponseCallback<T> {
        @Override
        public void onNotKakaoTalkUser() {
            Logger.w("not a KakaoTalk user");
        }

        @Override
        public void onFailure(ErrorResult errorResult) {
            Logger.e("failure : " + errorResult);
        }

        @Override
        public void onSessionClosed(ErrorResult errorResult) {
            redirectLoginActivity();
        }

        @Override
        public void onNotSignedUp() {
            redirectSignupActivity();
        }
    }
}

프로필 요청

프로필 요청은 사용자중에 카카오계정에 연결한 카카오톡 사용자에 한해 카카오톡 프로필 정보를 얻어 올 수 있는 기능입니다. 해당 기능을 사용하기 위해서는 성공적인 로그인 후에 얻을 수 있는 사용자 토큰이 필요합니다.

다음은 카카오톡 프로필을 요청하는 예제입니다. KakaoTalkService#requestProfile을 호출하고 성공하면 결과인 KakaoTalkProfile를 받아 보여줍니다. 이미지 url을 https로 받고 싶은 경우에는 KakaoTalkService#requestProfile(boolean) API를 호출합니다

public void requestProfile() {
    KakaoTalkService.requestProfile(new KakaoTalkResponseCallback<KakaoTalkProfile>() {
        @Override
        public void onSuccess(KakaoTalkProfile talkProfile) {
            final String nickName = talkProfile.getNickName();
            final String profileImageURL = talkProfile.getProfileImageURL();
            final String thumbnailURL = talkProfile.getThumbnailURL();
            final String countryISO = talkProfile.getCountryISO();
        }
    });
}

성공 결과는 KakaoTalkProfile로 제공됩니다.

나에게 보내기

카카오톡 나에게 보내기는 사용자 중에서 카카오계정에 연결한 카카오톡 사용자에 한해 카카오톡 나와의 챗팅방으로 메시지를 보낼 수 있는 기능입니다. 해당 기능을 사용하기 위해서는 성공적인 로그인 후에 얻을 수 있는 사용자 토큰이 필요합니다.

KakaoTalkService#requestSendMemo API를 호출합니다.

Value Type Description
templateId String '메시지 템플릿' 메뉴를 통해 생성한 메시지 템플릿 id
args Map 메시지 템플릿에 정의한 arg가 있다면, key에 해당하는 value를 포함한 데이타 맵

결과는 성공 여부 Boolean을 포함합니다.

다음은 카카오톡 나에게 보내기를 요청하는 예제입니다. templateId "12345"에 arguments가 ${MESSAGE}와 ${DATE}를 포함한 경우 입니다.

public void requestSendMemo() {
    String message = "Test for send Memo";
    Date date = new Date();
    SimpleDateFormat sdf = new SimpleDateFormat("''yy년 MM월 dd일 E요일");
    KakaoTalkMessageBuilder builder = new KakaoTalkMessageBuilder();
    builder.addParam("MESSAGE", message);
    builder.addParam("DATE", sdf.format(date));

    KakaoTalkService.requestSendMemo(new KakaoTalkResponseCallback<Boolean>() {
        @Override
        public void onSuccess(Boolean result) {
            Logger.d("send message to my chatroom : " + result);
        }
    }
    , "12345" // templateId
    , builder.build());
}

public class KakaoTalkMessageBuilder {
    public Map<String, String> messageParams = new HashMap<String, String>();

    public KakaoTalkMessageBuilder addParam(String key, String value) {
        messageParams.put("${" + key + "}", value);
        return this;
    }

    public Map<String, String> build() {
        return messageParams;
    }
}

Last Modified : 2017-07-28