카카오링크

카카오링크는 카카오 플랫폼 서비스의 대표 기능으로써 사용자의 모바일 기기에 설치된 카카오 플랫폼과 연동하여 다양한 기능을 실행할 수 있습니다. 카카오링크 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

시작하기 전에

SDK 다운로드

SDK 다운로드 메뉴에서 최신 iOS용 카카오 SDK(Full SDK Binary & Samples)를 다운로드 받습니다.

다운로드가 완료되면 다음과 같이 압축을 해제합니다.

unzip kakao-ios-sdk-x.x.x.zip
앱 생성

앱 생성 가이드를 참고하여 앱을 생성합니다.

프로젝트 설정
  • 다운로드 받은 KakaoLink.framework, KakaoCommon.framework 폴더를 새로 생성한 Project의 Frameworks Group 에 drag & drop 합니다.
  • plist 파일에 자신의 앱키를 등록합니다. "KAKAO_APP_KEY"라는 이름으로 Key를 추가하고, Type은 String, Value는 해당 앱의 네이티브 앱 키 값으로 등록합니다. 앱키는 "0123456789abcdefghijklmn"라고 가정하였습니다.
    <key>KAKAO_APP_KEY</key>
    <string>0123456789abcdefghijklmn</string>
  • 카카오링크 메시지에 추가한 링크를 통해 자신의 앱 실행을 위해서 URL Types 항목을 추가해야 합니다. URL Schemes에는 KAKAO_APP_KEY 앞에 "kakao" 문자열을 붙여서 등록합니다.
    <key>CFBundleURLTypes</key>
    <array>
      <dict>
          <key>CFBundleTypeRole</key>
          <string>Editor</string>
          <key>CFBundleURLSchemes</key>
          <array>
              <string>kakao0123456789abcdefghijklmn</string>
          </array>
      </dict>
    </array>
  • 카카오링크 SDK가 사용하는 카카오 앱들의 커스텀 URL Scheme 화이트리스트에 아래와 같이 추가합니다.
    <key>LSApplicationQueriesSchemes</key>
    <array>
      <string>kakao0123456789abcdefghijklmn</string>
      <string>kakaolink</string>
      <string>kakaotalk-5.9.7</string>
    </array>
소스코드에 import

카카오링크 API를 사용하기 위해서는 관련 헤더파일을 추가해야합니다.

#import <KakaoLink/KakaoLink.h>

기본 템플릿 보내기

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

Content (KLKContentObject)

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

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

이름 설명 타입 필수
title 콘텐츠의 타이틀 NSString O
link 콘텐츠 클릭 시 이동할 링크 정보 KLKLinkObject O
imageURL 콘텐츠의 이미지 URL NSURL O
desc 콘텐츠의 상세 설명. title과 합쳐서 최대 4줄까지 표시됨. NSString X
imageWidth 콘텐츠의 이미지 너비 (단위: 픽셀) NSNumber X
imageHeight 콘텐츠의 이미지 높이 (단위: 픽셀) NSNumber X

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

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

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

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

Social (KLKSocialObject)

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

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

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

Button (KLKButtonObject)

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

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

Commerce (KLKCommerceObject)

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

이름 설명 타입 필수
regularPrice 정상가격 NSNumber O
discountPrice 할인된 가격 NSNumber X
discountRate 할인율 NSNumber X
fixedDiscountPrice 정액 할인 가격. 할인율과 동시 사용불가 NSNumber X

피드 템플릿 보내기

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

default_feed_spec.png

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

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

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

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

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

피드 템플릿은 KLKTalkLinkCenter클래스의 sendDefaultWithTemplate:success:failure: 메소드를 이용하여 전송합니다. sendDefaultWithTemplate:success:failure: 메소드는 하나의 메시지 템플릿 오브젝트와 성공 및 실패 핸들러를 파라미터로 받습니다.

다음은 피드 템플릿을 보내는 예제입니다.

