페이지 이동경로
  • 문서>
  • 메시지

메시지

Legacy Android

이 문서는 Legacy Kakao SDK for Android(이하 Legacy Android SDK)를 사용한 메시지 API 구현 방법을 안내합니다.

애플리케이션 설정 확인

이 기능을 사용하려면 카카오디벨로퍼스(Kakao Developers, 이하 개발자 웹사이트) 애플리케이션(이하 앱) 설정에 Android 플랫폼 및 키 해시 등 정보가 등록되어 있어야 합니다. 자세한 내용은 애플리케이션 등록 가이드를 참고합니다.

메시지 만들기

카카오링크나 카카오톡 메시지 API로 메시지 보내기를 하려면 보낼 메시지를 만들어서 요청 시 전달해야 합니다. 메시지는 종류별 templateObj로 직접 구성해 전달하거나, templateId로 사용자 정의 메시지를 사용할 수 있습니다. 메시지를 구성하는 요소는 메시지 템플릿 가이드에서 확인할 수 있습니다.

기본 템플릿으로 메시지를 직접 구성할 경우, 메시지 템플릿의 종류별 구성 요소 및 예제를 참고해 메시지 내용을 채웁니다. 메시지 구성 요소를 담은 인터페이스 TemplateParams는 Legacy Android SDK에 정의돼 있으므로, TemplateParams를 구현한 클래스로 제공되는 종류별 메시지 클래스의 newBuilder로 객체를 생성하고 실제로 사용할 값을 입력합니다.

다음은 종류별 기본 템플릿으로 메시지를 만드는 예제입니다.

피드
리스트
위치
커머스
텍스트
TemplateParams params = FeedTemplate
        .newBuilder(ContentObject.newBuilder(
                "디저트 사진",
                "https://mud-kage.kakao.com/dn/NTmhS/btqfEUdFAUf/FjKzkZsnoeE4o19klTOVI1/openlink_640x640s.jpg",
                LinkObject.newBuilder()
                        .setWebUrl("https://developers.kakao.com")
                        .setMobileWebUrl("https://developers.kakao.com")
                        .build())
                .setDescrption("아메리카노, 빵, 케익")
                .build())
        .setSocial(SocialObject.newBuilder()
                .setLikeCount(10)
                .setCommentCount(20)
                .setSharedCount(30)
                .setViewCount(40)
                .build())
        .addButton(new ButtonObject(
                "웹에서 보기",
                LinkObject.newBuilder()
                        .setWebUrl("https://developers.kakao.com")
                        .setMobileWebUrl("https://developers.kakao.com")
                        .build()))
        .addButton(new ButtonObject(
                "앱에서 보기",
                LinkObject.newBuilder()
                        .setAndroidExecutionParams("key1=value1")
                        .setIosExecutionParams("key1=value1")
                        .build()))
        .build();
TemplateParams params = ListTemplate.newBuilder(
        "WEEKELY MAGAZINE",
        LinkObject.newBuilder()
                .setWebUrl("https://developers.kakao.com")
                .setMobileWebUrl("https://developers.kakao.com")
                .build())
        .addContent(ContentObject.newBuilder(
                "자전거 라이더를 위한 공간",
                "https://mud-kage.kakao.com/dn/QNvGY/btqfD0SKT9m/k4KUlb1m0dKPHxGV8WbIK1/openlink_640x640s.jpg",
                LinkObject.newBuilder()
                        .setWebUrl("https://developers.kakao.com")
                        .setMobileWebUrl("https://developers.kakao.com")
                        .build())
                .setDescrption("매거진")
                .build())
        .addContent(ContentObject.newBuilder(
                "비쥬얼이 끝내주는 오레오 카푸치노",
                "https://mud-kage.kakao.com/dn/boVWEm/btqfFGlOpJB/mKsq9z6U2Xpms3NztZgiD1/openlink_640x640s.jpg",
                LinkObject.newBuilder()
                        .setWebUrl("https://developers.kakao.com")
                        .setMobileWebUrl("https://developers.kakao.com")
                        .build())
                .setDescrption("매거진")
                .build())
        .addContent(ContentObject.newBuilder(
                "감성이 가득한 분위기",
                "https://mud-kage.kakao.com/dn/NTmhS/btqfEUdFAUf/FjKzkZsnoeE4o19klTOVI1/openlink_640x640s.jpg",
                LinkObject.newBuilder()
                        .setWebUrl("https://developers.kakao.com")
                        .setMobileWebUrl("https://developers.kakao.com")
                        .build())
                .setDescrption("매거진")
                .build())
        .addButton(new ButtonObject(
                "웹에서 보기",
                LinkObject.newBuilder()
                        .setMobileWebUrl("https://developers.kakao.com")
                        .setMobileWebUrl("https://developers.kakao.com")
                        .build()))
        .addButton(new ButtonObject(
                "앱에서 보기",
                LinkObject.newBuilder()
                        .setAndroidExecutionParams("key1=value1")
                        .setIosExecutionParams("key1=value1")
                        .build()))
        .build();
