[React+typescript] ์นด์นด์˜คํ†ก ๊ณต์œ ๊ธฐ๋Šฅ ์ถ”๊ฐ€ํ•˜๊ธฐ
728x90

Today, What I learned?

์œ ์ € ํ”ผ๋“œ๋ฐฑ์„ ๋ฐ˜์˜ํ•˜์—ฌ, ๊ธฐ์กด์˜ ๊ณต์œ  ๊ธฐ๋Šฅ์—์„œ ์นด์นด์˜คํ†ก ๊ณต์œ ๋ฅผ ์ถ”๊ฐ€ํ•˜๊ธฐ๋กœ ํ–ˆ๋‹ค. (์•„๋ฌด๋ž˜๋„ ๋งŽ์ด ์“ฐ์ด๋‹ˆ๊นŒ)

์œ ์ € ํ”ผ๋“œ๋ฐฑ ์ค‘ ์ผ๋ถ€

์ด์ „ ํ”„๋กœ์ ํŠธ์—๋„ ๊ตฌํ˜„๋˜์–ด ์žˆ๋˜ ๋ถ€๋ถ„์ด๋ผ (๋‹ด๋‹นํ•˜์ง„ ์•Š์Œ) ๊ฝค ๋งŽ์€ ์ฐธ๊ณ ๋ฅผ ํ–ˆ์Œ์—๋„?..

์กฐ๊ธˆ ๋‹ค๋ฅด๊ฒŒ ์ ์šฉํ•˜๋ ค๋‹ค ๋ณด๋‹ˆ ์˜ค๋ฅ˜๊ฐ€ ์ข€ ๋ฐœ์ƒํ•ด์„œ ๊ธฐ๋ก..

 

 

์‚ฌ์ „ ์ž‘์—…

์ผ๋‹จ ์นด์นด์˜ค ๋””๋ฒจ๋กญ์Šค์—์„œ ์•ฑ ๋“ฑ๋ก๊ณผ ํ”Œ๋žซํผ์— ๋„๋ฉ”์ธ ๋“ฑ๋ก์ด ํ•„์š”ํ•˜๋‹ค.

์•ฑ์„ ๋“ฑ๋กํ•˜๋ฉด ์•ฑ ํ‚ค๋ฅผ ํ™•์ธํ•  ์ˆ˜ ์žˆ๊ณ , ์—ฌ๊ธฐ์„œ ํ•„์š”ํ•œ ๊ฐ’์€ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ํ‚ค๊ฐ’. env ํŒŒ์ผ์— ์ถ”๊ฐ€ํ•ด ์ฃผ์ž!

 

 

๋˜ ํ”Œ๋žซํผ์—์„œ Web์— ๋„๋ฉ”์ธ์„ ์ถ”๊ฐ€ํ•ด ์ค€๋‹ค.

๋‚˜๋Š” ๋ฐฐํฌ์ฃผ์†Œ๋ž‘ ๋กœ์ปฌํ˜ธ์ŠคํŠธ๋ฅผ ์ถ”๊ฐ€ํ•ด ์ฃผ์—ˆ๋‹ค.

์ถ”๊ฐ€์ ์œผ๋กœ PR์‹œ vercel ํ”„๋ฆฌ๋ทฐ์—์„œ ํ™•์ธํ•˜๊ณ  ์‹ถ๋‹ค๋ฉด ํ”„๋ฆฌ๋ทฐ ์ฃผ์†Œ๋ฅผ ์ถ”๊ฐ€ํ•ด์ค˜์•ผ ํ•œ๋‹ค.

 

 

 

index.html

index.html์˜ ํ—ค๋” ์•ˆ์— ์นด์นด์˜ค ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์ถ”๊ฐ€ํ•ด ์ค€๋‹ค.

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

 

 

 

d.ts

ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ๋ฅผ ์“ฐ๊ณ  ์žˆ๊ธฐ ๋•Œ๋ฌธ์—.. KaKao ๊ฐ์ฒด์— ๋Œ€ํ•œ ํƒ€์ž… ์ง€์ •์ด ํ•„์š”ํ•˜๋‹ค.
Window ๊ฐ์ฒด๋ฅผ ํ™•์žฅํ•ด์„œ ์ธํ„ฐํŽ˜์ด์Šค๋กœ ์ •์˜ํ•ด ์ฃผ๊ธฐ! ์ด๊ฑธ ํ•˜์ง€ ์•Š๋Š”๋‹ค๋ฉด ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค ๐Ÿ˜‡

interface Window {
  Kakao: any;
}

 

 

 

์นด์นด์˜ค API ์ดˆ๊ธฐํ™”

๊ณต์œ ํ•˜๊ธฐ ๊ธฐ๋Šฅ์ด ๋“ค์–ด๊ฐ€๋Š” ํŽ˜์ด์ง€์— useEffect๋กœ ์นด์นด์˜ค API ์ดˆ๊ธฐํ™”๋ฅผ ํ•  ์ˆ˜ ์žˆ๋„๋ก ๋„ฃ์–ด์ฃผ์—ˆ๋‹ค.
์šฐ๋ฆฌ ํ”„๋กœ์ ํŠธ์—์„œ ํ˜„์žฌ ์นด์นด์˜ค API๋ฅผ ์“ฐ๋Š” ๋ถ€๋ถ„์€ ์—ฌ๊ธฐ๋ฟ์ด๊ธฐ ๋•Œ๋ฌธ์—,,