KLKTemplate *template = [KLKFeedTemplate feedTemplateWithBuilderBlock:^(KLKFeedTemplateBuilder * _Nonnull feedTemplateBuilder) {

    // 콘텐츠
    feedTemplateBuilder.content = [KLKContentObject contentObjectWithBuilderBlock:^(KLKContentBuilder * _Nonnull contentBuilder) {
        contentBuilder.title = @"디저트 사진";
        contentBuilder.desc = @"아메리카노, 빵, 케익";
        contentBuilder.imageURL = [NSURL URLWithString:@"http://mud-kage.kakao.co.kr/dn/NTmhS/btqfEUdFAUf/FjKzkZsnoeE4o19klTOVI1/openlink_640x640s.jpg"];
        contentBuilder.link = [KLKLinkObject linkObjectWithBuilderBlock:^(KLKLinkBuilder * _Nonnull linkBuilder) {
            linkBuilder.mobileWebURL = [NSURL URLWithString:@"https://developers.kakao.com"];
        }];
    }];

    // 소셜
    feedTemplateBuilder.social = [KLKSocialObject socialObjectWithBuilderBlock:^(KLKSocialBuilder * _Nonnull socialBuilder) {
        socialBuilder.likeCount = @(10);
        socialBuilder.commnentCount = @(20);
        socialBuilder.sharedCount = @(30);
        socialBuilder.viewCount = @(40);
    }];

    // 버튼
    [feedTemplateBuilder addButton:[KLKButtonObject buttonObjectWithBuilderBlock:^(KLKButtonBuilder * _Nonnull buttonBuilder) {
        buttonBuilder.title = @"웹으로 이동";
        buttonBuilder.link = [KLKLinkObject linkObjectWithBuilderBlock:^(KLKLinkBuilder * _Nonnull linkBuilder) {
            linkBuilder.mobileWebURL = [NSURL URLWithString:@"https://developers.kakao.com"];
        }];
    }]];
    [feedTemplateBuilder addButton:[KLKButtonObject buttonObjectWithBuilderBlock:^(KLKButtonBuilder * _Nonnull buttonBuilder) {
        buttonBuilder.title = @"앱으로 이동";
        buttonBuilder.link = [KLKLinkObject linkObjectWithBuilderBlock:^(KLKLinkBuilder * _Nonnull linkBuilder) {
            linkBuilder.iosExecutionParams = @"param1=value1&param2=value2";
            linkBuilder.androidExecutionParams = @"param1=value1&param2=value2";
        }];
    }]];
}];

[[KLKTalkLinkCenter sharedCenter] sendDefaultWithTemplate:template success:^(NSDictionary<NSString *,NSString *> * _Nullable warningMsg, NSDictionary<NSString *,NSString *> * _Nullable argumentMsg) {
    // 성공
    ...
} failure:^(NSError * _Nonnull error) {
    // 에러
    ...
}];

리스트 템플릿 보내기

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

default_list_spec.png

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

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

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

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

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

리스트 템플릿은 KLKTalkLinkCenter클래스의 sendDefaultWithTemplate:success:failure: 메소드를 이용하여 전송합니다. sendDefaultWithTemplate:success:failure: 메소드는 하나의 메시지 템플릿 오브젝트와 성공 및 실패 핸들러를 파라미터로 받습니다.

다음은 리스트 템플릿을 보내는 예제입니다.