TemplateParams params = LocationTemplate.newBuilder(
        "성남시 분당구 판교역로 235",
        ContentObject.newBuilder(
                "카카오 판교오피스",
                "https://www.kakaocorp.com/images/logo/og_daumkakao_151001.png",
                LinkObject.newBuilder()
                        .setWebUrl("https://developers.kakao.com")
                        .setMobileWebUrl("https://developers.kakao.com")
                        .build())
                .setDescrption("카카오 판교오피스 위치입니다.")
                .build())
        .setAddressTitle("카카오 판교오피스")
        .build();
ContentObject contentObject = ContentObject.newBuilder(
        "Ivory long dress (4 Color)",
        "https://mud-kage.kakao.com/dn/RY8ZN/btqgOGzITp3/uCM1x2xu7GNfr7NS9QvEs0/kakaolink40_original.png",
        LinkObject.newBuilder()
                .setWebUrl("https://style.kakao.com/main/women/contentId=100")
                .setMobileWebUrl("https://m.style.kakao.com/main/women/contentId=100")
                .build())
        .build();

CommerceDetailObject commerceDetailObject = CommerceDetailObject.newBuilder(208800)
        .setDiscountPrice(146160)
        .setDiscountRate(30)
        .build();

ButtonObject firstButtonObject = new ButtonObject(
        "구매하기",
        LinkObject.newBuilder()
                .setWebUrl("https://style.kakao.com/main/women/contentId=100/buy")
                .setMobileWebUrl("https://m.style.kakao.com/main/women/contentId=100/buy")
                .build());

ButtonObject secondButtobObject = new ButtonObject(
        "공유하기",
        LinkObject.newBuilder()
                .setAndroidExecutionParams("contentId=100&share=true")
                .setIosExecutionParams("contentId=100&share=true")
                .build());

TemplateParams params =  CommerceTemplate.newBuilder(contentObject, commerceDetailObject)
        .addButton(firstButtonObject)
        .addButton(secondButtobObject)
        .build();
LinkObject link = LinkObject.newBuilder()
        .setWebUrl("https://developers.kakao.com")
        .setMobileWebUrl("https://developers.kakao.com")
        .build();
TemplateParams params = TextTemplate.newBuilder("Text", link)
        .setButtonTitle("This is button")
        .build();

카카오디벨로퍼스(Kakao Developers, 이하 개발자 웹사이트)의 [도구] > [메시지 템플릿]에서 미리 만들어 둔 사용자 정의 메시지를 사용할 경우, 메시지 내용 일부를 사용자 정의한 argument로 입력했다면 각 argument에 치환해 넣을 값을 template_args로 전달해야 합니다. 그렇지 않다면 사용자 정의한 부분이 ${key}와 같이 그대로 메시지에 포함됩니다.

메시지를 만들 때 이미지 URL이나 특정 이미지 정보가 필요하다면 이미지 업로드 기능을 활용합니다.

이미지 업로드

카카오링크나 카카오톡 메시지 API로 보내는 메시지에 이미지는 URL 형태로만 첨부할 수 있습니다. 따라서 이미지를 메시지 템플릿을 사용해 업로드해두거나, 클라이언트에서 메시지를 만들기 전 이미지 업로드 API를 사용해 이미지 URL을 구해 메시지 구성에 사용합니다.

이미지 업로드 API는 일정 기간 동안 카카오 서버에 이미지를 저장하고, 저장된 이미지의 URL을 메시지 API에서 활용할 수 있도록 도와주는 기능입니다. KakaoLinkServiceuploadImage를 사용합니다.

Parameter
Name Type Description
context Context 카카오톡을 실행시킬 context
secureResource Boolean 이미지 URL을 https로 받을지 여부
imageFile File 로컬 이미지 파일
Sample
File imageFile = new File("{로컬 이미지 파일 경로}");

KakaoLinkService.getInstance()
        .uploadImage(this, true, imageFile, new ResponseCallback<ImageUploadResponse>() {
            @Override
            public void onFailure(ErrorResult errorResult) {
                Log.e("KAKAO_API", "이미지 업로드 실패: " + errorResult);
            }

            @Override
            public void onSuccess(ImageUploadResponse result) {
                Log.i("KAKAO_API", "이미지 업로드 성공");

                Log.d("KAKAO_API", "URL: " + result.getOriginal().getUrl());

                // TODO: 템플릿 컨텐츠로 이미지 URL 입력
            }
        });

업로드 결과인 getImageUrl을 통해 업로드된 이미지의 URL을 확인할 수 있습니다. 저장 기간인 20일을 경과한 이미지는 카카오 서버에서 삭제되고, 이미지 URL도 더이상 사용할 수 없습니다.

만약 이미지 파일을 업로드 하지 않고, 서비스 서버에 저장돼 있는 이미지 정보를 사용하고 싶다면 scrapImage API로 이미지 정보만 받아올 수도 있습니다.

Parameter
Name Type Description
context Context 카카오톡을 실행시킬 Context
secureResource boolean 이미지 URL을 https로 받을지 여부
imageUrl String 서비스의 이미지 서버에 업로드된 URL
Sample
// 원격 이미지 URL
String imageUrl = "http://t1.kakaocdn.net/kakaocorp/pw/kakao/ci_kakao.gif";

