5/30/2018

Javascript를 이용하여 간단하게 카카오톡 공유(카카오링크) 적용하기

요즘은 SNS 공유 기능을 사용하지 않는 웹 페이지를 만나보기가 굉장히 어렵습니다. 특히나 블로그나 매체, 판매 사이트들은 컨텐츠의 공유에 있어 굉장히 좋은 방법이고 많이 사용되고 있기 떄문에 그렇다고 생각이 드네요.

이전부터 몇몇 sns 서비스에 대해서 공유버튼 사용하다가, 불필요한건 날리다가.. 여러번했었는데요. 최근에 그냥 google, twitter, facebook 정도만 유지하고 있었습니다. 

문뜩 카톡쪽도 추가하면 좋겠다는 생각이 들어 바로 적용했고 그 과정에 대한 내용 공유해봅니다. 
(템플릿을 지정할 수 있어서 글 공유 이외에 다른 용도로도 써볼 수 있을 것 같네요)

카카오 개발자 등록&어플리케이션 등록

다른 SNS 공유 기능(대체로 그냥 공유 페이지에 a 태그로 링크 거는게 전부죠..)과 다르게 개발자 등록 후 API 키를 받아서 처리해야합니다. 덕분에 통계 뽑아 보기에는 좋겠네요. 

우선 카카오 개발자 페이지(https://developers.kakao.com)로 접속하여 개발자 계정으로 가입(그냥 기존 톡 계정에서 몇몇 내용만 작성하면 끝) 후 어플리케이션을 생성해줍니다. 

그 후 기본정보에 들어가보시면 앱 키 정보를 확인할 수 있습니다. 저는 블로그에 공유 기능만 추가할거라 Javascript 키만 필요했습니다. 

사이트 도메인 지정 안하면 에러 납니다. 

그리고 위 이미지 아래쪽에 보시면 플랫폼 부분이 있는데, 여기서 Android, iOS, Web 여부와 허용할 서비스 지정이 필요합니다. 전 웹으로 하고 허용 서비스 공유가 사용되어도 좋은 서비스 도메인만 포함하였습니다. 

여기서 허용서비스가 아닌 곳에서 제  API 키를 가지고 공유하는 경우 ErrorCode(4002) 에러가 발생합니다. 

혹시라도 발생했다면 개발자 페이지에서 이런 부분들 우선적으로 확인해주시면 될 것 같습니다. 

자 이제 거의 다 끝나갑니다. 카카오 링크 코드가 복잡하진 않으니 아래 링크 참고하시면 금방 원하시는 대로 구성이 가능할겁니다.


코드 대충 주석 달아놨으니.. 추가로 더 참고해주시면 좋을듯해요.

<a href="javascript:;" id="kakao-link-btn"> 
<!-- 버튼이 생기는 부분, id는 맘대로 쓰시되 아래 js 코드도 동일하게 적용해주셔야 합니다. -->
<img src="//developers.kakao.com/assets/img/about/logos/kakaolink/kakaolink_btn_medium.png" /> <!-- 톡 이미지 부분이고, 전 kakaolink_btn_small.png로 불러왔습니다.   -->
</a>
<script type="text/javascript">
  //<![CDATA[
    // // 사용할 앱의 JavaScript 키를 설정해 주세요.
    Kakao.init('YOUR APP KEY');
    // // 카카오링크 버튼을 생성합니다. 처음 한번만 호출하면 됩니다.
    Kakao.Link.createDefaultButton({
      container: '#kakao-link-btn',  // 컨테이너는 아까 위에 버튼이 쓰여진 부분 id 
      objectType: 'feed',
      content: {  // 여기부터 실제 내용이 들어갑니다. 
        title: '딸기 치즈 케익', // 본문 제목
        description: '#케익 #딸기 #삼평동 #카페 #분위기 #소개팅',  // 본문 바로 아래 들어가는 영역?
        imageUrl: 'http://mud-kage.kakao.co.kr/dn/Q2iNx/btqgeRgV54P/VLdBs9cvyn8BJXB3o7N8UK/kakaolink40_original.png', // 이미지
        link: {
          mobileWebUrl: 'https://developers.kakao.com',
          webUrl: 'https://developers.kakao.com'
        }
      },
      social: {  /* 공유하면 소셜 정보도 같이 줄 수 있는데, 이 부분은 기반 서비스마다 적용이 쉬울수도 어려울 수도 있을듯 합니다. 전 연구해보고 안되면 제거할 예정 (망할 google  blogger...) */
        likeCount: 286,
        commentCount: 45,
        sharedCount: 845
      },
      buttons: [
        {
          title: '웹으로 보기',
          link: {
            mobileWebUrl: 'https://developers.kakao.com',
            webUrl: 'https://developers.kakao.com'
          }
        },
        {
          title: '앱으로 보기',
          link: {
            mobileWebUrl: 'https://developers.kakao.com',
            webUrl: 'https://developers.kakao.com'
          }
        }
      ]
    });
  //]]>
</script> 

Javscript로 페이지 정보 불러오기

위에 방법대로 하면 항상 고정된 데이터에 대해 공유버튼이 생성되기 떄문에 매우 불편합니다. 글마다 매번 코드를 써줄 순 없지요. 서버사이드단(백엔드)에서 코드 사용이 가능하면 해당 부분에 직접 db에서 뽑은 내용을 넣어줄 수 있겠지만.. 그럴 수 없는 환경(보편적인 블로거들..ㅋㅋ, 특히 저와 같은 구글블로거...)에선 Javascript로 처리해주는게 깔끔합니다. 

<script src="//developers.kakao.com/sdk/js/kakao.min.js"></script>

<script src="//developers.kakao.com/sdk/js/kakao.min.js"></script>

<a href="javascript:;" id="kakao-link-btn">
<img src="//developers.kakao.com/assets/img/about/logos/kakaolink/kakaolink_btn_small.png" width="10px" />
</a>

<script type="text/javascript">
  //<![CDATA[
    // // 사용할 앱의 JavaScript 키를 설정해 주세요.
    Kakao.init('bfd4cd7749e2b1ffca24a00eeb5aaabc');
    // // 카카오링크 버튼을 생성합니다. 처음 한번만 호출하면 됩니다.
    Kakao.Link.createDefaultButton({
      container: '#kakao-link-btn',
      objectType: 'feed',
      content: {
        title: document.title,
        description: '내용, 주로 해시태그',
        imageUrl: document.images[0].src,
        link: {
          webUrl: document.location.href,
          mobileWebUrl: document.location.href
        }
      },
      social: {
        likeCount: 286,
        commentCount: 45,
        sharedCount: 845
      },
      buttons: [
        {
          title: 'Open!',
          link: {
            mobileWebUrl: document.location.href,
            webUrl: document.location.href
          }
        }  
      ]
    });
  //]]>
</script>

소셜 부분이나 Description 부분도 Javascript에서 값 가져올 수 있는 부분이라면 쉽게 만들 수 있습니다. 전.. 그럼 소셜 부분이나 확인해봐야겠네요. 결과는 댓글로 남겨놓겠습니다 :)