KLKTemplate *template = [KLKListTemplate listTemplateWithBuilderBlock:^(KLKListTemplateBuilder * _Nonnull listTemplateBuilder) {

    // 헤더 타이틀 및 링크
    listTemplateBuilder.headerTitle = @"WEEKELY MAGAZINE";
    listTemplateBuilder.headerLink = [KLKLinkObject linkObjectWithBuilderBlock:^(KLKLinkBuilder * _Nonnull linkBuilder) {
        linkBuilder.mobileWebURL = [NSURL URLWithString:@"https://developers.kakao.com"];
    }];

    // 콘텐츠 목록
    [listTemplateBuilder addContent:[KLKContentObject contentObjectWithBuilderBlock:^(KLKContentBuilder * _Nonnull contentBuilder) {
        contentBuilder.title = @"자전거 라이더를 위한 공간";
        contentBuilder.desc = @"매거진";
        contentBuilder.imageURL = [NSURL URLWithString:@"http://mud-kage.kakao.co.kr/dn/QNvGY/btqfD0SKT9m/k4KUlb1m0dKPHxGV8WbIK1/openlink_640x640s.jpg"];
        contentBuilder.link = [KLKLinkObject linkObjectWithBuilderBlock:^(KLKLinkBuilder * _Nonnull linkBuilder) {
            linkBuilder.mobileWebURL = [NSURL URLWithString:@"https://developers.kakao.com"];
        }];
    }]];
    [listTemplateBuilder addContent:[KLKContentObject contentObjectWithBuilderBlock:^(KLKContentBuilder * _Nonnull contentBuilder) {
        contentBuilder.title = @"비쥬얼이 끝내주는 오레오 카푸치노";
        contentBuilder.desc = @"매거진";
        contentBuilder.imageURL = [NSURL URLWithString:@"http://mud-kage.kakao.co.kr/dn/boVWEm/btqfFGlOpJB/mKsq9z6U2Xpms3NztZgiD1/openlink_640x640s.jpg"];
        contentBuilder.link = [KLKLinkObject linkObjectWithBuilderBlock:^(KLKLinkBuilder * _Nonnull linkBuilder) {
            linkBuilder.mobileWebURL = [NSURL URLWithString:@"https://developers.kakao.com"];
        }];
    }]];
    [listTemplateBuilder addContent:[KLKContentObject contentObjectWithBuilderBlock:^(KLKContentBuilder * _Nonnull contentBuilder) {
        contentBuilder.title = @"감성이 가득한 분위기";
        contentBuilder.desc = @"매거진";
        contentBuilder.imageURL = [NSURL URLWithString:@"http://mud-kage.kakao.co.kr/dn/NTmhS/btqfEUdFAUf/FjKzkZsnoeE4o19klTOVI1/openlink_640x640s.jpg"];
        contentBuilder.link = [KLKLinkObject linkObjectWithBuilderBlock:^(KLKLinkBuilder * _Nonnull linkBuilder) {
            linkBuilder.mobileWebURL = [NSURL URLWithString:@"https://developers.kakao.com"];
        }];
    }]];

    // 버튼
    [listTemplateBuilder addButton:[KLKButtonObject buttonObjectWithBuilderBlock:^(KLKButtonBuilder * _Nonnull buttonBuilder) {
        buttonBuilder.title = @"웹으로 보기";
        buttonBuilder.link = [KLKLinkObject linkObjectWithBuilderBlock:^(KLKLinkBuilder * _Nonnull linkBuilder) {
            linkBuilder.mobileWebURL = [NSURL URLWithString:@"https://developers.kakao.com"];
        }];
    }]];
    [listTemplateBuilder addButton:[KLKButtonObject buttonObjectWithBuilderBlock:^(KLKButtonBuilder * _Nonnull buttonBuilder) {
        buttonBuilder.title = @"앱으로 보기";
        buttonBuilder.link = [KLKLinkObject linkObjectWithBuilderBlock:^(KLKLinkBuilder * _Nonnull linkBuilder) {
            linkBuilder.iosExecutionParams = @"param1=value1&param2=value2";
            linkBuilder.androidExecutionParams = @"param1=value1&param2=value2";
        }];
    }]];
}];

[[KLKTalkLinkCenter sharedCenter] sendDefaultWithTemplate:template success:^(NSDictionary<NSString *,NSString *> * _Nullable warningMsg, NSDictionary<NSString *,NSString *> * _Nullable argumentMsg) {
    // 성공
    ...
} failure:^(NSError * _Nonnull error) {
    // 에러
    ...
}];

위치 템플릿 보내기

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

kakao_link_default_location.png

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

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

KLKLocationTemplate
이름 설명 타입 필수
objectType 템플릿 종류. "location" 고정값 NSString O
content 위치에 대해 설명하는 콘텐츠 정보 KLKContentObject O
address 공유할 위치의 주소
예) 경기 성남시 분당구 판교역로 235
NSString O
addressTitle 카카오톡 내의 지도 뷰에서 사용되는 타이틀
예) 카카오판교오피스
NSString X
social 부가적인 소셜 정보 KLKSocialObject X
buttonTitle 기본 버튼 타이틀("자세히 보기")을 변경하고 싶을 때 설정 NSString X
buttons 버튼 목록. 기본 버튼의 타이틀 외에 링크도 변경하고 싶을 때 설정. (최대 1개, 오른쪽 "위치 보기" 버튼은 고정) NSArray<KLKButtonObject> X

위치 템플릿은 KLKTalkLinkCenter클래스의 sendDefaultWithTemplate:success:failure: 메소드를 이용하여 전송합니다. sendDefaultWithTemplate:success:failure: 메소드는 하나의 메시지 템플릿 오브젝트와 성공 및 실패 핸들러를 파라미터로 받습니다.