// 카카오 이미지 서버로 스크랩
KakaoLinkService.getInstance()
        .scrapImage(this, true, imageUrl, new ResponseCallback<ImageUploadResponse>() {
            @Override
            public void onFailure(ErrorResult errorResult) {
                Log.e("KAKAO_API", "이미지 업로드 실패: " + errorResult);
            }

            @Override
            public void onSuccess(ImageUploadResponse result) {
                Log.i("KAKAO_API", "이미지 업로드 성공");
                
                Log.d("KAKAO_API", "URL: " + result.getOriginal().getUrl());

                // TODO: 템플릿 컨텐츠로 이미지 URL 입력
            }
        });

카카오링크로 보내기

카카오링크 API를 통해 사용자가 친구에게 메시지를 보낼 수 있습니다. 카카오링크는 서비스에서 현재 로그인된 사용자 정보와 메시지 구성을 전달해 메시지 보내기 요청을 하면, 사용자의 카카오톡 친구 목록을 담은 웹 페이지를 제공하고, 목록에서 선택한 친구에게 메시지를 보내는 순서로 동작합니다.

시작하기 전에

카카오링크 API를 사용하려면 AndroidManifest.xml에 다음 내용을 설정해야 합니다. 이 설정대로 카카오톡으로 보낸 메시지 또는 해당 메시지에 포함된 버튼을 누를 때 앱을 호출하기 때문에 올바른 값을 입력해야 합니다.

AndroidManifest.xml
<application>
    <activity android:name=".KakaoLinkResponseActivity">
        <intent-filter>
            <action android:name="android.intent.action.VIEW" />
            <category android:name="android.intent.category.DEFAULT" />
            <category android:name="android.intent.category.BROWSABLE" />

            <data android:scheme="kakao${NATIVE_APP_KEY}"
                    android:host="kakaolink" />
        </intent-filter>
    </activity>
    <meta-data
        android:name="com.kakao.sdk.AppKey"
        android:value="${NATIVE_APP_KEY}" />
</application>

설정된 값은 kakao${NATIVE_APP_KEY}://kakaolink와 같은 형태의 커스텀 URL 스킴을 생성하는 데 사용되며, setAndroidExecutionParams()setIosExecutionParams()를 통해 파라미터를 붙인다면 커스텀 URL 스킴에 추가 파라미터를 붙여 앱을 실행하고 값을 전달하게 됩니다.

전송 방법 선택

다음 표를 참고해 보내려는 메시지 종류에 맞게 카카오링크로 공유하기 기능을 호출합니다.

메시지 종류별 사용 API
Name Description
sendDefault 기본적인 메시지 전송 API
피드, 리스트, 위치, 커머스, 텍스트 메시지를 클라이언트에서 구성해 보낼 때 사용
sendScrapWithURL 스크랩 메시지를 보낼 때 사용
sendCustomWithTemplateId 사용자 정의 메시지를 보낼 때 사용

API마다 파라미터가 다릅니다. 예를 들어 스크랩 메시지는 url, 사용자 정의 메시지 사용 시 templateId를 전달해야 하는 점에 유의합니다. 파라미터 정보와 예제를 참고해 카카오링크로 메시지 보내기 기능을 구현합니다. 메시지 내용은 메시지 만들기 항목을 참고해 구성합니다.

기본 메시지 보내기: sendDefault

Name Type Description Required
params FeedTemplate(피드)
ListTemplate(리스트)
LocationTemplate(위치)
CommerceTemplate(커머스)
TextTemplate(텍스트)
전송할 메시지 템플릿 오브젝트
원하는 템플릿에 맞는 클래스로 오브젝트를 생성해야 함
O
// 기본 템플릿 만들기
// 타입별 템플릿 만들기 상세 예제코드는 [메시지 만들기] 참고
TemplateParams params = 
        ... ;

// 기본 템플릿으로 카카오링크 보내기
KakaoLinkService.getInstance()
        .sendDefault(this, params, new ResponseCallback<KakaoLinkResponse>() {
            @Override
            public void onFailure(ErrorResult errorResult) {
                Log.e("KAKAO_API", "카카오링크 공유 실패: " + errorResult);
            }

            @Override
            public void onSuccess(KakaoLinkResponse result) {
                Log.i("KAKAO_API", "카카오링크 공유 성공");

                // 카카오링크 보내기에 성공했지만 아래 경고 메시지가 존재할 경우 일부 컨텐츠가 정상 동작하지 않을 수 있습니다.
                Log.w("KAKAO_API", "warning messages: " + result.getWarningMsg());
                Log.w("KAKAO_API", "argument messages: " + result.getArgumentMsg());
            }
        });

스크랩 메시지 보내기: sendScrapWithURL

Name Type Description Required
url String 스크랩할 웹 페이지 URL, [내 애플리케이션] > [플랫폼] > [Web]에 등록된 도메인만 사용 가능 O
templateId String 스크랩한 정보를 반영할 사용자 정의 메시지 ID
스크랩 메시지 참고
X
templateArgs Map<String, String templateId로 지정한 템플릿에 사용자 인자(User argument)가 포함되어 있는 경우 대입할 값, key:value 형식으로 전달
스크랩 결과를 덮어쓰기(overwrite) 할 수는 없음
X
// 공유할 URL
String url = "https://developers.kakao.com";

