카카오링크

카카오링크는 카카오 플랫폼 서비스의 대표 기능으로써 사용자의 모바일 기기에 설치된 카카오 플랫폼과 연동하여 다양한 기능을 실행할 수 있습니다. 카카오링크 SDK는 Third Party 서비스와 카카오 플랫폼을 쉽고 빠르게 연동할 수 있도록 도와줍니다.

현재 이용할 수 있는 카카오링크는 다음과 같습니다.

카카오톡링크

카카오톡링크는 모바일 기기에 설치된 카카오톡을 실행하여 사용자가 선택한 친구나 채팅방으로 메시지를 전송할 수 있는 기능입니다. 최신 버전의 카카오링크 SDK에서는 카카오톡링크 v2를 지원하고 있습니다.

카카오톡링크 v2에서는 새로운 형태의 메시지 템플릿 v2를 이용하여 기존의 V1보다 훨씬 다양한 형태의 메시지를 전송할 수 있습니다.

  • 카카오링크 SDK에서는 널리 사용될 수 있는 기본적인 형태의 메시지 템플릿을 피드, 리스트, 위치, 스크랩으로 정의하고 소스코드 상에서 간편하게 생성할 수 있는 인터페이스를 제공합니다.
  • Third Party 서비스에 최적화된 메시지 템플릿을 구성할 수 있는 메시지 템플릿 빌더를 제공합니다. 개발자 웹사이트의 [내 애플리케이션] - 앱 선택 - [설정] - [메시지 템플릿 v2] 메뉴로 들어가면 자신의 서비스에 특화된 메시지 템플릿을 손쉽게 작성할 수 있습니다.


카카오톡링크는 사용자의 모바일 기기에 해당 버전의 카카오톡링크를 지원하는 카카오톡이 설치되어 있어야 합니다. 최신 버전의 카카오톡링크를 지원하는 플랫폼 별 카카오톡 최소 버전은 다음과 같습니다.

  • Android: 6.0.0
  • iOS: 5.9.8

메시지 타입 소개

카카오톡링크는 미리 정의된 메시지 템플릿을 이용하여 메시지를 전송합니다. 카카오톡링크로 보낼 수 있는 메시지 템플릿 유형은 다음과 같습니다.

자세히 보고 싶은 메시지를 클릭하세요.

default_feed.png feed.png

default_list.png list.png

default_commerce.png commerce.png

default_location.png default_scrap.png

시작하기 전에

카카오링크를 사용하기 위해서는 다음과 같은 설정을 해주어야 합니다.

1. Kakao-계정-로그인이-필요없는-앱설정을 참고하여 앱 설정에 빠진 부분이 없는 지 확인합니다.

2. 카카오링크 V1과 다르게 카카오링크 v2는 키해시를 필수적으로 등록하여야 하므로, 앱 생성 에 나와 있는대로 키해시 등록 절차를 거치셔야 합니다.

3. 카카오톡 링크 API를 사용하기 위해 앱으로 연결할 커스텀 스킴을 추가로 등록합니다.

[kakao_strings.xml]

<resources>
    <string name="kakao_app_key">AAAAAAAAAAAAAAAAAAAAAA</string>
    <string name="kakao_scheme">kakaoAAAAAAAAAAAAAAAAAAAAAA</string>
    <string name="kakaolink_host">kakaolink</string>
</resources>
  • 스킴(kakao_scheme): "kakao" 문자열에 앱키의 문자열 값을 붙인 형식입니다. 예) 앱키가 AAAAAAAAAAAAAAAAAAAAAA라면 kakaoAAAAAAAAAAAAAAAAAAAAAA가 커스텀 스킴이 됩니다.
  • 호스트(kakaolink_host) : "kakaolink"로 고정된 값을 사용합니다.

[AndroidManifest.xml]

<application>
    <activity android:name=".MainActivity">
        <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="@string/kakao_scheme"
                    android:host="@string/kakaolink_host" />
        </intent-filter>
    </activity>
    <meta-data
        android:name="com.kakao.sdk.AppKey"
        android:value="@string/kakao_app_key" />