다음은 위치 템플릿을 보내는 예제입니다.

KLKTemplate *template = [KLKLocationTemplate locationTemplateWithBuilderBlock:^(KLKLocationTemplateBuilder * _Nonnull locationTemplateBuilder) {
    locationTemplateBuilder.address = @"성남시 분당구 판교역로 235";
    locationTemplateBuilder.addressTitle = @"카카오 판교오피스";
    locationTemplateBuilder.content = [KLKContentObject contentObjectWithBuilderBlock:^(KLKContentBuilder * _Nonnull contentBuilder) {
        contentBuilder.title = @"카카오 판교오피스";
        contentBuilder.desc = @"카카오 판교오피스 위치입니다.";
        contentBuilder.imageURL = [NSURL URLWithString:@"http://www.kakaocorp.com/images/logo/og_daumkakao_151001.png"];
        contentBuilder.link = [KLKLinkObject linkObjectWithBuilderBlock:^(KLKLinkBuilder * _Nonnull linkBuilder) {
            linkBuilder.mobileWebURL = [NSURL URLWithString:@"https://developers.kakao.com"];
        }];
    }];
}];

[[KLKTalkLinkCenter sharedCenter] sendDefaultWithTemplate:template success:^(NSDictionary<NSString *,NSString *> * _Nullable warningMsg, NSDictionary<NSString *,NSString *> * _Nullable argumentMsg) {
    // 성공
    ...
} failure:^(NSError * _Nonnull error) {
    // 에러
    ...
}];

커머스 템플릿 보내기

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

default_commerce_spec.png

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

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

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

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

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

커머스 템플릿은 KLKTalkLinkCenter클래스의 sendDefaultWithTemplate:success:failure: 메소드를 이용하여 전송합니다. sendDefaultWithTemplate:success:failure: 메소드는 하나의 메시지 템플릿 오브젝트와 성공 및 실패 핸들러를 파라미터로 받습니다.

다음은 커머스 템플릿을 보내는 예제입니다.

KLKTemplate *template = [KLKCommerceTemplate commerceTemplateWithBuilderBlock:^(KLKCommerceTemplateBuilder * _Nonnull commerceTemplateBuilder) {

    // 콘텐츠
    commerceTemplateBuilder.content = [KLKContentObject contentObjectWithBuilderBlock:^(KLKContentBuilder * _Nonnull contentBuilder) {
        contentBuilder.title = @"Ivory long dress (4 Color)";
        contentBuilder.imageURL = [NSURL URLWithString:@"http://mud-kage.kakao.co.kr/dn/RY8ZN/btqgOGzITp3/uCM1x2xu7GNfr7NS9QvEs0/kakaolink40_original.png"];
        contentBuilder.link = [KLKLinkObject linkObjectWithBuilderBlock:^(KLKLinkBuilder * _Nonnull linkBuilder) {
            linkBuilder.mobileWebURL = [NSURL URLWithString:@"https://developers.kakao.com"];
        }];
    }];

    //
    commerceTemplateBuilder.commerce = [KLKCommerceObject commerceObjectWithBuilderBlock:^(KLKCommerceBuilder * _Nonnull commerceBuilder) {
        commerceBuilder.regularPrice = @(208800);
        commerceBuilder.discountPrice = @(146160);
        commerceBuilder.discountRate = @(30);
    }];

    // 버튼
    [commerceTemplateBuilder addButton:[KLKButtonObject buttonObjectWithBuilderBlock:^(KLKButtonBuilder * _Nonnull buttonBuilder) {
        buttonBuilder.title = @"구매하기";
        buttonBuilder.link = [KLKLinkObject linkObjectWithBuilderBlock:^(KLKLinkBuilder * _Nonnull linkBuilder) {
            linkBuilder.mobileWebURL = [NSURL URLWithString:@"https://developers.kakao.com"];
        }];
    }]];
    [commerceTemplateBuilder addButton:[KLKButtonObject buttonObjectWithBuilderBlock:^(KLKButtonBuilder * _Nonnull buttonBuilder) {
        buttonBuilder.title = @"공유하기";
        buttonBuilder.link = [KLKLinkObject linkObjectWithBuilderBlock:^(KLKLinkBuilder * _Nonnull linkBuilder) {
            linkBuilder.iosExecutionParams = @"param1=value1&param2=value2";
            linkBuilder.androidExecutionParams = @"param1=value1&param2=value2";
        }];
    }]];
}];