적용한 모습은 아래와 같습니다.

물론 테두리나 이런건 따로 적용...

클릭해보면 공유하기 창이 나타나고(앱에서 클릭 시 바로 톡으로 웹에서 클릭하면 웹 공유 페이지로) 공유하면 위에 코드 적용한대로 톡방에 공유됩니다. 







HAHWUL

Security engineer, Gopher and H4cker!

Share: | Coffee Me:

21 comments:

  1. label, og:tag 처리 부분 코드 추가했는데, 겸사겸사 댓글로 남겨둡니다 :)

    ### [label부분 코드 추가]

    label_buffer = "";
    label_count = document.getElementsByClassName("label").length;
    for(var i=0;i<label_count;i++)
    {
    label_buffer = label_buffer+" #"+document.getElementsByClassName("label")[i].innerHTML;
    }


    ### [Og image 체크로직+추가]
    image_buffer = "";

    try {
    image_buffer = $('meta[property=og\\:image]')[0].content
    }
    catch(exception){
    image_buffer = "https://3.bp.blogspot.com/-CeZ76ZH92VQ/WqzpD8-8s6I/AAAAAAAAC4g/Xq05MaelrqInBmAern3JQJFWXgL9Mwt_ACLcBGAs/s1600/hwul.png"
    }
    finally {

    }

    ReplyDelete
  2. 많은 도움 되었습니다~ 감사합니다 ^^

    ReplyDelete
    Replies
    1. 아이디알면 링크광고 띄울수있나요?

      아님 아이피주소를 쳐야하나요?

      skyjjangjjw@naver.com 요기로 답변좀
      부탁드릴게요

      Delete
    2. 질문이 좀 모호하긴한데, 카카오 링크 자체가 SNS 공유 버튼입니다. 아이디나 아이피의 유무가 아닌 웹 페이지를 보고 있는 사용자가 액션을 통해서 자신의 카카오톡 채팅or친구 리스트에 카드 메시지로 전달할 수 있는 기능이에요 (:

      Delete
  3. 겨우 원하던 소스를 찾았습니다 감사합니다!!!!!!!

    그런데,,,처음에 알려주신 아래 소스로 설정하니 링크 타이틀(기사제목)만 변하고 이미지는 변하지 안네요. 각 기사의 섬네일도 자동으로 반영 시킬 수는 없는지요?
    바쁘신데,,,죄송합니다. 아무리해도 안되서,,

    ReplyDelete
  4. 아,,아래 소스란 저 위에서 제일 먼저 제시해주신 내용을 말합니다.

    ReplyDelete
    Replies
    1. 앗 댓글 확인이 좀 늦었습니다. (메일보고 알았네요ㅜㅜ)

      이미비가 변하지 않는다면 게시글 이미지보다 위쪽에 고정된 이미지가 있는 것 같습니다. (코드를 구성할 떄 첫번째 이미지를 가져오도록 했기 떄문이죠)

      혹시 해당 링크 주소 좀 알 수 있을까요? 동일한 위치에 게시글 이미지가 찍히는 것이면 부분에서 숫자 바꿔가며 이미지 찾는 것도 방법일 것 같구요, 아니면 찾아낼 수 있는 규칙을 봐야 코드를 쉽게 구성할 수 있을 것 같습니다.

      imageUrl: document.images[0].src,

      Delete
    2. 게시글 이미지 코드 부분이 이런식으로 class나 id가 지정되어 있다면 쉽게 걸러낼 수 있습니다.

      <img src="이미지 주소" id="blahblah~~" class=="blahblah~~">

      [ e.g ]
      imageUrl: document.getElementById('blahblah~~').src

      Delete
  5. 안녕하세요~ 초보인데요~ 카페 24를 이용해 카톡 상품 공유 버튼을 넣는 작업을 하고 있습니다~
    imageUrl: document.images[0].src, 코드를 넣고 카톡 공유하기를 해보았는데
    이미지를 추출해내지 못하네요~
    혹시 어떻게 하면 되는지 알려주실수 있나요 ㅠㅠ

    ReplyDelete
    Replies
    1. 우선 document.images[0].src 부분은 웹 페이지의 이미지 리스트 중 첫번째 값을 가져오는 코드인데요, 코드 수정 가능한 부분이라면 상품 이미지 부분에 id, name , class 등을 지정하고 해당 값을 기준으로 찾는 방법으로 가능할 것 같네요.

      예를들면.. 상품 이미지쪽 코드에 title_image 란 id 값을 지정해주고

      <img src="이미지주소" id="title_image">

      실제 코드에선 이런 형태로 이미지 주소를 뽑아낼 수 있습니다.

      document.getElementById('title_image').src // 하면 이미지 주소이고, 이 데이터로 넘겨주면 이미지가 나타나게되죵.

      한번해보시고 문제있는 부분있다면 댓글주세요~

      Delete
  6. 사장님 진짜 너무 궁금한 질문있습니다
    제발 카카오톡 gj8303으로 연락 한번만 주세요 알려주시면 사례해드리겠습니다

    ReplyDelete
    Replies
    1. 글에 대해 궁금하신 내용은 댓글로 부탁드립니다

      Delete
  7. 안녕하세요 지금도 질문 가능 할까요?

    ReplyDelete
  8. 안녕하세요 링크 스크립트 넣을때 해더에 넣었는데요 버튼 작동이 안되는 이유는 뭘까요 ㅜㅜ

    ReplyDelete
    Replies
    1. 해결했습니다. 덕분에 쉽게 풀렸어요 감사합니다.

      Delete
    2. 다행이네요~ 감사합니다 :D

      Delete
  9. 안녕하세요, 웹에서 직접 클릭해서 대상 지정하지 않고 코드로 바로 특정 사용자에게/특정 방에 전송은 불가능하나요?

    ReplyDelete