📚 우리를 위한 기록

[ React + typescript ] 카카오톡으로 공유하기

Po_tta_tt0 2022. 3. 1. 13:30
반응형

 

웹사이트에 카카오톡으로 공유하기 추가하는 방법

 

 

 

1. 일단 Kakao Developers에 접속한다

  • 우측 상단의 문서 -> 메시지 -> Javascript로 들어온다

 

공식 문서를 읽어보자.

 

 

애플리케이션 설정 확인

이 기능을 사용하려면 카카오디벨로퍼스(Kakao Developers, 이하 개발자 웹사이트) 애플리케이션(이하 앱) 설정에 Web 플랫폼 및 도메인 등 정보가 등록되어 있어야 합니다. 자세한 내용은 애플리케이션 등록을 참고합니다.

 

=> 공유하기 구현 전 앱 등록하라는 말

 

 

 

 

1 - 1. 애플리케이션 등록( 진작 등록되어있으면 넘어가기 )

 

공식 문서를 보면 잘 설명되어 있다.

내 애플리케이션으로 들어가서 애플리케이션을 추가하는 방법은 애플리케이션 등록 공식문서에 아주 잘 나와있다.

 

 

 

1. 등록하기

예시

 

 

2. 앱 키 확인하기

  • 앱 설정 -> 앱 키에 들어있는 정보들을 .env 파일에 옮겨담아준다(안전을 위해)

+ .env에 새로운 것을 집어넣으면.. 다시 종료했다가 시작하는게 좋다.

 

 

 

3. 플랫폼 등록하기

 

나는 Web를 선택하고 등록했다.

기본적으로 개발 시 사용할 localhost 경로와

배포용 경로를 등록해주었다.

 

 

 

 

 

 

 

 

2.  시작하기 전에

 

 

Step 1.메시지 API 선택

메시지 API는 카카오링크와 카카오톡 메시지 두 가지입니다. 이해하기를 참고해 어떤 API로 메시지 보내기를 구현할 것인지 결정합니다.

Step 2.메시지 종류 및 구성 방법 선택

메시지 템플릿 > 종류를 참고하여 어떤 메시지 템플릿을 사용할지 결정합니다.

보낼 메시지는 기본 템플릿을 바탕으로 객체 형태로 구성하거나, 서비스에 맞게 직접 구성한 사용자 정의 템플릿을 사용하여 구성할 수 있습니다. 자세한 사항은 메시지 구성 방법을 참고합니다.

Step 3.메시지 전송 대상 선택

카카오톡 메시지의 경우, 수신 대상에 따라 나에게 보내기, 친구에게 보내기로 API가 구분되어 있다는 점에 유의합니다.

  • 에게 보내기: 현재 로그인한 사용자의 카카오톡 '나와의 채팅'에 메시지를 보냅니다. 이 기능으로는 다른 사용자에게 메시지를 보낼 수 없고, 로그인한 사용자 본인에게만 메시지를 보낼 수 있습니다.
  • 친구에게 보내기: 현재 로그인한 사용자의 카카오톡 친구에게 메시지를 보냅니다. 친구 목록 가져오기 API를 통해 수신 대상 정보를 받는 과정을 추가 구현해야 합니다. 한 번에 최대 5명의 친구에게 메시지를 보낼 수 있습니다. 카카오톡 메시지 API의 경우, 일간 및 월간 제공량이 정해져 있으므로 운영 정책을 참고합니다.

 

1) 어떤 API를 사용해 메세지를 보낼지 선택하기

=> 카카오링크 API와 카카오톡 메시지 API가 있다. 나는 카카오링크 API를 선택했다.

 

2) 메시지 구성 방법 선택

=> 간단하게 객체로 하나하나 써내려가기 / 사용자 정의 템플릿을 이용하기가 있다.

나는 사용자 정의 템플릿을 이용했다. 참고로 이게 훨씬 더 직관적이고 쉬워보인다.

 

내 애플리케이션에 가서 템플릿 만들기를 하면 된다

 

 

여러가지 누르고 써보면 감이 잡힌다

 

 

 

3) 전송 대상 선택

=> 거의 친구에게 보내지 않을까 생각한다.

 

 

 

 

 

 

3. 메세지 보내기

친구에게 메시지 보내기 요청 시 API의 응답으로 받은 uuid를 receiver_uuids 파라미터에 전달하고....

메시지 보내기에 성공한 사용자 uuid 목록을 JSON 형식으로 받는다.

 

성공한 후 받을 사용자 목록 이야기는 나중에 하기로 하고.

 

 

메시지를 보내보자

 

1. JavaScript SDK와 연결하기

 

애플리케이션을 등록만 해놓으면 안되고 카카오가 제공하는 JavaScript SDK와 연결해야 한다

SDK 다운로드 에서 최신 버전을 내려받을 수 있다

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

이 예제를