</application>

카카오톡으로 보낸 메시지 또는 해당 메시지에 포함된 버튼을 누를 때 위에 등록되어 있는 커스텀 스킴을 통해 앱을 호출하기 때문에 꼭 올바른 값을 입력하셔야 합니다.

기본 템플릿 보내기

카카오링크 SDK에서는 가장 많이 쓰이는 메시지 템플릿 형태를 기본 템플릿으로 정의하고 소스코드 상에서 간편하게 생성할 수 있는 인터페이스를 제공합니다. 카카오링크 SDK에서는 기본 템플릿의 계층 구조를 효과적으로 표현하기 위하여 기본 자료형 이외에 다양한 오브젝트 클래스를 정의하고 있습니다.

Content 오브젝트

콘텐츠의 내용을 담고 있는 오브젝트입니다. 기본 템플릿에서는 모든 메시지에 하나 이상의 콘텐츠를 가지고 있습니다.

기본 템플릿에서 사용되는 콘텐츠 오브젝트는 한 개의 이미지와 제목, 설명, 링크 정보를 가질 수 있습니다.

이름 설명 타입 필수
title 콘텐츠의 타이틀 String O
link 콘텐츠 클릭 시 이동할 링크 정보 LinkObject O
imageURL 콘텐츠의 이미지 URL String O
desc 콘텐츠의 상세 설명 String X
imageWidth 콘텐츠의 이미지 너비 (단위: 픽셀) Integer X
imageHeight 콘텐츠의 이미지 높이 (단위: 픽셀) Integer X

메시지 템플릿 이미지 요구사항

  • RFC2396, RFC1034, RFC1123를 준수하지 않는 이미지 URL은 이미지가 보이지 않습니다.
  • 이미지의 크기는 너비 200픽셀 이상, 높이 200픽셀 이상이어야 합니다.
  • 2MB를 초과할 수 없습니다.

메시지에서 콘텐츠 영역이나 버튼 클릭 시에 이동되는 링크 정보 오브젝트입니다.

  • 오브젝트 내 프로퍼티 중 하나 이상은 반드시 존재해야 합니다. 아무 값도 입력하지 않으면 버튼이 보이지 않거나 클릭 시 이동하지 않을 수 있습니다.
  • 링크에 사용되는 도메인은 반드시 내 애플리케이션 설정에 등록되어야 합니다.
    도메인은 개발자 웹사이트의 [내 애플리케이션] - 앱 선택 - [설정] - [일반] 메뉴에서 등록할 수 있습니다.
  • 링크 실행 우선순위는 (android/ios)ExecutionParams > mobileWebURL > webURL 입니다.
이름 설명 타입 필수
webURL PC버전 카카오톡에서 사용하는 웹 링크 URL String X
mobileWebURL 모바일 카카오톡에서 사용하는 웹 링크 URL String X
androidExecutionParams 안드로이드 카카오톡에서 사용하는 앱 링크 URL에 사용될 파라미터. String X
iosExecutionParams iOS 카카오톡에서 사용하는 앱 링크 URL에 사용될 파라미터. String X

Social 오브젝트

좋아요 수, 댓글 수 등의 소셜 정보를 표현하기 위해 사용되는 오브젝트입니다.

5개의 속성 중 최대 3개만 표시해 줍니다. 우선순위는 Like > Comment > Shared > View > Subscriber 입니다.

이름 설명 타입 필수
likeCount 콘텐츠의 좋아요 수 Integer X
commentCount 콘텐츠의 댓글 수 Integer X
sharedCount 콘텐츠의 공유 수 Integer X
viewCount 콘텐츠의 조회 수 Integer X
subscriberCount 콘텐츠의 구독 수 Integer X

CommerceDetail 오브젝트

가격 정보를 표현하기 위해 사용되는 오브젝트입니다.

이름 설명 타입 필수
regularPrice 정상가격 Integer O
discountPrice 할인된 가격 Integer X
discountRate 할인율 Integer X
fixedDiscountPrice 정액 할인 가격 Integer X

Button 오브젝트

