TripLog 프로젝트를 진행중에 카카오톡 공유하기 기능을 react에서 사용하기 위한 방법에 대한 내용이다.
createDefaultButton()
sendDefault()
두가지의 차이점을 알고 각각의 사용방법에 대해 서술하겠다.
// index.html
<script src="https://developers.kakao.com/sdk/js/kakao.js"></script>
React에서 카카오톡 공유하기를 사용하기 위한 컴포넌트
// KakaoShare.jsx
import { useEffect } from 'react'
export default function KakaoShare() {
useEffect(() => {
kakaoButton()
}, [])
const kakaoButton = () => {
if (window.Kakao) {
const kakao = window.Kakao
if (!kakao.isInitialized()) {
kakao.init('e79b288ebffab6c35ea1c3d7624e2f3a')
}
kakao.Share.createDefaultButton({
container: '#kakaotalk-sharing-btn',
objectType: 'feed',
content: {
title: '오늘의 디저트',
description: '아메리카노, 빵, 케익',
imageUrl:
'https://mud-kage.kakao.com/dn/NTmhS/btqfEUdFAUf/FjKzkZsnoeE4o19klTOVI1/openlink_640x640s.jpg',
link: {
mobileWebUrl: 'https://developers.kakao.com',
webUrl: 'https://developers.kakao.com',
},
},
itemContent: {
profileText: 'Kakao',
profileImageUrl: 'https://mud-kage.kakao.com/dn/Q2iNx/btqgeRgV54P/VLdBs9cvyn8BJXB3o7N8UK/kakaolink40_original.png',
titleImageUrl: 'https://mud-kage.kakao.com/dn/Q2iNx/btqgeRgV54P/VLdBs9cvyn8BJXB3o7N8UK/kakaolink40_original.png',
titleImageText: 'Cheese cake',
titleImageCategory: 'Cake',
items: [
{
item: 'Cake1',
itemOp: '1000원',
},
{
item: 'Cake2',
itemOp: '2000원',
},
{
item: 'Cake3',
itemOp: '3000원',
},
{
item: 'Cake4',
itemOp: '4000원',
},
{
item: 'Cake5',
itemOp: '5000원',
},
],
sum: 'Total',
sumOp: '15000원',
},
social: {
likeCount: 10,
commentCount: 20,
sharedCount: 30,
},
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',
},
},
],
});
}
}
return (
<button id='kakaotalk-sharing-btn'>KakaoShare</button>
)
}
Kakao.init: Already initialized 에러를 방지하기 위함이다.
해당 오류를 해결하기 위해서는 Kakao 객체가 초기화 되었는지 한번 체크하고, 초기화 되었을때는 호출하지않고, 초기화되지 않은 상황에서만 호출되게 되는 코드를 작성한다
if (!Kakao.isInitialized()) {
Kakao.init('JavaScript 키');
};
kakao.Share
에 대해 알아보기들어가기에 앞서 해당 기능을 구현하기 위해서 기존의 Link
방식이 아닌 22.05.30 이후 변경된 Share
로 사용하였다.
container: '#kakaotalk-sharing-btn'
createDefaultButton()
을 사용하기 위해서는kakaotalk-sharing-btn
을 찾아 그부분을 렌더링을 한다.objectType(5가지 기능을 제공)
social(5가지 기능 제공)
(소셜 정보는 5개의 속성 중 최대 3개까지만 표시해 준다.
우선 순위 Like > Comment > Shared > View > Subscriber)
createDefaultButton()
과 sendDefault()
의 차이createDefaultButton()
은 container: '#kakaotalk-sharing-btn'
을 제공해 카카오톡 공유하기 버튼을 띄우려는 위치에서 해당 함수를 호출해야하는 방법을 사용해야 한다
sendDefault()
은 카카오톡 공유하기 버튼을 추가하지 않고, 메시지 보내기 요청만 하기 때문에
container: '#kakaotalk-sharing-btn'
을 제공하지 않는다.
사용을 원하는 곳에 onClick() 함수를 이용하기 때문에 useEffect를 사용하지 않아도 된다.
// sendDefault() 사용
export default function KakaoShare() {
const kakaoButton = () => {
if (window.Kakao) {
const kakao = window.Kakao
if (!kakao.isInitialized()) {
kakao.init('e79b288ebffab6c35ea1c3d7624e2f3a')
}
kakao.Share.sendDefault({
objectType: 'feed',
content: {
title: '딸기 치즈 케익',
description: '#케익 #딸기 #삼평동 #카페 #분위기 #소개팅',
imageUrl:
'http://k.kakaocdn.net/dn/Q2iNx/btqgeRgV54P/VLdBs9cvyn8BJXB3o7N8UK/kakaolink40_original.png',
link: {
mobileWebUrl: 'https://developers.kakao.com',
webUrl: 'https://developers.kakao.com',
},
},
social: {
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',
},
},
],
});
}
}
return (
<button onClick={kakaoButton}>KakaoShare</button>
)
}
// createCustomButton()
kakao.Share.createCustomButton({
container: '#kakaotalk-sharing-btn',
templateId: ${YOUR_TEMPLATE_ID},
templateArgs: {
title: '제목 영역입니다.',
description: '설명 영역입니다.',
},
});
// sendCustom()
Kakao.Share.sendCustom({
templateId: ${YOUR_TEMPLATE_ID},
templateArgs: {
title: '제목 영역입니다.',
description: '설명 영역입니다.',
},
});
내가 만든 템플릿 ID 찾기
처음에 왜 내가 가져와서 사용 하려고 하니깐 에러가 발생할까? 를 줄이기 위해 공식문서를 통해 학습한 내용을 토대로 내가 겪은 문제에 대해 해결방법과 그 이유에 대해 서술했다.
누군가 내 블로그를 들어와서 단순히 코드를 복사해서 사용하는 것이 아닌 어떤 구성으로 공유하기를 사용할 수 있는지에 대해 알아보는 시간이 되었으면 좋겠다.