[[KLKTalkLinkCenter sharedCenter] sendDefaultWithTemplate:template success:^(NSDictionary<NSString *,NSString *> * _Nullable warningMsg, NSDictionary<NSString *,NSString *> * _Nullable argumentMsg) {
    // 성공
    ...
} failure:^(NSError * _Nonnull error) {
    // 에러
    ...
}];

텍스트 템플릿 보내기

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

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

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

이름 타입 필수 설명
objectType 템플릿 종류. "text" 고정값 NSString O
text 최대 200자의 텍스트 정보 NSString O
link 해당 컨텐츠 클릭 시 이동 할 링크 정보 KLKLinkObject O
buttonTitle 기본 버튼 타이틀("자세히 보기")을 변경하고 싶을 때 설정 NSString X
buttons 버튼 목록. 버튼 타이틀과 링크를 변경하고 싶을때, 버튼 두개를 사용하고 싶을때 사용.(최대 2개) NSArray<KLKButtonObject> X

스크랩 템플릿 보내기

  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만으로 간편하게 전달합니다.

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

스크랩 템플릿은 KLKTalkLinkCenter클래스의 sendScrapWithURL:success:failure: 메소드를 이용하여 전송합니다. sendScrapWithURL:success:failure: 메소드는 스크랩할 웹 페이지의 URL과 성공 및 실패 핸들러를 파라미터로 받습니다.

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

NSURL *url = [NSURL URLWithString:@"https://developers.kakao.com"];

[[KLKTalkLinkCenter sharedCenter] sendScrapWithURL:URL success:^(NSDictionary<NSString *,NSString *> * _Nullable warningMsg, NSDictionary<NSString *,NSString *> * _Nullable argumentMsg) {
    // 성공
    ...
} failure:^(NSError * _Nonnull error) {
    // 에러
    ...
}];

자신의 서비스에 보다 특화된 형태의 스크랩 메시지를 전송하려면 스크랩용 커스텀 템플릿을 이용해야 합니다. 메시지 템플릿 생성가이드를 참조하여 템플릿을 생성한 후 sendScrapWithURL:templateId:templateArgs:success:failure:메소드를 이용하여 전송할 수 있습니다.

스크랩 템플릿에서 사용되는 커스텀 템플릿은 개발자 웹사이트의 [내 애플리케이션] - 앱 선택 - [설정] - [메시지 템플릿 v2] 메뉴를 통해 생성할 수 있습니다. 기본적으로 템플릿을 생성하고 보내는 방식은 커스텀 템플릿 보내기와 동일하지만 생성된 템플릿에 아래 표에 나와있는 파라미터(Template Arguments)가 입력되어 있어야 합니다. 해당 키가 포함된 메시지 템플릿 구성 요소에 스크랩된 웹사이트 정보가 서버에서 자동으로 입력됩니다.

파라미터 키 설명
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

예를 들어 메시지 템플릿 빌더를 이용하여 feed 템플릿을 만들고 이미지에 "${SCRAP_IMAGE}", 제목에 "${SCRAP_TITLE}", 설명에 "${SCRAP_DESCRIPTION}"를 입력하고 이 템플릿을 전송하면 웹 페이지의 해당 스크랩 정보가 각각 이미지, 제목, 설명 위치에 노출됩니다. 이 때 위 표에 있는 파라미터(Template Arguments)들은 서버에서 입력하므로 별도의 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. 이미지 영역: 최대 3장 표시 / 800px * 800px이상 (권장사항)
  2. 프로필: 프로필 이미지와 프로필 명을 표현하는 영역 / 400px * 400px이상 (권장사항)
  3. 할인된 가격 영역
  4. 정상가격 영역
  5. 할인율 영역
  6. 제품명 영역: 최대 2줄 표시
  7. 버튼 영역: 최대 2개 표시, 버튼명 8자 이하 권장

commerce_spec.png

커스텀 템플릿은 개발자 웹사이트의 [내 애플리케이션] - 앱 선택 - [설정] - [메시지 템플릿 v2] 메뉴를 통해 생성할 수 있습니다. 메시지 템플릿 생성하기