메시지 하단에 추가되는 버튼 오브젝트입니다.

이름 설명 타입 필수
title 버튼의 타이틀 String O
link 버튼 클릭 시 이동할 링크 정보 LinkObject O

피드 템플릿 보내기

  1. 이미지 영역: 최대 1장, 최소 200px * 200px이상, 2MB이하
  2. 제목/설명 영역: 최대 4줄 표시 (제목, 설명 각각 2줄 표시)
  3. 소셜 영역: 최대 3개 표시 (순서: 좋아요 > 댓글 > 공유 > 조회 > 구독)
  4. 버튼 영역: 최대 2개 표시, 버튼명 8자 이하 권장

default_feed_spec.png

기본 템플릿으로 제공되는 피드 템플릿은 하나의 콘텐츠와 하나의 기본 버튼을 가집니다. 소셜 정보를 추가할 수 있으며 임의의 버튼을 설정할 수도 있습니다.

여러 장의 이미지, 프로필 정보 등 보다 확장된 형태의 피드 템플릿은 커스텀 템플릿을 이용하여 보내실 수 있습니다.

카카오링크 SDK에서는 다음과 같은 형태의 피드 템플릿 클래스를 사용합니다.

Feed Template
이름 설명 타입 필수
objectType 템플릿 종류. "feed" 고정값 String O
content 메시지의 메인 콘텐츠 정보 ContentObject O
social 콘텐츠에 대한 소셜 정보 SocialObject X
buttonTitle 기본 버튼 타이틀("자세히 보기")을 변경하고 싶을 때 설정 String X
buttons 버튼 목록. 버튼 타이틀과 링크를 변경하고 싶을때, 버튼 두개를 사용하고 싶을때 사용.(최대 2개) List<ButtonObject> X

buttonTitle, buttons 모두 있을 경우 buttons가 사용됩니다. 둘 다 주어지지 않았을 때에는 기본 타이틀과 content에 있는 link정보로 버튼 하나가 구성됩니다.

FeedTemplate params = FeedTemplate
        .newBuilder(ContentObject.newBuilder("디저트 사진",
        "http://mud-kage.kakao.co.kr/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()
                .setWebUrl("'https://developers.kakao.com")
                .setMobileWebUrl("'https://developers.kakao.com")
                .setAndroidExecutionParams("key1=value1")
                .setIosExecutionParams("key1=value1")
                .build()))
        .build();

KakaoLinkService.getInstance().sendDefault(this, params, new ResponseCallback<KakaoLinkResponse>() {
    @Override
    public void onFailure(ErrorResult errorResult) {
        Logger.e(errorResult.toString());
    }

    @Override
    public void onSuccess(KakaoLinkResponse result) {

    }
});

리스트 템플릿 보내기

  1. 헤더 영역
  2. 아이템 리스트 영역: 최대 3개 표시
  3. 제목/설명 영역: 최대 3줄 표시 (제목 2줄, 설명 1줄 표시)
  4. 이미지 영역: 최소 200px * 200px이상, 2MB이하
  5. 버튼 영역: 최대 2개 표시, 버튼명 8자 이하 권장

default_list_spec.png

리스트 템플릿은 메시지 상단에 노출되는 헤더 타이틀과, 콘텐츠 목록, 버튼 등으로 구성됩니다. 헤더와 콘텐츠 각각의 링크를 가질 수 있습니다. 피드 템플릿과 마찬가지로 하나의 기본 버튼을 가지며 임의의 버튼을 설정할 수 있습니다.

보다 확장된 형태의 리스트 템플릿은 커스텀 템플릿을 이용하여 보내실 수 있습니다.

카카오링크 SDK에서는 다음과 같은 형태의 리스트 템플릿 클래스를 사용합니다.