// 스크랩 템플릿으로 카카오링크 보내기
KakaoLinkService.getInstance()
        .sendScrap(this, url, null, new ResponseCallback<KakaoLinkResponse>() {
            @Override
            public void onFailure(ErrorResult errorResult) {
                Log.e("KAKAO_API", "카카오링크 공유 실패: " + errorResult);
            }

            @Override
            public void onSuccess(KakaoLinkResponse result) {
                Log.i("KAKAO_API", "카카오링크 공유 성공");

                // 카카오링크 보내기에 성공했지만 아래 경고 메시지가 존재할 경우 일부 컨텐츠가 정상 동작하지 않을 수 있습니다.
                Log.w("KAKAO_API", "warning messages: " + result.getWarningMsg());
                Log.w("KAKAO_API", "argument messages: " + result.getArgumentMsg());
            }
        });

사용자 정의 메시지 보내기: sendCustomWithTemplateId

Name Type Description Required
templateId String 메시지 템플릿 도구에서 구성한 사용자 정의 템플릿의 ID O
templateArgs Map<String, String> templateId로 지정한 템플릿에 사용자 인자(User argument)가 포함되어 있는 경우 대입할 값, key:value 형식으로 전달 X
// 템플릿 ID
String templateId = "12345";

// 템플릿에 입력된 Argument에 채워질 값
Map<String, String> templateArgs = new HashMap<>();
templateArgs.put("template_arg1", "value1");
templateArgs.put("template_arg2", "value2");

// 사용자 정의 메시지로 카카오링크 보내기
KakaoLinkService.getInstance()
        .sendCustom(this, templateId, templateArgs, null, new ResponseCallback<KakaoLinkResponse>() {
            @Override
            public void onFailure(ErrorResult errorResult) {
                Log.e("KAKAO_API", "카카오링크 보내기 실패: " + errorResult);
            }

            @Override
            public void onSuccess(KakaoLinkResponse result) {
                Log.i("KAKAO_API", "카카오링크 보내기 성공");

                // 카카오링크 보내기에 성공했지만 아래 경고 메시지가 존재할 경우 일부 컨텐츠가 정상 동작하지 않을 수 있습니다.
                Log.w("KAKAO_API", "warning messages: " + result.getWarningMsg());
                Log.w("KAKAO_API", "argument messages: " + result.getArgumentMsg());
            }
        });

서버 콜백 파라미터 설정

사용자가 선택한 친구나 채팅방으로 카카오링크 메시지가 성공적으로 전달된 경우, 개발자 웹사이트에 설정된 콜백 URL로 메시지가 성공적으로 전달되었음을 알려주는 기능입니다. 카카오링크 메시지 전송 시에만 사용할 수 있고, 카카오톡 메시지 전송에는 지원되지 않습니다.

서비스 서버를 통해 카카오링크 메시지 전송 성공 알림을 받을 때, 미리 설정해둔 사용자 정의(Custom) 파라미터를 통해 사용자가 공유한 콘텐츠가 무엇인지 등 추가 정보를 알 수 있습니다. KakaoLinkService의 메시지 보내기 메소드들은 서버콜백에 넘겨줄 파라미터를 받는 오버로딩된 메소드를 갖고 있습니다. 카카오링크로 메시지를 전송하는 시점에 아래와 같이 원하는 정보를 넘겨줄 수 있습니다.

// 링크 콜백에서 함께 수신할 커스텀 파라미터를 설정합니다.
Map<String, String> serverCallbackArgs = new HashMap<>();
serverCallbackArgs.put("user_id", "${current_user_id}");
serverCallbackArgs.put("product_id", "${shared_product_id}");

// 보내기 메소드 호출 시 serverCallbackArgs 파라미터를 추가합니다.
KakaoLinkService.getInstance()
        .sendCustom(this, "12345", null, serverCallbackArgs, new ResponseCallback<KakaoLinkResponse>() {
            @Override
            public void onFailure(ErrorResult errorResult) {
                Log.e("KAKAO_API", "카카오링크 보내기 실패: " + errorResult);
            }

            @Override
            public void onSuccess(KakaoLinkResponse result) {
                Log.i("KAKAO_API", "카카오링크 보내기 성공");
            }
        });

카카오톡으로 보내기

동의 항목 설정 및 권한 필요

이 API를 사용하려면 동의 항목 설정을 참고하여 '카카오톡 메시지 전송' 동의 항목을 설정해야 합니다. 또한 이 API는 사용 권한이 필요합니다. 앱에 사용 권한이 부여되기 전에는 팀원을 대상으로만 동작하므로, 사용 권한 신청을 참고해 사용 권한을 신청해야 합니다.

프로필 받기

카카오톡 프로필 정보를 받으려면 KakaoTalkService가 제공하는 requestProfile API를 호출합니다. 요청 결과 처리를 정의한 KakaoTalkResponseCallback을 구현하고 호출 시 전달해야 합니다.