커스텀 템플릿 내에 입력되는 URL이나 텍스트 값들은 메시지를 전송하는 시점에 동적으로 설정할 수 있습니다. 변경되기 원하는 값에 자신만의 파라미터를 정의하여 입력해두고 전송하는 시점에 해당 파라미터을 전달하면 지정된 값이 메시지에 노출됩니다. 예를 들면, 피드 템플릿의 콘텐츠 설명을 동적으로 변경하고 싶을 경우 설명에 "${MY_DESCRIPTION}"이라고 입력한 후 "{"MY_DESCRIPTION":"변경된 설명문구입니다."}" 형태로 파라미터를 전달합니다.

커스템 템플릿은 KLKTalkLinkCenter클래스의 sendCustomWithTemplateId:templateArgs:success:failure: 메소드를 호출하여 보내실 수 있습니다. sendCustomWithTemplateId:templateArgs:success:failure: 메소드는 커스텀 템플릿의 아이디와 파라미터(Template Arguments), 성공 및 실패 핸들러를 파라미터로 받습니다.

다음은 커스텀 템플릿을 보내는 예제입니다. 메시지 템플릿 빌더를 통해 제목에 "TITLE", 설명에 "DESCRIPTION" 파라미터가 추가된 feed형 템플릿(1234)을 만들었다고 가정하였습니다.

NSString *templateId = @"1234";
NSDictionary *templateArgs = @{@"TITLE": @"MY MESSAGE TEMPLATE"};
                               @"DESCRIPTION": @"It's my custom template."};


[[KLKTalkLinkCenter sharedCenter] sendCustomWithTemplateId:templateId templateArgs:templateArgs success:^(NSDictionary<NSString *,NSString *> * _Nullable warningMsg, NSDictionary<NSString *,NSString *> * _Nullable argumentMsg) {
    // 성공
    ...
} failure:^(NSError * _Nonnull error) {
    // 에러
    ...
}];

이미지 업로드

카카오톡에 이미지를 포함한 메시지를 공유하기 위해서는 해당 이미지를 카카오의 이미지 서버에 업로드해야 합니다. 카카오링크 SDK는 메시지 전송 기능 이외에 이미지 업로드 기능을 제공합니다. 카카오링크 전용 이미지 서버에 로컬에 있는 이미지를 업로드하거나 온라인 상의 이미지를 스크랩하여 업로드할 수 있습니다.

업로드된 이미지는 최대 20일간 보관됩니다.

이미지 업로드

이미지 업로드 기능을 이용하면 카카오톡링크 v1에서 지원되지 않았던 로컬 이미지를 이용한 메시지 전송이 가능해집니다. 다음은 로컬 이미지를 업로드하는 예제입니다.

UIImage *sourceImage = [UIImage imageWithContentsOfFile:@"image.png"];

[[KLKImageStorage sharedStorage] uploadWithImage:sourceImage
                                         success:^(KLKImageInfo *original) {
                                             // 업로드 성공
                                             NSLog(@"Image URL: %@", original.URL);
                                         } failure:^(NSError *error) {
                                             // 업로드 실패
                                         }];
이미지 스크랩

온라인 상에 있는 이미지의 URL을 전달하여 카카오 이미지 서버로 업로드할 수 있습니다.

NSURL *imageURL = [NSURL URLWithString:@"http://www.kakaocorp.com/images/logo/og_daumkakao_151001.png"];

[[KLKImageStorage sharedStorage] scrapWithImageURL:imageURL
                                           success:^(KLKImageInfo *original) {
                                               // 업로드 성공
                                               NSLog(@"Image URL: %@", original.URL);
                                           } failure:^(NSError *error) {
                                               // 업로드 실패
                                           }];
이미지 삭제

카카오 이미지 서버에 업로드된 이미지는 20일 후에 자동 삭제됩니다. 임의로 이미지를 삭제하고 싶을 경우에는 다음과 같이 업로드 된 이미지 URL을 파라미터로 전달하여 이미지를 삭제합니다.

NSURL *imageURL = original.URL;

[[KLKImageStorage sharedStorage] deleteWithImageURL:imageURL
                                            success:^() {
                                                // 삭제 성공
                                            } failure:^(NSError *error) {
                                                // 삭제 실패
                                            }];

카카오스토리링크

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

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


Last Modified : 2017-11-07