List Template
이름 설명 타입 필수
objectType 템플릿 종류. "list" 고정값 String O
headerTitle 리스트 상단에 노출되는 헤더 타이틀 String O
headerLink 헤더 타이틀 내용에 해당하는 링크 정보 LinkObject O
contents 리스트에 노출되는 콘텐츠 목록. 최소 2개, 최대 3개 List<ContentObject> O
buttonTitle 기본 버튼 타이틀("자세히 보기")을 변경하고 싶을 때 설정 String X
buttons 버튼 목록. 버튼 타이틀과 링크를 변경하고 싶을때, 버튼 두개를 사용하고 싶을때 사용.(최대 2개) List<ButtonObject> X

buttonTitle, buttons 모두 있을 경우 buttons가 사용됩니다. 둘 다 주어지지 않았을 때에는 기본 타이틀과 content에 있는 link정보로 버튼 하나가 구성됩니다.

ListTemplate params = ListTemplate.newBuilder("WEEKELY MAGAZINE",
        LinkObject.newBuilder()
                .setWebUrl("https://developers.kakao.com")
                .setMobileWebUrl("https://developers.kakao.com")
                .build())
        .addContent(ContentObject.newBuilder("자전거 라이더를 위한 공간",
                "http://mud-kage.kakao.co.kr/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("비쥬얼이 끝내주는 오레오 카푸치노",
                "http://mud-kage.kakao.co.kr/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("감성이 가득한 분위기",
                "http://mud-kage.kakao.co.kr/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()
                .setWebUrl("https://developers.kakao.com")
                .setMobileWebUrl("https://developers.kakao.com")
                .setAndroidExecutionParams("key1=value1")
                .setIosExecutionParams("key1=value1")
                .build()))
        .build();

KakaoLinkService.getInstance().sendDefault(this, params, new ResponseCallback<KakaoLinkResponse>() {
    @Override
    public void onFailure(ErrorResult errorResult) {
        Logger.e(errorResult.toString());
    }

    @Override
    public void onSuccess(KakaoLinkResponse result) {

    }
});

위치 템플릿 보내기

  1. 이미지 영역: 최대 1장, 최소 200px * 200px이상, 2MB이하
  2. 제목/설명 영역: 최대 4줄 표시 (제목, 설명 각각 2줄 표시)
  3. 소셜 영역: 최대 3개 표시 (순서: 좋아요 > 댓글 > 공유 > 조회 > 구독)
  4. 버튼 영역: 최대 2개 표시, 버튼명 8자 이하 권장

kakao_link_default_location.png

위치 템플릿은 지도 표시에 사용되는 주소 정보와 해당 위치를 설명할 수 있는 콘텐츠 오브젝트로 구성됩니다. 왼쪽 하단에 기본 버튼, 오른쪽 하단에 지도를 보여주기 위한 "위치 보기" 버튼이 추가됩니다. "위치 보기" 버튼을 클릭하면 카카오톡 채팅방 내에서 바로 지도 화면으로 전환하여 해당 주소의 위치를 확인할 수 있습니다.

카카오링크 SDK에서는 다음과 같은 형태의 위치 템플릿 클래스를 사용합니다.