Paramter
Name Type Description
KakaoTalkResponseCallback KakaoTalkProfile 카카오톡 프로필 정보를 받아 처리하는 콜백(Callback)
Sample
KakaoTalkService.getInstance()
        .requestProfile(new TalkResponseCallback<KakaoTalkProfile>() {
            @Override
            public void onNotKakaoTalkUser() {
                Log.e("KAKAO_API", "카카오톡 사용자가 아님");
            }

            @Override
            public void onSessionClosed(ErrorResult errorResult) {
                Log.e("KAKAO_API", "세션이 닫혀 있음: " + errorResult);
            }

            @Override
            public void onFailure(ErrorResult errorResult) {
                Log.e("KAKAO_API", "카카오톡 프로필 조회 실패: " + errorResult);
            }

            @Override
            public void onSuccess(KakaoTalkProfile result) {
                Log.i("KAKAO_API", "카카오톡 닉네임: " + result.getNickName());
                Log.i("KAKAO_API", "카카오톡 프로필이미지: " + result.getProfileImageUrl());
            }
        });

요청이 성공하면 KakaoTalkProfile 객체로 카카오톡 프로필 정보를 받습니다. 예제 코드를 참고해 객체로부터 카카오톡 프로필의 각 정보를 문자열 값으로 구하는 방법을 확인합니다.

KakaoTalkProfile
Name Type Description
nickName String 카카오톡 닉네임
profileImageUrl String 카카오톡 프로필 이미지 URL
640px * 640px 크기
thumbnailUrl String 카카오톡 프로필 썸네일(Thumbnail) 이미지 URL
110px * 110px 크기
countryISO String 사용자가 카카오톡을 이용 중인 국가

친구 목록 받기

카카오톡 친구 수가 많을 수 있기 때문에, requestAppFriends는 API 사용에 따른 앱 부하를 방지하기 위해 페이지 기반(paging)으로 요청하도록 돼 있습니다. 따라서 friendContext로 친구 정보 조회 기준을 설정해 요청 시 전달해야 합니다. 이와 함께 요청 결과를 어떻게 처리할 것인지 정의한 TalkResponseCallback을 구현하고 전달합니다.

Parameter
Name Type Description
friendContext AppFriendContext 친구 정보 조회 설정
TalkResponseCallback AppFriendsResponse 요청 결과를 받아 처리하는 콜백
AppFriendContext
Name Type Description
secureResource Boolean 이미지 URL 값 HTTPS 여부
true 설정 시 HTTPS 사용
offset Int 친구 리스트 시작 지점 offset
limit Int 한 페이지에 가져올 친구 최대 수, 최대 100
order String 친구 리스트 정렬 순서, asc(오름차순) 또는 desc(내림차순)
appFriendOrder AppFriendOrder 정렬 기준 값
NICKNAME(닉네임) 또는 FAVORITE(즐겨찾기한 친구) 값을 가진 enum
beforeUrl String 이전 페이지 URL, Legacy Android SDK가 자동으로 처리
afterUrl String 다음 페이지 URL, Legacy Android SDK가 자동으로 처리
Sample
// 컨텍스트 생성
//   - 닉네임, 처음(index 0)부터, 100명까지, 오름차순 예시
AppFriendContext context =
        new AppFriendContext(AppFriendOrder.NICKNAME, 0, 100, "asc");

// 조회 요청
KakaoTalkService.getInstance()
        .requestAppFriends(context, new TalkResponseCallback<AppFriendsResponse>() {
            @Override
            public void onNotKakaoTalkUser() {
                Log.e("KAKAO_API", "카카오톡 사용자가 아님");
            }

            @Override
            public void onSessionClosed(ErrorResult errorResult) {
                Log.e("KAKAO_API", "세션이 닫혀 있음: " + errorResult);
            }

            @Override
            public void onFailure(ErrorResult errorResult) {
                Log.e("KAKAO_API", "친구 조회 실패: " + errorResult);
            }

            @Override
            public void onSuccess(AppFriendsResponse result) {
                Log.i("KAKAO_API", "친구 조회 성공");

                for (AppFriendInfo friend : result.getFriends()) {
                    Log.d("KAKAO_API", friend.toString());

                    String uuid = friend.getUUID();     // 메시지 전송 시 사용
                }
            }
        });

카카오톡 친구 정보 요청 결과는 목록과 참고 정보들로 구성됩니다. 친구 목록에는 조회 기준 설정 시 입력했던 숫자만큼의 카카오톡 친구 정보가 AppFriendInfo 객체 형태로 들어있습니다.

AppFriendsResponse
Name Type Description
friends List<AppFriendInfo> 페이징 된 AppFriendInfo 리스트
totalCount Integer 정보를 받을 수 있는 전체 친구 수
favoriteCount Integer 목록 내 전체 즐겨찾기 친구의 수
beforeUrl String 이전 페이지 URL
afterUrl String 다음 페이지 URL
AppFriendInfo
Name Type Description
userId Long 사용자 ID
uuid String 각 앱에서 친구마다 고유한 참고용 코드(Code)
카카오톡 메시지 전송 시 사용
profileNickname String 프로필 닉네임
profileThumbnailImage String 프로필 썸네일 이미지 URL
favorite OptionalBoolean 즐겨찾기 여부

