카카오 공유하기 콜백 관련 문의

Nextjs 14, ID 1119574

안녕하세요. 카카오 공유하기를 통해 편지를 전달하는 기능을 개발 중에 있는 프론트 개발자입니다.
카카오 공유하기를 적용하는 과정에서 한 가지 의문점이 있어 이렇게 질문드립니다.

현재 편지 전송하기 버튼을 누르면, 서버 API를 통해 편지를 받을 사용자명과 내용 등이 DB에 저장되고, 그 응답값으로 받은 편지 ID를 가지고 카카오 공유하기 시 카톡을 받은 유저가 들어갈 경로를 설정하고 있습니다. 이때 카카오 공유하기 성공 여부에 따라서 저희 서비스 내의 경로 이동을 다르게 하려고 합니다.

카카오 공유하기가 성공할 경우 /send/complete 경로로 이동해 편지 공유가 완료되었음을 알려주고, 카카오 공유하기가 모종의 이유로 실패하였을 경우 에러 페이지로 이동시키고자 합니다.

찾아보니 이 공유 성공, 실패 응답은 카카오 공유하기 콜백함수를 통해 얻어올 수 있는 것 같습니다. 제가 공식 문서를 읽고 이해한 바로는,

콜백함수 url (서버의 API url) 을 설정해주고 , 프론트 자바스크립트에서 serverCallbackArgs로 설정한 파라미터 정보를 아까 설정한 서버의 get 또는 post API로 성공 여부와 함께 전달합니다. 그럼 서버의 데이터베이스에는 공유하기 성공 여부를 저장할 수 있습니다.

이때, 그렇다면 클라이언트는 이 성공 여부를 카카오 공유하기 버튼을 클릭한 즉시 어떻게 받아올 수 있는지가 의문입니다. 서버로 성공 응답이 전송된다한들, 이를 클라이언트가 요청하지 않으면 서버에서는 응답을 해줄 수가 없기 때문입니다. 혹시 소켓이 필요한 기능인건지, 제가 구현을 원하는 공유하기 성공 여부에 따른 프론트엔드에서의 웹페이지 경로 이동이 불가능한 것인지 궁금해 이렇게 질문을 남깁니다.

답변 기다리겠습니다. 감사합니다:)

*아래 코드는 임시로 카카오 공유하기 성공/실패 (실패라함은 유저가 의도적으로 공유 프로세스를 벗어나는 경우도 포함합니다) 에 따른 페이지 이동이 아닌, 타이머를 활용해 n 초 이상 시 무조건 경로를 이동하도록 구현한 코드입니다.


const handleSendLetterAndShare = async () => {
    /* 편지 전송 및 카카오 공유 */
    try {
      // 1. 편지 전송 API 요청
      if (!letterId) {
        const response = await postSendLtter({
          draftId,
          receiverName,
          content,
          images,
          templateType,
        });
        console.log("편지 쓰기 성공");
        setLetterId(response.data.letterCode);

        // 2. 카카오 공유 로직 실행
        if (isKakaoLoaded && response.data.letterCode) {
          setTimeout(() => {
            const { Kakao, location } = window;
            Kakao.Share.sendScrap({
              requestUrl: location.origin + location.pathname,
              templateId: 112798,
              templateArgs: {
                senderName: name,
                id: response.data.letterCode,
              },
            });
          }, 1000);
          setTimeout(() => {
            router.push("/send/complete");
          }, 8000);
        }
      }
    } catch (error) {
      console.log("편지 전송 또는 카카오 공유 실패:", error);
    }
  };

안녕하세요.
프론트에서는 실행 성공 여부만 확인 가능하고
전송 성공은 콜백 수신 이후 백엔드호출로 조회 하시면됩니다.

다만, 비동기전송에 비동기 콜백이므로
말씀하신것 처럼 이용자 화면 분기처리 할 수없습니다.(또는 서버에 결가가 올때까지 폴링하며 대기 해야하는데 이는 추천하지 않습니다)

일반적인 전송 실패는 카카오측에서 에러표기하므로 스크립트 에러에 대한 분기만 하시면 좋을 것 같습니다.

감사합니다.

혹시 프론트로 전송 성공이 아닌 실행 성공 여부를 받아온다는 건 서버 API가 필요 없이 카카오와 클라이언트 측의 통신만으로 가능하다는 것일까요? 콜백함수 url이 의미하는 게 서버의 API 주소로 이해했는데 그게 아니라 클라이언트의 주소인걸까요… 실행 성공 여부를 서버 없이 카카오로부터 어떻게 받아와야 하는지 모르겠습니다.

안녕하세요

프론트에서 전송 시도 성공 여부 확인은 현재 지원하지 않는 스팩입니다.
(구버전 PC에서만 가능함)

카카오톡 공유하기의 경우 모바일에서는 카카오톡을 실행하여 처리되기에 시도 및 성공여부를 프론트에서 확인할 수 없고 콜백을 통해서만 확인 가능합니다. 이러한 이유로 JS SDK v2 부터는 PC 에서 스크립틍 실행 성공 여부 callback은 지원하고 있지 않습니다.