Location Template
이름 설명 타입 필수
objectType 템플릿 종류. "location" 고정값 String O
content 위치에 대해 설명하는 콘텐츠 정보 ContentObject O
address 공유할 위치의 주소
예) 경기 성남시 분당구 판교역로 235
String O
addressTitle 카카오톡 내의 지도 뷰에서 사용되는 타이틀
예) 카카오판교오피스
String X
social 메인 콘텐츠의 부가 소셜 정보 SocialObject X
buttonTitle 기본 버튼 타이틀("자세히 보기")을 변경하고 싶을 때 설정 String X
buttons 버튼 목록. 기본 버튼의 타이틀 외에 링크도 변경하고 싶을 때 설정. (최대 1개, 오른쪽 "위치 보기" 버튼은 고정) List<ButtonObject> X
LocationTemplate params = LocationTemplate.newBuilder("성남시 분당구 판교역로 235",
        ContentObject.newBuilder("카카오 판교오피스",
        "http://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();

KakaoLinkService.getInstance().sendDefault(this, params, new ResponseCallback<KakaoLinkResponse>() {
    @Override
    public void onFailure(ErrorResult errorResult) {
        Logger.e(errorResult.toString());
    }

    @Override
    public void onSuccess(KakaoLinkResponse result) {

    }
});

커머스 템플릿 보내기

  1. 이미지 영역: 최대 1장, 최소 200px * 200px이상, 2MB이하
  2. 할인된 가격 영역
  3. 정상가격 영역
  4. 할인율 영역
  5. 제품명 영역: 최대 2줄 표시
  6. 버튼 영역: 최대 2개 표시, 버튼명 8자 이하 권장

default_commerce_spec.png

기본 템플릿으로 제공되는 커머스 템플릿은 하나의 콘텐츠, 커머스 상세와 하나의 기본 버튼을 가집니다. 추가로 임의의 버튼을 설정할 수도 있습니다.

여러 장의 이미지, 프로필 정보 등 보다 확장된 형태의 피드 템플릿은 커스텀 템플릿을 이용하여 보내실 수 있습니다.

카카오링크 SDK에서는 다음과 같은 형태의 커머스 템플릿 클래스를 사용합니다.

Commerce Template
이름 설명 타입 필수
objectType 템플릿 종류. "commerce" 고정값 String O
content 메시지의 메인 콘텐츠 정보 ContentObject O
commerce 상품에 대한 가격 정보 CommerceDetailObject O
buttonTitle 기본 버튼 타이틀("자세히 보기")을 변경하고 싶을 때 설정 String X
buttons 버튼 목록. 버튼 타이틀과 링크를 변경하고 싶을때, 버튼 두개를 사용하고 싶을때 사용.(최대 2개) List<ButtonObject> X

buttonTitle, buttons 모두 있을 경우 buttons가 사용됩니다. 둘 다 주어지지 않았을 때에는 기본 타이틀과 content에 있는 link정보로 버튼 하나가 구성됩니다.

ContentObject contentObject = ContentObject.newBuilder(
        "Ivory long dress (4 Color)",
        "http://mud-kage.kakao.co.kr/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()
                .setWebUrl("https://style.kakao.com/main/women/contentId=100/share")
                .setMobileWebUrl("https://m.style.kakao.com/main/women/contentId=100/share")
                .setAndroidExecutionParams("contentId=100&share=true")
                .setIosExecutionParams("contentId=100&share=true")
                .build());

CommerceTemplate params =  CommerceTemplate.newBuilder(contentObject, commerceDetailObject)
        .addButton(firstButtonObject)
        .addButton(secondButtobObject)
        .build();

KakaoLinkService.getInstance().sendDefault(this, params, new ResponseCallback<KakaoLinkResponse>() {
    @Override
    public void onFailure(ErrorResult errorResult) {
        Logger.e(errorResult.toString());
    }

    @Override
    public void onSuccess(KakaoLinkResponse result) {

    }
});

텍스트 템플릿 보내기

  1. 텍스트 영역: 최대 200자 표시
  2. 버튼 영역: 최대 2개 표시, 버튼명 8자 이하 권장

기본 템플릿으로 제공되는 텍스트 템플릿은 텍스트 영역과 하나의 기본 버튼을 가집니다. 임의의 버튼을 설정할 수도 있습니다.

여러 장의 이미지, 프로필 정보 등 보다 확장된 형태의 커머스 템플릿은 커스텀 템플릿을 이용하여 보내실 수 있습니다.

TextTemplate
이름 설명 타입 필수
objectType 템플릿 종류. "text" 고정값 String O
text 최대 200자의 텍스트 정보 String O
link 해당 컨텐츠 클릭 시 이동 할 링크 정보 LinkObject O
buttonTitle 기본 버튼 타이틀("자세히 보기")을 변경하고 싶을 때 설정 String X
buttons 메시지 하단에 추가되는 버튼 목록. 버튼 타이틀과 링크를 변경하고 싶을때, 버튼 두개를 사용하고 싶을때 사용. 최대 2개 List<ButtonObject> X
TextTemplate params = TextTemplate.newBuilder("Text", LinkObject.newBuilder().setWebUrl("https://developers.kakao.com").setMobileWebUrl("https://developers.kakao.com").build()).setButtonTitle("This is button").build();

KakaoLinkService.getInstance().sendDefault(this, params, new ResponseCallback<KakaoLinkResponse>() {
    @Override
    public void onFailure(ErrorResult errorResult) {
        Logger.e(errorResult.toString());
    }

    @Override
    public void onSuccess(KakaoLinkResponse result) {
    }
});

스크랩 템플릿 보내기

  1. 이미지 영역: 최대 1장, 최소 200px * 200px이상, 2MB이하
  2. 제목/설명 영역: 최대 4줄 표시 (제목, 설명 각각 2줄 표시)
  3. 버튼 영역: 최대 1개 표시, 버튼명 8자 이하 권장

A. og:image / B. video:duration, music:duration / C. og:title, og:description / D. og:site_name

default_scrap_spec.png

웹 사이트 콘텐츠를 해당 웹 페이지의 Open Graph 정보를 바탕으로 이미지, 제목, 설명, 링크를 구성하여 별도의 템플릿 생성 작업 없이 URL만으로 간편하게 전달합니다.

스크랩하려는 웹 사이트의 도메인은 반드시 내 애플리케이션 설정에 등록되어야 합니다.
도메인은 개발자 웹사이트의 [내 애플리케이션] - 앱 선택 - [설정] - [일반] 메뉴에서 등록할 수 있습니다.

다음은 개발자 웹사이트(https://developers.kakao.com)의 메인 페이지를 보내는 예제입니다.


// 기본적인 스크랩 템플릿을 사용하여 보내는 코드
KakaoLinkService.getInstance().sendScrap(this, "https://developers.kakao.com", new ResponseCallback<KakaoLinkResponse>() {
    @Override
    public void onFailure(ErrorResult errorResult) {
        Logger.e(errorResult.toString());
    }

    @Override
    public void onSuccess(KakaoLinkResponse result) {
      // 템플릿 밸리데이션과 쿼터 체크가 성공적으로 끝남. 톡에서 정상적으로 보내졌는지 보장은 할 수 없다.
    }
});

자신의 서비스에 보다 특화된 형태의 스크랩 메시지를 전송하려면 스크랩용 커스텀 템플릿을 이용해야 합니다.

커스텀 템플릿은 개발자 웹사이트의 [내 애플리케이션] - 앱 선택 - [설정] - [메시지 템플릿 v2] 메뉴를 통해 생성할 수 있습니다. 스크랩에 사용되는 메시지 템플릿은 콘텐츠의 입력 값으로 아래 표에 나와 있는 스크랩 정보를 포함해야 합니다. 해당 키가 포함된 메시지 템플릿 구성 요소에 스크랩된 웹사이트 정보가 서버에서 자동으로 입력됩니다.

Argument 키 설명
${SCRAP_REQUEST_URL} 스크랩 요청 URL
${SCRAP_HOST} 요청 URL의 호스트
${SCRAP_TITLE} 요청 URL의 제목
${SCRAP_DESCRIPTION} 요청 URL의 설명
${SCRAP_IMAGE} og:image
${SCRAP_IMAGE_WIDTH} og:image의 width
${SCRAP_IMAGE_HEIGHT} og:image의 height
${SCRAP_DURATION} og:duration

아래의 코드처럼 스크랩 기능을 사용하게 되면 넘겨준 template args 외에도 위 스크랩 파라미터들을 커스텀 템플릿 빌더에서 사용할 수 있게 됩니다.

// 커스터마이즈된 템플릿과 템플릿을 채울 args들을 사용하여 보내는 코드
String templateId = "12345";

Map<String, String> templateArgs = new HashMap<String, String>();
templateArgs.put("template_arg1", "value1");
templateArgs.put("template_arg2", "value2");

KakaoLinkService.getInstance().sendScrap(this, "https://developers.kakao.com", templateId, tempateArgs, new ResponseCallback<KakaoLinkResponse>() {
    @Override
    public void onFailure(ErrorResult errorResult) {
        Logger.e(errorResult.toString());
    }

    @Override
    public void onSuccess(KakaoLinkResponse result) {
      // 템플릿 밸리데이션과 쿼터 체크가 성공적으로 끝남. 톡에서 정상적으로 보내졌는지 보장은 할 수 없다.
    }
});

커스텀 템플릿 보내기

커스텀 템플릿을 보내기 위해서는 [메시지 템플릿 v2]에서 템플릿을 생성해야 합니다. 메시지 템플릿 생성가이드
생성한 템플릿의 ID(templateId)와 Argument(templateArgs)를 설정하여 메시지를 전송할 수 있습니다.

FEED TYPE
  1. 이미지 영역: 최대 3장, 최소 200px * 200px이상, 2MB이하
  2. 프로필: 프로필 이미지와 프로필 명을 표현하는 영역
  3. 제목/설명 영역: 최대 4줄 표시 (제목, 설명 각각 2줄 표시)
  4. 소셜 영역: 최대 3개 표시 (순서: 좋아요 > 댓글 > 공유 > 조회 > 구독)
  5. 버튼 영역: 최대 2개 표시, 버튼명 8자 이하 권장
  6. 서비스/출처 정보 영역: 서비스명, 출처를 표현하는 영역

feed_spec.png

LIST TYPE
  1. 헤더 영역: 배경 이미지 설정 가능
  2. 아이템 리스트 영역: 최대 5개 표시
  3. 제목/설명 영역: 최대 3줄 표시 (제목 2줄, 설명 1줄 표시)
  4. 이미지 영역: 최소 200px * 200px이상, 2MB이하, 재생 아이콘/시간 표시 가능
  5. 버튼 영역: 최대 2개 표시, 버튼명 8자 이하 권장
  6. 서비스/출처 정보 영역: 서비스명, 출처를 표현하는 영역

list_spec.png

COMMERCE TYPE
  1. 이미지 영역: 최소 200px * 200px이상, 2MB이하, 재생 아이콘/시간 표시 가능
  2. 프로필: 프로필 이미지와 프로필 명을 표현하는 영역
  3. 할인된 가격 영역
  4. 정상가격 영역
  5. 할인율 영역
  6. 제품명 영역: 최대 2줄 표시
  7. 버튼 영역: 최대 2개 표시, 버튼명 8자 이하 권장

commerce_spec.png

피드, 리스트, 커머스 타입의 메시지를 전달할 때 필요한 파라미터들은 아래와 같습니다.

Name Type Description
context Context 카카오톡을 실행시킬 context
templateId String 개발자 웹사이트에서 생성한 템플릿 id
templateArgs Map<String, String> 템플릿에 정의한 arg가 있다면, key에 해당하는 value를 포함한 데이타 맵
callback ResponseCallback<KakaoLinkResponse> 성공/실패 여부와 상세 메시지를 전달받을 콜백

아래는 실제로 카카오링크 4.0를 통해 메시지를 보내는 예제입니다. Id가 12345인 템플릿이 template_arg1과 template_arg2라는 arguments가 있다면 value1과 value2라는 값으로 치환하여 메시지를 보내게 됩니다.

String templateId = "12345";

Map<String, String> templateArgs = new HashMap<String, String>();
templateArgs.put("template_arg1", "value1");
templateArgs.put("template_arg2", "value2");

KakaoLinkService.getInstance().sendCustom(this, templateId, templateArgs, new ResponseCallback<KakaoLinkResponse>() {
            @Override
            public void onFailure(ErrorResult errorResult) {
                Logger.e(errorResult.toString());
            }

            @Override
            public void onSuccess(KakaoLinkResponse result) {
              // 템플릿 밸리데이션과 쿼터 체크가 성공적으로 끝남. 톡에서 정상적으로 보내졌는지 보장은 할 수 없다.
            }
        });

AndroidManifest.xml에 앱키를 등록하지 않았거나 키해시 값이 없다면 onFailure 콜백이 불리게 되며 이 때 전달되는 ErrorResult 객체에 상세 에러 메시지가 담기게 됩니다. 성공적으로 메시지를 보내게된 경우에는 onSuccess 콜백이 불리게 되며 KakaoLinkResponse 형태의 응답을 받게 됩니다.

KakaoLinkResponse
Name Type Description
templateMsg JSONObject 실제로 카카오톡에 전달되어 미리보기에 쓰이게될 json 데이터
warningMsg JSONObject 설정이나 메시지 내용에 대한 경고 메시지
argumentMsg JSONObject URL 등 argument에 대한 경고 메시지

링크 이미지 기능

링크 이미지 업로드

위에서 제공하는 카카오링크 v2 기능은 이미지를 URL 형태로만 받기 떄문에 로컬 디바이스에 있는 이미지를 사용하기 위해선 기존의 다른 이미지 서버에 업로드한 후 사용해야 합니다. 카카오링크 v2는 이 과정을 대신해주는 API를 제공합니다. 단 링크용으로 업로드한 이미지는 20일 동안만 유효하며 이 후에는 삭제됩니다.

파라미터 타입 Description
context Context 카카오톡을 실행시킬 context
secureResource boolean 이미지 URL을 https로 받을지 여부
imageFile File 로컬 이미지 파일
callback ResponseCallback<ImageUploadResponse> 성공/실패 여부와 상세 메시지를 전달받을 콜백
File imageFile = new File("path/of/image/file");

KakaoLinkService.getInstance().uploadImage(this, false, imageFile, new ResponseCallback<ImageUploadResponse>() {
    @Override
    public void onFailure(ErrorResult errorResult) {
        Logger.e(errorResult.toString());
    }

    @Override
    public void onSuccess(ImageUploadResponse result) {
        Logger.d(result.getImageUrl());
    }
});

링크 이미지 스크랩

카카오링크에 사용될 이미지를 스크랩하는 기능입니다. 앱 각자의 이미지 서버에 저장되어 있는 이미지를 카카오 이미지 서버로 업로드합니다.

파라미터 타입 Description
context Context 카카오톡을 실행시킬 context
secureResource boolean 이미지 URL을 https로 받을지 여부
imageUrl String 서비스의 이미지 서버에 업로드된 URL
callback ResponseCallback<ImageUploadResponse> 성공/실패 여부와 상세 메시지를 전달받을 콜백
KakaoLinkService.getInstance().scrapImage(this, false, "http://www.kakaocorp.com/images/logo/og_daumkakao_151001.png", new ResponseCallback<ImageUploadResponse>() {
    @Override
    public void onFailure(ErrorResult errorResult) {
        Logger.e(errorResult.toString());
    }

    @Override
    public void onSuccess(ImageUploadResponse result) {
        Logger.d(result.getOriginal().getUrl());
    }
});

링크 이미지 지우기

이미 업로드한 이미지를 지우고 싶다면 다음의 메소드를 사용합니다.

파라미터 타입 Description
context Context 카카오톡을 실행시킬 context
imageUrl String 카카오 이미지 서버에 업로드된 URL
callback ResponseCallback<ImageUploadResponse> 성공/실패 여부와 상세 메시지를 전달받을 콜백
String imageUrl = "url/of/uploaded/image";
KakaoLinkService.getInstance().deleteImageWithUrl(KakaoLinkImageUploadActivity.this, imageUrl, new ResponseCallback<ImageDeleteResponse>() {
            @Override
            public void onFailure(ErrorResult errorResult) {
                Logger.e(errorResult.toString());
            }

            @Override
            public void onSuccess(ImageDeleteResponse result) {
                imageUrl = null;
                selectedImageView.setImageURI(null);
                urlTextView.setText("");
            }
        });

카카오스토리 링크

카카오스토리 앱이 설치되어 있으면 카카오스토리링크를 이용하여 내용이 미리 입력된 글쓰기 화면을 실행할 수 있습니다.

현재 버전의 카카오링크 SDK에서는 카카오스토리링크 직접 제공하지 않고 샘플 앱에 예제 형태로 제공하고 있습니다.
상세스펙 보러가기

문제해결

카카오링크 적용중 잘 실행되지 않는다면 카카오링크 문제해결를 참고해 보세요.


Last Modified : 2017-11-06