현재까지 진행 완료 된 사항
1. 결과화면을 html2canvas 이용하여 이미지로 추출
2. 추출된 이미지를 서버에 임시 hosting
작업 과정
3. 카카오톡 공유 (javascript sdk)
3-1. 공유 버튼 넣기
3-2. 공유 버튼 기능 테스트
과정 3. 카카오톡 공유 (javascript sdk)
3-1. 공유 버튼 넣기
- container 생성 후 제공되는 createDefaultButton 호출하면된다
<a id="kakaotalk-sharing-btn" href="javascript:;">
<img src="https://developers.kakao.com/assets/img/about/logos/kakaotalksharing/kakaotalk_sharing_btn_medium.png"
alt="카카오톡 공유 보내기 버튼" />
</a>
<script>
Kakao.Share.createDefaultButton({
container: '#kakaotalk-sharing-btn',
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',
},
},
});
</script>
- 내 사이트에 적용
문제 발생:
createDefaultButton 누르기 전 이미지가 업로드되어 createDefaultButton 시 set되는 url이 이미 생성되어있어야함. 하지만 버튼을 그리기 위해서는 createDefaultButton이 먼저 호출되어야함.
Workaround:
버튼 생성 없이 메시지만 보내는 sendDefault 함수 사용
관련 코드:
kakao.Share.sendDefault({
objectType: 'feed',
content: {
title: title,
imageUrl:
url,
link: {
mobileWebUrl: 'https://harang90.github.io',
webUrl: 'https://harang90.github.io'
},
},
});
3-2. 공유 버튼 기능 테스트
테스트 이유:
이미지 업로드 후 이미지가 공유 하기에 잘 가는지 확인
테스트 결과:
실패
문제:
1. 공유하기 시 이미지 미리보기 때 이미지가 로딩이 안된채 보임
원인:
1. useState 활용하여 메시지 url을 state 값을 넣어주고 있었는데, setState 로 url 값을 넣어주려면 시간이 좀 걸림
Workaround:
1. 굳이 useState 를 활용하지 않고, response로 받은 url을 그대로 메시지 url 로 사용
재테스트 결과:
성공
최종 결과물
스크린샷:
코드:
const ShareButton = (props) => {
useEffect(() => {
if (window.Kakao) {
const kakao = window.Kakao;
if (!kakao.isInitialized()) {
kakao.init('2a0e55e39e3595fb4c32b31dcf0871aa');
}
}
}, []);
const handleConvertToImageAndUpload = () => {
html2canvas(props.componentRef.current).then((canvas) => {
canvas.toBlob(function(blob) {
var file = new File([blob], "image.png", {type: "image/jpeg", lastModified: Date.now()});
const dataTransfer = new DataTransfer();
dataTransfer.items.add(file);
if (window.Kakao) {
const kakao = window.Kakao;
kakao.Share.uploadImage({
file: dataTransfer.files,
})
.then(function(response) {
var prob = Math.round(props.result[0]["probability"] * 100).toString()
var title = '당신은 ' + prob + '% ' + props.result[0]["className"] + ' 입니다'
kakao.Share.sendDefault({
objectType: 'feed',
content: {
title: title,
imageUrl:
response.infos.original.url,
link: {
mobileWebUrl: 'https://harang90.github.io',
webUrl: 'https://harang90.github.io'
},
},
});
})
.catch(function(error) {
console.log(error);
});
}
}, "image/jpeg");
});
};
const shareKakao = () => {
if (window.Kakao) {
const kakao = window.Kakao;
if (!kakao.isInitialized()) return;
handleConvertToImageAndUpload();
};
}
return (
<Box component="button" onClick={shareKakao}
sx={{
width: 300,
margin: '0 auto',
border: 'none',
display: 'flex',
justifyContent: 'center',
backgroundColor: 'transparent',
'&:hover': {
backgroundColor: 'primary.light',
opacity: [0.9, 0.9, 0.9],
},
}}
>
<img src="https://developers.kakao.com/assets/img/about/logos/kakaotalksharing/kakaotalk_sharing_btn_small.png" alt="카카오톡 공유 보내기 버튼" />
</Box>
);
}