index.html에 넣어준다

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

 

 

2. 초기화하기

Kakao.init('JAVASCRIPT_KEY'); // 내 웹 키를 할당하면 된다
Kakao.isInitialized();

 

index.tsx파일에 이렇게 넣어주었다

window.Kakao.init(process.env.REACT_APP_JAVASCRIPT_KEY);
window.Kakao.isInitialized(); // init되면 true, 아니면 false를 반환한다
  • index파일에 넣어준 이유
    => 원래는 카카오톡 링크 보내기 버튼이 들어있는 컴포넌트에서 보내려고 했지만 kakao가 계속 init되는 문제가 발생해서 상위파일에 넣어주었다.
  • 'window'.Kakao.init 처럼 앞에 window를 사용한 이유
    => 앞에 window를 넣지 않으면 react가 Kakao의 위치를 찾지 못한다. 

 

 

다 된 것 같은데...

 

또 에러가 발생한다.

 

Error! Property 'Kakao' does not exist on type 'Window & typeof globalThis'

 

에러를 읽어보면 Kakao가 Window에서 정의되지 않아 생기는 문제다 * typescript error

 

이 에러는 

react-app-env.d.ts에 window에 새롭게 들어간 Kakao를 추가하면 된다.

 

/// <reference types="react-scripts" />
interface Window {
  Kakao: any;
}

이렇게

 

 

깔끔하게 해결

 

 

 

 

 

 

 

3. 친구에게 메시지 보내기

 

 

또 선택할 게 남아있다.

 

 

선택 조건에 따른 API

템플릿 종류에 따라 메시지 구성 요소가 다르므로 메시지 구성 시, 기본 메시지 템플릿 구성 요소 및 예제를 참고합니다.

메시지 종류메시지 구성 방법호출 방법사용할 API

피드, 리스트, 위치, 커머스, 텍스트 기본 템플릿 공유하기 버튼을 추가하고 메시지 보내기 createDefaultButton()
피드, 리스트, 위치, 커머스, 텍스트 기본 템플릿 직접 만든 버튼으로 메시지 보내기 sendDefault()
피드, 리스트, 커머스 사용자 정의 템플릿 공유하기 버튼을 추가하고 메시지 보내기 createCustomButton()
피드, 리스트, 커머스 사용자 정의 템플릿 직접 만든 버튼으로 메시지 보내기 sendCustom()
스크랩 기본 템플릿 공유하기 버튼을 추가하고 메시지 보내기 createScrapButton()
스크랩 기본 템플릿 직접 만든 버튼으로 메시지 보내기 sendScrap()
스크랩 사용자 정의 템플릿 공유하기 버튼을 추가하고 메시지 보내기 createScrapButton()
스크랩 사용자 정의 템플릿 직접 만든 버튼으로 메시지 보내기 sendScrap()

 

우리가 사용하는 템플릿은 사용자 정의 템플릿이니

공유하기 버튼을 추가할지 직접 만든 버튼으로 메시지를 보낼지만 결정하면 된다.

 

나는

버튼을 그냥 받아와서

 <button onClick={shareKakao}>
        <img
          src="https://developers.kakao.com/assets/img/about/logos/kakaolink/kakaolink_btn_medium.png"
          alt="카카오링크 보내기 버튼"
        />
      </button>

 버튼을 클릭했을 때 보낼 수 있도록 할 예정.

 const shareKakao = () => {
    window.Kakao.Link.sendCustom({
      templateId: 72020, // 내가 만든 템플릿 아이디를 넣어주면 된다
    });
  };

요렇게 간단하게 연결해주었다.

 

 

 

 

에러

1.

Error: because the scheme does not have a registered handler.

because the scheme does not have a registered handler.

카카오톡 로그인을 다 구현한 것 같고.. 버튼을 클릭했는데!

이런 에러가 발생했으면...

개발자 콘솔을 닫고 (f12) 다시 실행히보자.

 

 

2.

ErrorCode(4002)가 뜨면

도메인을 추가해주면 된다

나는 localhost3000만 추가해놨었는데

3001로 들어가서 발생한 에러다...

정말 가지각색의 에러가 발생할 수 있다는걸 알았다.

 

 

 

😻

https://jindanpolicy.netlify.app/

이 웹을 만들면서 쓴 글입니다

 

 

 

🙇‍♀️

https://velog.io/@da__hey/React-React-Typescript%EB%A5%BC-%ED%86%B5%ED%95%B4-%EC%B9%B4%EC%B9%B4%EC%98%A4%ED%86%A1-%EB%A9%94%EC%8B%9C%EC%A7%80-%ED%94%8C%EB%9E%AB%ED%8F%BC-API-%EC%9D%B4%EC%9A%A9%ED%95%B4%EB%B3%B4%EA%B8%B0

 

 

 

 

 

 

 

 

 

 

반응형