이 문서는 Kakao SDK for Android(이하 Android SDK)를 사용한 카카오톡 메시지 API 구현 방법을 안내합니다.
메시지 API는 카카오톡 공유와 카카오톡 메시지 두 가지입니다. 이해하기를 참고해 어떤 API로 메시지 보내기를 구현할 것인지 결정합니다. 카카오톡 메시지를 사용하려는 경우, Step 2 이후의 내용을 확인합니다.
종류를 참고하여 어떤 메시지 템플릿을 사용할지 결정합니다.
보낼 메시지는 기본 템플릿을 바탕으로 객체 형태로 구성하거나, 서비스에 맞게 직접 구성한 사용자 정의 템플릿을 사용하여 구성할 수 있습니다. 자세한 정보는 사용 방법에서 확인할 수 있습니다.
카카오톡 메시지의 경우, 수신 대상에 따라 나에게 보내기, 친구에게 보내기로 API가 구분되어 있다는 점에 유의합니다.
전송 대상 | 설명 |
---|---|
나에게 보내기 | 현재 로그인한 사용자의 카카오톡 나와의 채팅에 메시지를 보냅니다. 이 기능으로는 다른 사용자에게 메시지를 보낼 수 없고, 로그인한 사용자 본인에게만 메시지를 보낼 수 있습니다. |
친구에게 보내기 | 현재 로그인한 사용자의 카카오톡 친구에게 메시지를 보냅니다. 피커 또는 친구 목록 가져오기를 통해 수신 대상 정보를 받는 과정을 추가 구현해야 합니다. 한 번에 최대 5명의 친구에게 메시지를 보낼 수 있습니다. 일간 및 월간 제공량이 정해져 있으므로 쿼터을 참고합니다. |
친구에게 보내기를 사용하려는 경우, 카카오톡 메시지 사용 권한 신청을 참고하여 테스트 및 사용 권한 신청을 진행합니다. 이용 정책을 함께 참고합니다.
전송 대상 | 메시지 종류 | 사용 방법 | 메서드 |
---|---|---|---|
나에게 보내기 | 피드, 리스트, 위치, 커머스, 텍스트 | 기본 템플릿 | sendDefaultMemo() |
피드, 리스트, 커머스 | 사용자 정의 템플릿 | sendCustomMemo() | |
스크랩 | 기본 템플릿 | sendScrapMemo() | |
사용자 정의 템플릿 | sendScrapMemo() | ||
친구에게 보내기 | 피드, 리스트, 위치, 커머스, 텍스트 | 기본 템플릿 | friends() sendDefaultMessage() |
피드, 리스트, 커머스 | 사용자 정의 템플릿 | friends() sendCustomMessage() |
|
스크랩 | 기본 템플릿 | friends() sendScrapMessage() |
|
사용자 정의 템플릿 | friends() sendScrapMessage() |
카카오톡 메시지는 지정된 웹 페이지 또는 앱을 실행하는 링크를 포함합니다. 메시지 속 버튼들은 URI 스킴(URI Schemes)과 파라미터로 구성된 커스텀 URL 스킴(Custom URL Scheme)을 통해 앱을 실행합니다.
사용자가 카카오톡 메시지의 버튼을 통해 앱을 실행할 수 있도록 하려면 AndroidManifest.xml 파일에 커스텀 URL 스킴 설정을 해야 합니다. 자세한 설정 안내는 커스텀 URL 스킴 설정를 참고합니다.
카카오톡 공유와 카카오톡 메시지 API 사용을 위해 메시지 만드는 방법은 동일합니다. 메시지 만들기를 참고합니다.
레퍼런스 | 앱 설정 |
---|---|
[SDK, RxSDK] sendDefaultMemo() [SDK, RxSDK] sendDefaultMessage() [SDK] DefaultTemplate [SDK] MessageSendResult [SDK] MessageFailureInfo |
설치 초기화 커스텀 URL 스킴 설정 |
권한 | 사전 설정 | 카카오 로그인 | 동의항목 |
---|---|---|---|
- | 플랫폼 등록 카카오 로그인 활성화 동의항목 |
필요 | 필요: 카카오톡 메시지 전송(talk_message) |
기본 템플릿을 사용해 현재 로그인한 사용자의 카카오톡으로 메시지를 보냅니다. 메시지 전송 대상에 따라 호출해야 할 메서드가 다릅니다.
친구에게 메시지를 보내려면 메시지 전송 요청 시 누구에게 메시지를 보낼 것인지 지정해야 합니다. 피커 또는 친구 목록 가져오기를 통해 메시지를 보낼 친구의 uuid
정보를 확인할 수 있습니다. 친구 목록을 만들어 사용자에게 보여주고, 사용자가 선택한 친구들의 uuid
목록을 receiverUuids
파라미터에 리스트(List)로 담아 전달합니다. 한 번에 최대 5명의 친구에게 메시지를 보낼 수 있습니다.
메시지 전송 결과는 MessageSendResult
객체로 받으며, 메시지 전송에 성공한 친구의 uuid
를 담은 문자열(String) 리스트와 실패 결과를 담은 MessageFailureInfo
객체 리스트로 구성돼 있습니다. 전송 실패 시, MessageFailureInfo
에 포함된 대상 친구의 목록인 receiverUuids
와 오류 원인을 알려주는 code
, msg
로 응답 코드에서 원인을 확인합니다.
TalkApiClient.instance.sendDefaultMemo(defaultFeed) { error ->
if (error != null) {
Log.e(TAG, "나에게 보내기 실패", error)
} else {
Log.i(TAG, "나에게 보내기 성공")
}
}
var disposables = CompositeDisposable()
TalkApiClient.rx.sendDefaultMemo(defaultFeed)
.retryWhen(
// InsufficientScope 에러에 대해 추가 동의 후 재요청
RxAuthOperations.instance.incrementalAuthorizationRequired(context)
)
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe({
Log.i(TAG, "나에게 보내기 성공")
}, { error ->
Log.e(TAG, "나에게 보내기 실패", error)
})
.addTo(disposables)
// 카카오톡 친구 목록 가져오기
TalkApiClient.instance.friends { friends, error ->
if (error != null) {
Log.e(TAG, "카카오톡 친구 목록 가져오기 실패", error)
}
else {
Log.d(TAG, "카카오톡 친구 목록 가져오기 성공 \n${friends!!.elements.joinToString("\n")}")
if (friends.elements.isEmpty()) {
Log.e(TAG, "메시지를 보낼 수 있는 친구가 없습니다")
}
else {
// 서비스에 상황에 맞게 메시지 보낼 친구의 UUID를 가져오세요.
// 이 예제에서는 친구 목록을 화면에 보여주고 체크박스로 선택된 친구들의 UUID 를 수집하도록 구현했습니다.
FriendsActivity.startForResult(
context,
friends.elements.map { PickerItem(it.uuid, it.profileNickname, it.profileThumbnailImage) }
) { selectedItems ->
if (selectedItems.isEmpty()) return@startForResult
Log.d(TAG, "선택된 친구:\n${selectedItems.joinToString("\n")}")
// 메시지 보낼 친구의 UUID 목록
val receiverUuids = selectedItems
// Feed 메시지
val template = defaultFeed
// 메시지 보내기
TalkApiClient.instance.sendDefaultMessage(receiverUuids, template) { result, error ->
if (error != null) {
Log.e(TAG, "메시지 보내기 실패", error)
}
else if (result != null) {
Log.i(TAG, "메시지 보내기 성공 ${result.successfulReceiverUuids}")
if (result.failureInfos != null) {
Log.d(TAG, "메시지 보내기에 일부 성공했으나, 일부 대상에게는 실패 \n${result.failureInfos}")
}
}
}
}
}
}
}
var disposables = CompositeDisposable()
// 카카오톡 친구 목록 가져오기
TalkApiClient.rx.friends()
// 서비스에 상황에 맞게 메시지 보낼 친구의 UUID 를 가져오세요.
// 이 예제에서는 친구 목록을 화면에 보여주고 체크박스로 선택된 친구들의 UUID 를 수집하도록 구현했습니다.
.flatMap { friends ->
FriendsActivity.startForResult(
context,
friends.elements.map { PickerItem(it.uuid, it.profileNickname, it.profileThumbnailImage) }
)
}
.observeOn(Schedulers.io())
.flatMap { selectedItems ->
// 메시지 보낼 친구의 UUID 목록
val receiverUuids = selectedItems
// Feed 메시지
val template = defaultFeed
TalkApiClient.rx.sendDefaultMessage(receiverUuids, template)
}
.retryWhen(
// InsufficientScope 에러에 대해 추가 동의 후 재요청
RxAuthOperations.instance.incrementalAuthorizationRequired(context)
)
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe({ result ->
Log.i(TAG, "메시지 보내기 성공 ${result.successfulReceiverUuids}")
if (result.failureInfos != null) {
Log.d(TAG, "메시지 보내기에 일부 성공했으나, 일부 대상에게는 실패 \n${result.failureInfos}")
}
}, { error ->
Log.e(TAG, "메시지 보내기 실패", error)
})
.addTo(disposables)
레퍼런스 | 앱 설정 |
---|---|
[SDK, RxSDK] sendCustomMemo() [SDK, RxSDK] sendCustomMessage() [SDK] MessageSendResult [SDK] MessageFailureInfo |
설치 초기화 커스텀 URL 스킴 설정 |
권한 | 사전 설정 | 카카오 로그인 | 동의항목 |
---|---|---|---|
- | 플랫폼 등록 카카오 로그인 활성화 동의항목 메시지 템플릿 |
필요 | 필요: 카카오톡 메시지 전송(talk_message) |
[도구] > [메시지 템플릿]에서 직접 구성한 사용자 정의 템플릿을 사용하여 현재 로그인한 사용자의 카카오톡으로 메시지를 보냅니다. 메시지 전송 대상에 따라 호출해야 할 메서드가 다릅니다.
사용자 정의 템플릿 ID를 templateId
파라미터로 전달해야 합니다. 메시지에 변동되는 정보를 포함하려면 해당 사용자 정의 템플릿에 사용자 인자를 추가한 후, templateArgs
파라미터를 통해 키와 값을 전달합니다. 사용자 정의 템플릿에 사용자 인자가 포함되었음에도 해당 파라미터를 사용하지 않을 경우, 사용자 인자로 지정된 부분이 ${KEY}
형식으로 메시지에 그대로 노출됩니다.
친구에게 메시지를 보내려면 메시지 전송 요청 시 누구에게 메시지를 보낼 것인지 지정해야 합니다. 피커 또는 친구 목록 가져오기를 통해 메시지를 보낼 친구의 uuid
정보를 확인할 수 있습니다. 친구 목록을 만들어 사용자에게 보여주고, 사용자가 선택한 친구들의 uuid
목록을 receiverUuids
파라미터에 리스트(List)로 담아 전달합니다. 한 번에 최대 5명의 친구에게 메시지를 보낼 수 있습니다.
메시지 전송 결과는 MessageSendResult
객체로 받으며, 메시지 전송에 성공한 친구의 uuid
를 담은 문자열(String) 리스트와 실패 결과를 담은 MessageFailureInfo
객체 리스트로 구성돼 있습니다. 전송 실패 시, MessageFailureInfo
에 포함된 대상 친구의 목록인 receiverUuids
와 오류 원인을 알려주는 code
, msg
로 응답 코드에서 원인을 확인합니다.
// 사용자 정의 메시지 ID
// * 만들기 가이드: https://developers.kakao.com/docs/latest/ko/message/message-template
val templateId = templateIds["customMessage"] as Long
TalkApiClient.instance.sendCustomMemo(templateId) { error ->
if (error != null) {
Log.e(TAG, "나에게 보내기 실패", error)
} else {
Log.i(TAG, "나에게 보내기 성공")
}
}
var disposables = CompositeDisposable()
// 사용자 정의 메시지 ID
// * 만들기 가이드: https://developers.kakao.com/docs/latest/ko/message/message-template
val templateId = templateIds["customMessage"] as Long
TalkApiClient.rx.sendCustomMemo(templateId)
.retryWhen(
// InsufficientScope 에러에 대해 추가 동의 후 재요청
RxAuthOperations.instance.incrementalAuthorizationRequired(context)
)
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe({
Log.i(TAG, "나에게 보내기 성공")
}, { error ->
Log.e(TAG, "나에게 보내기 실패", error)
})
.addTo(disposables)
// 카카오톡 친구 목록 가져오기
TalkApiClient.instance.friends { friends, error ->
if (error != null) {
Log.e(TAG, "카카오톡 친구 목록 가져오기 실패", error)
}
else if (friends != null) {
Log.d(TAG, "카카오톡 친구 목록 가져오기 성공 \n${friends.elements.joinToString("\n")}")
if (friends.elements.isEmpty()) {
Log.e(TAG, "메시지를 보낼 수 있는 친구가 없습니다")
}
else {
// 서비스에 상황에 맞게 메시지 보낼 친구의 UUID 를 가져옵니다.
// 메시지 보낼 친구의 UUID 목록
val receiverUuids = selectedItems
// 사용자 정의 메시지 ID
// * 만들기 가이드: https://developers.kakao.com/docs/latest/ko/message/message-template
val templateId = templateIds["customMessage"] as Long
// 메시지 보내기
TalkApiClient.instance.sendCustomMessage(receiverUuids, templateId) { result, error ->
if (error != null) {
Log.e(TAG, "메시지 보내기 실패", error)
}
else if (result != null){
Log.i(TAG, "메시지 보내기 성공 ${result.successfulReceiverUuids}")
if (result.failureInfos != null) {
Log.d(TAG, "메시지 보내기에 일부 성공했으나, 일부 대상에게는 실패 \n${result.failureInfos}")
}
}
}
}
}
}
}
var disposables = CompositeDisposable()
// 카카오톡 친구 목록 가져오기
TalkApiClient.rx.friends()
// 서비스에 상황에 맞게 메시지 보낼 친구의 UUID 를 가져옵니다.
.observeOn(Schedulers.io())
.flatMap { selectedItems ->
// 메시지 보낼 친구의 UUID 목록
val receiverUuids = selectedItems
// 사용자 정의 메시지 ID
// * 만들기 가이드: https://developers.kakao.com/docs/latest/ko/message/message-template
val templateId = templateIds["customMessage"] as Long
TalkApiClient.rx.sendCustomMessage(receiverUuids, templateId)
}
.retryWhen(
// InsufficientScope 에러에 대해 추가 동의 후 재요청
RxAuthOperations.instance.incrementalAuthorizationRequired(context)
)
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe({ result ->
Log.i(TAG, "메시지 보내기 성공 ${result.successfulReceiverUuids}")
if (result.failureInfos != null) {
Log.d(TAG, "메시지 보내기에 일부 성공했으나, 일부 대상에게는 실패 \n${result.failureInfos}")
}
}, { error ->
Log.e(TAG, "메시지 보내기 실패", error)
})
.addTo(disposables)
레퍼런스 | 앱 설정 |
---|---|
[SDK, RxSDK] sendScrapMemo() [SDK, RxSDK] sendScrapMessage() [SDK] DefaultTemplate [SDK] MessageSendResult [SDK] MessageFailureInfo |
설치 초기화 커스텀 URL 스킴 설정 |
권한 | 사전 설정 | 카카오 로그인 | 동의항목 |
---|---|---|---|
- | 플랫폼 등록 카카오 로그인 활성화 동의항목 |
필요 | 필요: 카카오톡 메시지 전송 (talk_message) |
지정한 웹 페이지를 스크랩한 정보로 스크랩 메시지를 구성하고, 현재 로그인한 사용자의 카카오톡으로 메시지를 보냅니다. 메시지 전송 대상에 따라 호출해야 할 메서드가 다릅니다.
스크랩할 웹 페이지 URL을 url
파라미터로 전달해야 합니다. 스크랩할 웹 페이지의 도메인은 [내 애플리케이션] > [플랫폼] > [Web]에 등록돼 있어야 합니다.
친구에게 메시지를 보내려면 메시지 전송 요청 시 누구에게 메시지를 보낼 것인지 지정해야 합니다. 피커 또는 친구 목록 가져오기를 통해 메시지를 보낼 친구의 uuid
정보를 확인할 수 있습니다. 친구 목록을 만들어 사용자에게 보여주고, 사용자가 선택한 친구들의 uuid
목록을 receiverUuids
파라미터에 리스트(List)로 담아 전달합니다. 한 번에 최대 5명의 친구에게 메시지를 보낼 수 있습니다.
메시지 전송 결과는 MessageSendResult
객체로 받으며, 메시지 전송에 성공한 친구의 uuid
를 담은 문자열(String) 리스트와 실패 결과를 담은 MessageFailureInfo
객체 리스트로 구성돼 있습니다.
전송 실패 시, MessageFailureInfo
에 포함된 대상 친구의 목록인 receiverUuids
와 오류 원인을 알려주는 code
, msg
로 응답 코드에서 원인을 확인합니다.
// 공유할 웹페이지 URL
// * 주의: 개발자사이트 Web 플랫폼 설정에 공유할 URL의 도메인이 등록되어 있어야 합니다.
val url = "https://developers.kakao.com"
TalkApiClient.instance.sendScrapMemo(url) { error ->
if (error != null) {
Log.e(TAG, "나에게 보내기 실패", error)
}
else {
Log.i(TAG, "나에게 보내기 성공")
}
}
var disposables = CompositeDisposable()
// 공유할 웹페이지 URL
// * 주의: 개발자사이트 Web 플랫폼 설정에 공유할 URL의 도메인이 등록되어 있어야 합니다.
val url = "https://developers.kakao.com"
TalkApiClient.rx.sendScrapMemo(url)
.retryWhen(
// InsufficientScope 에러에 대해 추가 동의 후 재요청
RxAuthOperations.instance.incrementalAuthorizationRequired(context)
)
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe({
Log.i(TAG, "나에게 보내기 성공")
}, { error ->
Log.e(TAG, "나에게 보내기 실패", error)
})
.addTo(disposables)
// 카카오톡 친구 목록 가져오기
TalkApiClient.instance.friends { friends, error ->
if (error != null) {
Log.e(TAG, "카카오톡 친구 목록 가져오기 실패", error)
}
else {
Log.d(TAG, "카카오톡 친구 목록 가져오기 성공 \n${friends!!.elements.joinToString("\n")}")
if (friends.elements.isEmpty()) {
Log.e(TAG, "메시지를 보낼 수 있는 친구가 없습니다")
} else {
// 서비스에 상황에 맞게 메시지 보낼 친구의 UUID를 가져오세요.
// 이 예제에서는 친구 목록을 화면에 보여주고 체크박스로 선택된 친구들의 UUID 를 수집하도록 구현했습니다.
FriendsActivity.startForResult(
context,
friends.elements.map { PickerItem(it.uuid, it.profileNickname, it.profileThumbnailImage) }
) { selectedItems ->
if (selectedItems.isEmpty()) return@startForResult
Log.d(TAG, "선택된 친구:\n${selectedItems.joinToString("\n")}")
// 메시지 보낼 친구의 UUID 목록
val receiverUuids = selectedItems
// 공유할 웹페이지 URL
// * 주의: 개발자사이트 Web 플랫폼 설정에 공유할 URL의 도메인이 등록되어 있어야 합니다.
val url = "https://developers.kakao.com"
// 메시지 보내기
TalkApiClient.instance.sendScrapMessage(receiverUuids, url) { result, error ->
if (error != null) {
Log.e(TAG, "메시지 보내기 실패", error)
}
else if (result != null) {
Log.i(TAG, "메시지 보내기 성공 ${result.successfulReceiverUuids}")
if (result.failureInfos != null) {
Log.d(TAG, "메시지 보내기에 일부 성공했으나, 일부 대상에게는 실패 \n${result.failureInfos}")
}
}
}
}
}
}
}
var disposables = CompositeDisposable()
// 카카오톡 친구 목록 가져오기
TalkApiClient.rx.friends()
// 서비스에 상황에 맞게 메시지 보낼 친구의 UUID 를 가져오세요.
// 이 예제에서는 친구 목록을 화면에 보여주고 체크박스로 선택된 친구들의 UUID 를 수집하도록 구현했습니다.
.flatMap { friends ->
FriendsActivity.startForResult(
context,
friends.elements.map { PickerItem(it.uuid, it.profileNickname, it.profileThumbnailImage) }
)
}
.observeOn(Schedulers.io())
.flatMap { selectedItems ->
// 메시지 보낼 친구의 UUID 목록
val receiverUuids = selectedItems
// 공유할 웹페이지 URL
// * 주의: 개발자사이트 Web 플랫폼 설정에 공유할 URL의 도메인이 등록되어 있어야 합니다.
val url = "https://developers.kakao.com"
TalkApiClient.rx.sendScrapMessage(receiverUuids, url)
}
.retryWhen(
// InsufficientScope 에러에 대해 추가 동의 후 재요청
RxAuthOperations.instance.incrementalAuthorizationRequired(context)
)
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe({ result ->
Log.i(TAG, "메시지 보내기 성공 ${result.successfulReceiverUuids}")
if (result.failureInfos != null) {
Log.d(TAG, "메시지 보내기에 일부 성공했으나, 일부 대상에게는 실패 \n${result.failureInfos}")
}
}, { error ->
Log.e(TAG, "메시지 보내기 실패", error)
})
.addTo(disposables)
레퍼런스 | 앱 설정 |
---|---|
[SDK, RxSDK] sendScrapMemo() [SDK, RxSDK] sendScrapMessage() [SDK] MessageSendResult [SDK] MessageFailureInfo |
설치 초기화 커스텀 URL 스킴 설정 |
권한 | 사전 설정 | 카카오 로그인 | 동의항목 |
---|---|---|---|
- | 플랫폼 등록 카카오 로그인 활성화 동의항목 메시지 템플릿 |
필요 | 필요: 카카오톡 메시지 전송 (talk_message) |
[도구] > [메시지 템플릿]에서 직접 구성한 사용자 정의 템플릿에 지정한 웹 페이지의 스크랩 정보를 대입해 스크랩 메시지를 구성하고, 현재 로그인한 사용자의 카카오톡으로 메시지를 보냅니다. 메시지 전송 대상에 따라 호출해야 할 메서드가 다릅니다.
스크랩할 웹 페이지 URL을 url
파라미터로 전달해야 합니다. 스크랩할 웹 페이지의 도메인은 [내 애플리케이션] > [플랫폼] > [Web]에 등록돼 있어야 합니다.
사용자 정의 템플릿 ID를 templateId
파라미터로 전달해야 합니다. 메시지에 변동되는 정보를 포함하려면 해당 사용자 정의 템플릿에 사용자 인자를 추가한 후, templateArgs
파라미터를 통해 키와 값을 전달합니다. 사용자 정의 템플릿에 사용자 인자가 포함되었음에도 해당 파라미터를 사용하지 않을 경우, 사용자 인자로 지정된 부분이 ${KEY}
형식으로 메시지에 그대로 노출됩니다.
친구에게 메시지를 보내려면 메시지 전송 요청 시 누구에게 메시지를 보낼 것인지 지정해야 합니다. 피커 또는 친구 목록 가져오기를 통해 메시지를 보낼 친구의 uuid
정보를 확인할 수 있습니다. 친구 목록을 만들어 사용자에게 보여주고, 사용자가 선택한 친구들의 uuid
목록을 receiverUuids
파라미터에 리스트(List)로 담아 전달합니다. 한 번에 최대 5명의 친구에게 메시지를 보낼 수 있습니다.
메시지 전송 결과는 MessageSendResult
객체로 받으며, 메시지 전송에 성공한 친구의 uuid
를 담은 문자열(String) 리스트와 실패 결과를 담은 MessageFailureInfo
객체 리스트로 구성돼 있습니다. 전송 실패 시, MessageFailureInfo
에 포함된 대상 친구의 목록인 receiverUuids
와 오류 원인을 알려주는 code
, msg
로 응답 코드에서 원인을 확인합니다.
// 공유할 웹페이지 URL
// * 주의: 개발자사이트 Web 플랫폼 설정에 공유할 URL의 도메인이 등록되어 있어야 합니다.
val url = "https://developers.kakao.com"
// 사용자 정의 메시지 ID
// * 만들기 가이드: https://developers.kakao.com/docs/latest/ko/message/message-template
val templateId = templateIds["customMessage"] as Long
TalkApiClient.instance.sendScrapMemo(url, templateId) { error ->
if (error != null) {
Log.e(TAG, "나에게 보내기 실패", error)
}
else {
Log.i(TAG, "나에게 보내기 성공")
}
}
var disposables = CompositeDisposable()
// 공유할 웹페이지 URL
// * 주의: 개발자사이트 Web 플랫폼 설정에 공유할 URL의 도메인이 등록되어 있어야 합니다.
val url = "https://developers.kakao.com"
// 사용자 정의 메시지 ID
// * 만들기 가이드: https://developers.kakao.com/docs/latest/ko/message/message-template
val templateId = templateIds["customMessage"] as Long
TalkApiClient.rx.sendScrapMemo(url, templateId)
.retryWhen(
// InsufficientScope 에러에 대해 추가 동의 후 재요청
RxAuthOperations.instance.incrementalAuthorizationRequired(context)
)
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe({
Log.i(TAG, "나에게 보내기 성공")
}, { error ->
Log.e(TAG, "나에게 보내기 실패", error)
})
.addTo(disposables)
// 카카오톡 친구 목록 가져오기
TalkApiClient.instance.friends { friends, error ->
if (error != null) {
Log.e(TAG, "카카오톡 친구 목록 가져오기 실패", error)
}
else {
Log.d(TAG, "카카오톡 친구 목록 가져오기 성공 \n${friends!!.elements.joinToString("\n")}")
if (friends.elements.isEmpty()) {
Log.e(TAG, "메시지를 보낼 수 있는 친구가 없습니다")
} else {
// 서비스에 상황에 맞게 메시지 보낼 친구의 UUID를 가져오세요.
// 이 예제에서는 친구 목록을 화면에 보여주고 체크박스로 선택된 친구들의 UUID 를 수집하도록 구현했습니다.
FriendsActivity.startForResult(
context,
friends.elements.map { PickerItem(it.uuid, it.profileNickname, it.profileThumbnailImage) }
) { selectedItems ->
if (selectedItems.isEmpty()) return@startForResult
Log.d(TAG, "선택된 친구:\n${selectedItems.joinToString("\n")}")
// 메시지 보낼 친구의 UUID 목록
val receiverUuids = selectedItems
// 공유할 웹페이지 URL
// * 주의: 개발자사이트 Web 플랫폼 설정에 공유할 URL의 도메인이 등록되어 있어야 합니다.
val url = "https://developers.kakao.com"
// 사용자 정의 메시지 ID
// * 만들기 가이드: https://developers.kakao.com/docs/latest/ko/message/message-template
val templateId = templateIds["customMessage"] as Long
// 메시지 보내기
TalkApiClient.instance.sendScrapMessage(receiverUuids, url, templateId) { result, error ->
if (error != null) {
Log.e(TAG, "메시지 보내기 실패", error)
}
else if (result != null) {
Log.i(TAG, "메시지 보내기 성공 ${result.successfulReceiverUuids}")
if (result.failureInfos != null) {
Log.d(TAG, "메시지 보내기에 일부 성공했으나, 일부 대상에게는 실패 \n${result.failureInfos}")
}
}
}
}
}
}
}
var disposables = CompositeDisposable()
// 카카오톡 친구 목록 가져오기
TalkApiClient.rx.friends()
// 서비스에 상황에 맞게 메시지 보낼 친구의 UUID 를 가져오세요.
// 이 예제에서는 친구 목록을 화면에 보여주고 체크박스로 선택된 친구들의 UUID 를 수집하도록 구현했습니다.
.flatMap { friends ->
FriendsActivity.startForResult(
context,
friends.elements.map { PickerItem(it.uuid, it.profileNickname, it.profileThumbnailImage) }
)
}
.observeOn(Schedulers.io())
.flatMap { selectedItems ->
// 메시지 보낼 친구의 UUID 목록
val receiverUuids = selectedItems
// 공유할 웹페이지 URL
// * 주의: 개발자사이트 Web 플랫폼 설정에 공유할 URL의 도메인이 등록되어 있어야 합니다.
val url = "https://developers.kakao.com"
// 사용자 정의 메시지 ID
// * 만들기 가이드: https://developers.kakao.com/docs/latest/ko/message/message-template
val templateId = templateIds["customMessage"] as Long
TalkApiClient.rx.sendScrapMessage(receiverUuids, url, templateId)
}
.retryWhen(
// InsufficientScope 에러에 대해 추가 동의 후 재요청
RxAuthOperations.instance.incrementalAuthorizationRequired(context)
)
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe({ result ->
Log.i(TAG, "메시지 보내기 성공 ${result.successfulReceiverUuids}")
if (result.failureInfos != null) {
Log.d(TAG, "메시지 보내기에 일부 성공했으나, 일부 대상에게는 실패 \n${result.failureInfos}")
}
}, { error ->
Log.e(TAG, "메시지 보내기 실패", error)
})
.addTo(disposables)
메시지에 넣을 이미지는 URL 형태로 메시지 템플릿 구성 시에 첨부하거나, 메시지 템플릿 도구에서 미리 업로드할 수 있습니다. 자세한 안내와 예제는 이미지 업로드하기에서 확인할 수 있습니다.