useEffect(() => {
    if (!window.Kakao.isInitialized()) {
      window.Kakao.init(process.env.REACT_APP_KAKAO_API_KEY);
    }
  }, []);

์ฒ˜์Œ์— if๋ฌธ์„ ์•ˆ ๋„ฃ์—ˆ๋‹ค๊ฐ€, ์ด๋ฏธ ์ดˆ๊ธฐํ™”๊ฐ€ ๋˜์—ˆ๋‹ค๋Š” ์˜ค๋ฅ˜๊ฐ€ ์ฝ˜์†”์— ์ฐํžˆ๋Š” ๊ฑธ ๋ณด๊ณ  if๋ฌธ์„ ์ถ”๊ฐ€ํ•ด ์ฃผ์—ˆ๋‹ค.

 

 

์ด๋ฒคํŠธ ํ•ธ๋“ค๋Ÿฌ ํ•จ์ˆ˜ ์ถ”๊ฐ€

์ด์ œ ์ด๋ฒคํŠธ ํ•ธ๋“ค๋Ÿฌ๋ฅผ ์ถ”๊ฐ€!

์นด์นด์˜ค ๋””๋ฒจ๋กญ์Šค๋ฅผ ๋ณด๋ฉด Kakao.Share๋ฅผ ํ†ตํ•ด์„œ ๊ณต์œ ๊ธฐ๋Šฅ์„ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ๋‹ค.

https://developers.kakao.com/docs/latest/ko/message/js-link#default-template-scrap-msg-default

 

Kakao Developers

์นด์นด์˜ค API๋ฅผ ํ™œ์šฉํ•˜์—ฌ ๋‹ค์–‘ํ•œ ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๊ฐœ๋ฐœํ•ด๋ณด์„ธ์š”. ์นด์นด์˜ค ๋กœ๊ทธ์ธ, ๋ฉ”์‹œ์ง€ ๋ณด๋‚ด๊ธฐ, ์นœ๊ตฌ API, ์ธ๊ณต์ง€๋Šฅ API ๋“ฑ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

developers.kakao.com

 

 

 

๋‚˜๋Š” ์ œ๋ชฉ, 30์ž๊นŒ์ง€์˜ ๋‚ด์šฉ, ์ธ๋„ค์ผ์ด ๋“ค์–ด๊ฐ€๋„๋ก ํ–ˆ๋‹ค. ๋” ๋งŽ์€ ์˜ต์…˜์ด ์žˆ์ง€๋งŒ ํ•„์š”ํ•œ ๊ฒƒ์ด ์ด ์ •๋„๋ผ ์—ฌ๊ธฐ๊นŒ์ง€.. ๐Ÿ‘€

const handleShareKakaoClick = () => {
    if (window.Kakao) {
      const kakao = window.Kakao;

      kakao.Share.sendDefault({
        objectType: 'feed',
        content: {
          title: title,
          description: content.substring(0, 30) + '...',
          imageUrl:
            thumbnail ??
            '-๋””ํดํŠธ ์ธ๋„ค์ผ-',
          link: {
            mobileWebUrl: currentURL,
            webUrl: currentURL,
          },
        },
      });
    }

 

 

์šฐ๋ฆฌ ํ”„๋กœ์ ํŠธ์—์„œ๋Š” ์ธ๋„ค์ผ ์ด๋ฏธ์ง€๊ฐ€ ์—†์„ ๊ฒฝ์šฐ ๋””ํดํŠธ ์ด๋ฏธ์ง€๋ฅผ ๋ณด์—ฌ์ฃผ๋Š”๋ฐ, ์ด ์ด๋ฏธ์ง€๋Š” ๋กœ์ปฌ์—๋งŒ ์ €์žฅ๋˜์–ด ์žˆ๊ธฐ ๋•Œ๋ฌธ์—..

๋””ํดํŠธ ์ด๋ฏธ์ง€์— ๋Œ€ํ•œ ์ด๋ฏธ์ง€ ํŒŒ์ผ URL์ด ํ•„์š”ํ•ด์„œ ์ด๊ฑด ๊ตฌ๊ธ€ ๋“œ๋ผ์ด๋ธŒ์— ์˜ฌ๋ ค ๊ฐ€์ ธ์™”๋‹ค.

 

 

 

๊ทธ๋Ÿผ ์ด์ œ ํ•ธ๋“ค๋Ÿฌ๋ฅผ onClick ์ด๋ฒคํŠธ๋กœ ๊ฑธ์–ด์ฃผ๋ฉด ์ ์šฉ ์™„.

<ShareKaKaoArea>
    <ShareKaKaoBtn onClick={handleShareKakaoClick}>
        <KaKaoIconImg src={kakaoIcon} />
    </ShareKaKaoBtn>
</ShareKaKaoArea>

 

 

๊ณต์œ ๋ฒ„ํŠผ ๋ˆ„๋ฅด๋ฉด ์ด๋ ‡๊ฒŒ ์ž˜ ๋„˜์–ด๊ฐ„๋‹ค~

 

 

์“ฐ๊ณ  ๋ณด๋‹ˆ ์ƒ๊ฐ๋ณด๋‹ค ๋ณต์žกํ•˜์ง€ ์•Š์€ ๊ฒƒ ๊ฐ™์€ ๋Š๋‚Œ์ด ๋“œ๋Š”๋ฐ ์•”ํŠผ ์ž˜ ์ ์šฉ๋˜์—ˆ๋‹ค~

728x90