Legacy Android SDK는 AppFriendContext 설정을 바탕으로 실제 요청 URL을 만들어 쓰는 방식으로 동작합니다. 그리고 AppFriendsResponse를 바탕으로 AppFriendContextbeforeUrl, afterUrl를 채워줍니다. 이 점을 활용해 offset, limit을 직접 설정하지 않아도 AppFriendContext를 재사용하여 친구 정보의 이전 페이지와 다음 페이지를 불러올 수 있습니다.

다음 예제처럼 요청 성공 시 다음 페이지 호출을 하는 것보다, 사용자가 RecyclerViewListView 등을 통해 현재 페이지의 친구 목록을 끝까지 스크롤했을 때 다음 페이지를 호출하는 방식(lazy)으로 불필요한 API 호출을 막고 부하를 줄이는 방식을 권장합니다.

    // 다음 페이지 확인 및 재호출
    if (context.hasNext()) {
        requestNextFriends(context);
    }
}

...

public void requestNextFriends(AppFriendContext context) {
    
    // 컨텍스트를 재사용하여 친구 목록 조회
    KakaoTalkService.getInstance()
            .requestAppFriends(context, new TalkResponseCallback<AppFriendsResponse>() {

                // 중략

            });

나에게 보내기

현재 로그인한 사용자의 카카오계정에 연결된 카카오톡을 통해 메시지를 보냅니다. 이 API로는 사용자 본인에게만 메시지를 보낼 수 있고, 다른 사용자에게는 메시지를 보낼 수 없습니다. 메시지는 종류별 Object로 직접 구성해 template_object 값으로 전달하거나, template_id로 사용자 정의 메시지를 사용할 수 있습니다. 각각의 메시지 구성 요소를 담은 객체 클래스는 SDK에 정의돼 있으므로, 새로운 객체를 생성할 때 실제로 사용할 값을 입력합니다.

스크랩 메시지를 보낼 때는 한 가지 주의사항이 있습니다. 이 API는 먼저 웹 페이지를 스크랩하는 과정을 거친 뒤, 스크랩한 정보를 메시지에 담아 보내기 때문에 스크랩할 url을 반드시 전달해야 합니다. 또한 스크랩할 웹 페이지의 도메인은 [내 애플리케이션] > [플랫폼] > [Web]에 등록돼 있어야 합니다.

메시지 보내기 요청 시 전달해야 할 파라미터 정보는 다음과 같습니다. 메시지 내용은 메시지 만들기 항목을 참고해 구성합니다.

Parameter: 기본 메시지 보내기(피드, 리스트, 위치, 커머스 메시지)
Name Type Description Required
params FeedTemplate(피드)
ListTemplate(리스트)
LocationTemplate(위치)
CommerceTemplate(커머스)
TextTemplate(텍스트)
클라이언트에서 메시지를 구성해 요청할 때만 전달하는 파라미터
전송할 메시지 템플릿 오브젝트
KMTTemplate 클래스를 직접 생성해서 사용할 수 없고, 원하는 템플릿에 맞는 적절한 하위 클래스로 오브젝트를 생성해야 함
O
Sample
  • 아래 예제에서 기본 템플릿 만들기 부분은 메시지 만들기 가이드를 참고합니다.
// 기본 템플릿 만들기
// 타입별 템플릿 만들기 상세 예제코드는 [메시지 만들기] 참고
TemplateParams params = 
        ... ;

// 기본 템플릿으로 나에게 보내기
KakaoTalkService.getInstance()
        .requestSendMemo(new TalkResponseCallback<Boolean>() {
            @Override
            public void onNotKakaoTalkUser() {
                Log.e("KAKAO_API", "카카오톡 사용자가 아님");
            }

            @Override
            public void onSessionClosed(ErrorResult errorResult) {
                Log.e("KAKAO_API", "세션이 닫혀 있음: " + errorResult);
            }

            @Override
            public void onFailure(ErrorResult errorResult) {
                Log.e("KAKAO_API", "나에게 보내기 실패: " + errorResult);
            }

            @Override
            public void onSuccess(Boolean result) {
                Log.i("KAKAO_API", "나에게 보내기 성공");
            }
        }, params);
Parameter: 스크랩 메시지 보내기
Name Type Description Required
url String 스크랩할 웹 페이지 URL, [내 애플리케이션] > [플랫폼] > [Web]에 등록된 도메인만 사용 가능 O
templateId String 스크랩한 정보를 반영할 사용자 정의 메시지 ID
스크랩 메시지 참고
X
templateArgs Map<String, String> templateId로 지정한 템플릿에 사용자 인자(User argument)가 포함되어 있는 경우 대입할 값, key:value 형식으로 전달
스크랩 결과를 덮어쓰기(overwrite) 할 수는 없음
X
Sample
// 공유할 URL
String url = "https://developers.kakao.com";

// 스크랩 템플릿으로 나에게 보내기
KakaoTalkService.getInstance()
        .requestSendMemo(url, new TalkResponseCallback<Boolean>() {
            @Override
            public void onNotKakaoTalkUser() {
                Log.e("KAKAO_API", "카카오톡 사용자가 아님");
            }

            @Override
            public void onSessionClosed(ErrorResult errorResult) {
                Log.e("KAKAO_API", "세션이 닫혀 있음: " + errorResult);
            }

            @Override
            public void onFailure(ErrorResult errorResult) {
                Log.e("KAKAO_API", "나에게 보내기 실패: " + errorResult);
            }

            @Override
            public void onSuccess(Boolean result) {
                Log.i("KAKAO_API", "나에게 보내기 성공");
            }
        });
사용자 정의 메시지 메시지 보내기
Name Type Description Required
templateId String 메시지 템플릿 도구에서 구성한 사용자 정의 템플릿의 ID O
templateArgs Map<String, String> templateId로 지정한 템플릿에 사용자 인자(User argument)가 포함되어 있는 경우 대입할 값, key:value 형식으로 전달 X
Sample
// 템플릿 ID
String templateId = "12345";

// 템플릿에 입력된 Argument에 채워질 값
Map<String, String> templateArgs = new HashMap<>();
templateArgs.put("template_arg1", "value1");
templateArgs.put("template_arg2", "value2");

// 사용자 정의 메시지로 나에게 보내기
KakaoTalkService.getInstance()
        .requestSendMemo(new TalkResponseCallback<Boolean>() {
            @Override
            public void onNotKakaoTalkUser() {
                Log.e("KAKAO_API", "카카오톡 사용자가 아님");
            }

            @Override
            public void onSessionClosed(ErrorResult errorResult) {
                Log.e("KAKAO_API", "세션이 닫혀 있음: " + errorResult);
            }

            @Override
            public void onFailure(ErrorResult errorResult) {
                Log.e("KAKAO_API", "나에게 보내기 실패: " + errorResult);
            }

            @Override
            public void onSuccess(Boolean result) {
                Log.i("KAKAO_API", "나에게 보내기 성공");
            }
        }, templateId, templateArgs);

친구에게 보내기

현재 로그인한 사용자의 카카오계정에 연결된 카카오톡을 통해 친구에게 메시지를 보냅니다. 친구에게 메시지를 보낼 때는 받는 사람 정보인 uuid를 요청 시 반드시 전달해야 합니다. 받는 사람은 여러 명일 수 있으므로 uuids로 전달합니다.

스크랩 메시지를 보낼 때는 한 가지 주의사항이 있습니다. 이 API는 먼저 웹 페이지를 스크랩하는 과정을 거친 뒤, 스크랩한 정보를 메시지에 담아 보내기 때문에 스크랩할 url을 반드시 전달해야 합니다. 또한 스크랩할 웹 페이지의 도메인은 [내 애플리케이션] > [플랫폼] > [Web]에 등록돼 있어야 합니다.

메시지 내용은 메시지 만들기 항목을 참고해 구성합니다. 각각의 메시지 보내기 요청 시 전달해야 할 파라미터 정보는 다음과 같습니다.

Parameter: 기본 메시지 보내기(피드, 리스트, 위치, 커머스 메시지)
Name Type Description Required
uuids List<String> 메시지를 받을 친구들의 uuid 배열 O
params FeedTemplate(피드)
ListTemplate(리스트)
LocationTemplate(위치)
CommerceTemplate(커머스)
TextTemplate(텍스트)
클라이언트에서 메시지를 구성해 요청할 때만 전달하는 파라미터
전송할 메시지 템플릿 오브젝트
KMTTemplate 클래스를 직접 생성해서 사용할 수 없고, 원하는 템플릿에 맞는 적절한 하위 클래스로 오브젝트를 생성해야 함
O
Sample
  • 아래 예제에서 친구의 UUID를 가져오는 부분은 친구 목록 받기 가이드를 참고합니다.
  • 아래 예제에서 기본 템플릿 만들기 부분은 메시지 만들기 가이드를 참고합니다.
List<String> uuids = Arrays.asList( /* [친구 목록 받기]를 참고하여 UUID를 가져옵니다. */ );

// 기본 템플릿 만들기
// 타입별 템플릿 만들기 상세 예제코드는 [메시지 만들기] 참고
TemplateParams params = 
        ... ;

// 기본 템플릿으로 친구에게 보내기
KakaoTalkService.getInstance()
        .sendMessageToFriends(uuids, params, new TalkResponseCallback<MessageSendResponse>() {
            @Override
            public void onNotKakaoTalkUser() {
                Log.e("KAKAO_API", "카카오톡 사용자가 아님");
            }

            @Override
            public void onSessionClosed(ErrorResult errorResult) {
                Log.e("KAKAO_API", "세션이 닫혀 있음: " + errorResult);
            }

            @Override
            public void onFailure(ErrorResult errorResult) {
                Log.e("KAKAO_API", "친구에게 보내기 실패: " + errorResult);
            }

            @Override
            public void onSuccess(MessageSendResponse result) {
                if (result.successfulReceiverUuids() != null) {
                    Log.i("KAKAO_API", "친구에게 보내기 성공");
                    Log.d("KAKAO_API", "전송에 성공한 대상: " + result.successfulReceiverUuids());
                }
                if (result.failureInfo() != null) {
                    Log.e("KAKAO_API", "일부 사용자에게 메시 보내기 실패");
                    for (MessageFailureInfo failureInfo : result.failureInfo()) {
                        Log.d("KAKAO_API", "code: " + failureInfo.code());
                        Log.d("KAKAO_API", "msg: " + failureInfo.msg());
                        Log.d("KAKAO_API", "failure_uuids: " + failureInfo.receiverUuids());
                    }
                }
            }
        });
Parameter: 스크랩 메시지 보내기
Name Type Description Required
uuids List<String> 메시지를 받을 친구들의 uuid 배열 O
url String 스크랩할 웹 페이지 URL, [내 애플리케이션] > [플랫폼] > [Web]에 등록된 도메인만 사용 가능 O
templateId String 스크랩한 정보를 반영할 사용자 정의 메시지 ID
스크랩 메시지 참고
X
templateArgs Map<String, String> templateId로 지정한 템플릿에 사용자 인자(User argument)가 포함되어 있는 경우 대입할 값, key:value 형식으로 전달
스크랩 결과를 덮어쓰기(overwrite) 할 수는 없음
X
Sample
  • 아래 예제에서 친구의 UUID를 가져오는 부분은 친구 목록 받기 가이드를 참고합니다.
List<String> uuids = Arrays.asList( /* [친구 목록 받기]를 참고하여 UUID를 가져옵니다. */ );

// 공유할 URL
String url = "https://developers.kakao.com";

// 스크랩 템플릿으로 친구에게 보내기
KakaoTalkService.getInstance()
        .sendMessageToFriends(uuids, url, new TalkResponseCallback<MessageSendResponse>() {
            @Override
            public void onNotKakaoTalkUser() {
                Log.e("KAKAO_API", "카카오톡 사용자가 아님");
            }

            @Override
            public void onSessionClosed(ErrorResult errorResult) {
                Log.e("KAKAO_API", "세션이 닫혀 있음: " + errorResult);
            }

            @Override
            public void onFailure(ErrorResult errorResult) {
                Log.e("KAKAO_API", "친구에게 보내기 실패: " + errorResult);
            }

            @Override
            public void onSuccess(MessageSendResponse result) {
                if (result.successfulReceiverUuids() != null) {
                    Log.i("KAKAO_API", "친구에게 보내기 성공");
                    Log.d("KAKAO_API", "전송에 성공한 대상: " + result.successfulReceiverUuids());
                }
                if (result.failureInfo() != null) {
                    Log.e("KAKAO_API", "일부 사용자에게 메시 보내기 실패");
                    for (MessageFailureInfo failureInfo : result.failureInfo()) {
                        Log.d("KAKAO_API", "code: " + failureInfo.code());
                        Log.d("KAKAO_API", "msg: " + failureInfo.msg());
                        Log.d("KAKAO_API", "failure_uuids: " + failureInfo.receiverUuids());
                    }
                }
            }
        });
Parameter: 사용자 정의 메시지 메시지 보내기
Name Type Description Required
uuids List<String> 메시지를 받을 친구들의 uuid 배열 O
templateId String 메시지 템플릿 도구에서 구성한 사용자 정의 템플릿의 ID O
templateArgs Map<String, String> templateId로 지정한 템플릿에 사용자 인자(User argument)가 포함되어 있는 경우 대입할 값, key:value 형식으로 전달 X
Sample
  • 아래 예제에서 친구의 UUID를 가져오는 부분은 친구 목록 받기 가이드를 참고합니다.
List<String> uuids = Arrays.asList( /* [친구 목록 받기]를 참고하여 UUID를 가져옵니다. */ );

// 템플릿 ID
String templateId = "12345";

// 템플릿에 입력된 Argument에 채워질 값
Map<String, String> templateArgs = new HashMap<>();
templateArgs.put("template_arg1", "value1");
templateArgs.put("template_arg2", "value2");

// 사용자 정의 메시지로 친구에게 보내기
KakaoTalkService.getInstance()
        .sendMessageToFriends(uuids, templateId, templateArgs, new TalkResponseCallback<MessageSendResponse>() {
            @Override
            public void onNotKakaoTalkUser() {
                Log.e("KAKAO_API", "카카오톡 사용자가 아님");
            }

            @Override
            public void onSessionClosed(ErrorResult errorResult) {
                Log.e("KAKAO_API", "세션이 닫혀 있음: " + errorResult);
            }

            @Override
            public void onFailure(ErrorResult errorResult) {
                Log.e("KAKAO_API", "친구에게 보내기 실패: " + errorResult);
            }

            @Override
            public void onSuccess(MessageSendResponse result) {
                if (result.successfulReceiverUuids() != null) {
                    Log.i("KAKAO_API", "친구에게 보내기 성공");
                    Log.d("KAKAO_API", "전송에 성공한 대상: " + result.successfulReceiverUuids());
                }
                if (result.failureInfo() != null) {
                    Log.e("KAKAO_API", "일부 사용자에게 메시 보내기 실패");
                    for (MessageFailureInfo failureInfo : result.failureInfo()) {
                        Log.d("KAKAO_API", "code: " + failureInfo.code());
                        Log.d("KAKAO_API", "msg: " + failureInfo.msg());
                        Log.d("KAKAO_API", "failure_uuids: " + failureInfo.receiverUuids());
                    }
                }
            }
        });

더보기