카카오톡 공유 웹훅 사용 시 공유 완료 여부 확인 및 클라이언트 처리 방식 문의

SDK → kakao_js_sdk/2.8.1/kakao.min.js

안녕하세요.

JavaScript SDK의 Kakao.Share.sendDefault()와 카카오톡 공유 웹훅을 이용하여 사용자의 실제 공유 성공 여부를 확인하는 기능을 구현하고 있습니다.

현재 아래와 같은 방식으로 구성하고 있습니다.

  1. 공유 요청 시 서버에서 공유 요청 건을 생성하고 고유한 shareReqId를 발급
  2. Kakao.Share.sendDefault() 호출 시 serverCallbackArgsshareReqId를 전달
  3. 카카오톡 공유가 정상적으로 완료되면 웹훅을 통해 서버 DB의 해당 요청 건을 성공 상태로 변경하고 CHAT_TYPE 저장
  4. 클라이언트에서 별도의 결과 조회 API를 호출하여 웹훅 수신 여부와 CHAT_TYPE을 확인

여기서 4번의 결과 조회 API를 어느 시점부터 호출하는 것이 일반적인 구현 방식인지 궁금합니다.

Kakao.Share.sendDefault() 호출 직후부터 1초 간격으로 30~60초 정도 폴링하는 방법을 고려했으나, 사용자마다 카카오톡에서 채팅방을 선택하고 실제 공유를 완료하기까지 걸리는 시간이 달라 적절한 타임아웃 시간을 정하기 어렵습니다.

그래서 현재는 카카오톡 공유 화면으로 이동한 후 사용자가 다시 기존 웹/웹뷰 화면으로 복귀한 시점을 감지하고, 복귀한 시점부터 결과 조회 API 폴링을 시작하는 방식을 검토하고 있습니다.

다만 웹 브라우저뿐 아니라 WebView 환경도 고려해야 해서 visibilitychange, focus 등의 이벤트만으로 화면 복귀 시점을 안정적으로 판단할 수 있을지도 고민되는 상황입니다.

궁금한 점은 다음과 같습니다.

  • Kakao.Share.sendDefault() + 공유 웹훅을 사용하는 경우, 클라이언트에서 실제 공유 성공 여부를 확인하는 일반적이거나 권장되는 구현 방식이 있는지 궁금합니다.
  • 공유 호출 직후 일정 시간 동안 폴링하는 방식과, 사용자가 카카오톡에서 기존 화면으로 복귀한 후 폴링을 시작하는 방식 중 권장되는 방식이 있을까요?
  • JavaScript SDK에서 카카오톡 공유 완료 또는 취소 후 기존 화면으로 복귀했다는 것을 확인할 수 있는 별도의 이벤트나 콜백을 제공하는지 궁금합니다.
  • WebView 환경까지 고려할 경우 공유 완료 여부를 확인하기 위해 권장되는 처리 방식이 따로 있는지도 궁금합니다.
  • 최종적으로 웹훅 수신 여부와 CHAT_TYPE을 클라이언트에서 확인해야 하는 경우, 별도의 결과 조회 API를 폴링하는 것 외에 카카오에서 권장하는 방식이 있는지도 궁금합니다.

공유 성공 여부를 웹훅으로 판단해야 한다는 점은 이해하고 있으며, 웹훅 결과를 클라이언트 화면에 반영해야 할 때 일반적으로 어떤 흐름으로 구현하는지가 가장 궁금합니다.

감사합니다.

[ @tim.l @woody.ho ]

안녕하세요.

고유한 shareReqId 발급의 경우 이용자의 카카오톡 공유하기 버튼 클릭 이후 서버에서 채번 되고난 뒤 이용되는 내용인가요?

네, 맞습니다.

이용자가 카카오톡 공유하기 버튼을 클릭하면 먼저 저희 서버의 공유 요청 생성 API를 호출하여 고유한 shareReqId를 발급하고 있습니다.
이후 발급받은 shareReqId를 Kakao.Share.sendDefault()의 serverCallbackArgs에 설정하여 공유하기를 호출하는 구조입니다.

현재 흐름은 아래와 같습니다.

  1. 이용자가 카카오톡 공유하기 버튼 클릭
  2. 저희 서버의 공유 요청 생성 API 호출
  3. 서버에서 고유한 shareReqId 발급 및 DB 저장 (WAITING 상태)
  4. Kakao.Share.sendDefault() 호출
    • serverCallbackArgs에 shareReqId 전달
  5. 이용자가 카카오톡에서 공유 완료
  6. 카카오 공유 웹훅 수신
  7. 웹훅으로 전달받은 shareReqId를 기준으로 해당 요청을 SUCCESS 상태로 변경
  8. 클라이언트에서 별도의 결과 조회 API를 통해 웹훅 수신 여부 및 CHAT_TYPE 확인

현재 문의드리는 부분은 4번 이후 이용자가 실제 카카오톡 공유를 완료한 시점을 클라이언트에서 알 수 없기 때문에
8번의 결과 조회를 어느 시점부터 시작하는 것이 일반적인지에 대한 부분입니다.

안녕하세요.

앞서 문의 드린 내용의 이유는

버튼 클릭 이후 다른 비동기 작업을 실행 한 뒤 카카오톡 공유하기 기능을 사용하게 되면,
브라우저 정책에 따라 PC에서는 톡 공유 팝업이 차단되거나 iOS 모바일에서는 유니버셜링크 동작이 막히게 되기 때문인데요. 이렇게 되면 톡 공유를 시도하지 않고 이탈하는 이용자가 생기기 때문에 shareReqId는 사전에 발급하시어 사용하시는 것이 좋을것 같습니다.


추가로, 본래 문의 주셨던 웹훅 전달 여부 확인을 위한 폴링 구현의 경우

일반적으로는 이용자의 공유 행위와 이를 검증할 웹훅을 한 동선으로 묶지 않습니다.
예외적으로 이용자 동선에서 즉각적인 리워드 지급을 하고자 하는 서비스의 경우 웹훅 체크를 위해 자체적인 폴링을 하기도 하지만, 이 경우 말씀 처럼 이용자가 톡 공유하는데 시간이 다소 걸리거나 또는 아예 하지 않고 돌아올 수 있기에 어느 시점으로 시작할지 구분하시기 보다는 간격 조정과 최대 횟수를 적절히 정하시는 것이 좋을것 같습니다.

다만, 어느 정도가 적절한지는 서비스가 감당할 수 있는 수준에 따라 결정되기에 따로 권장 드리는 수치는 없는점 참고 부탁드립니다.

그 외, JavaScript SDK에서의 공유 성공 여부 확인의 경우 웹 브라우저 특성상 앱에서 일어난 일을 전달할 수 없기에 필요하신 경우 말씀처럼 직접 폴링 구현을 통해 확인하셔야 합니다.