안녕하세요.
Android 및 iOS 로 카카오링크 2.3.0 을 사용중입니다.
친구에게 링크 전송 후 로그를 서버에 쌓기 위해 콜백 URL을 썼는데 수집이 되지 않아 문의 드립니다.
개발용 서버 URL을 타겟으로 했을 때는 콜백 URL 로그 수집에 성공했습니다.
그런데 배포를 위해 운영용 서버 URL로 바꾸니 로그 수집이 되지 않고 있습니다.
카카오링크 콜백 URL 호출이 잘 되고 있었는데 URL 주소를 바꾸자 더 이상 호출이 되지 않는 상황
작년에 이미 올렸던 질문인데 아직 해결이 되지 않은 상태라 다시 올립니다.
가능하면 위 링크의 댓글까지 확인 후 답변 주신다면 감사하겠습니다.
안녕하세요.
URL을 어떤 것으로 바꾸셨나요? (공개하시기 어려우시면 개인 메시지로 보내주세요 @woody.ho)
좀더 정확한 확인을 앱 ID도 부탁드립니다.
메시지 전송하실 때, serverCallbackArgs 파라메터 설정 하셨을까요?
네. serverCallbackArgs 로 필요한 값들 넣어서 보내고 있습니다.
본문에 쓴 것처럼 처음엔 콜백이 잘 들어오는 게 확인 됐는데, URL 을 바꾼뒤로는 콜백이 들어오지 않는 상황입니다.
azurewebsites 도메인으로 콜백은 17일까지 전송하였습니다.
오늘 발송하신 링크에는 serverCallbackArgs 파라메터 확인이 안되는데 구현하신 코드를 공유해주실 수 있을까요?
LinkClient.instance.customTemplate(context, templateId, serverCallbackArgs)
아래는 구현한 코드 입니다.
val linkParams = mapOf(
"MessageCd" to MOVEACTION.CONTENT.code,
"MessageType" to "102",
"TargetIndexNo" to (args.contentsNo ?: "")
)
val link = Link(
androidExecParams = linkParams,
iosExecParams = linkParams
)
val defaultFeed = FeedTemplate(
content = Content(
title = contentsDetail.ContentTitle,
imageUrl = contentsDetail.SharedImage,
link = link
),
social = Social(
likeCount = contentsDetail.LikeCnt.toInt(),
commentCount = (contentsDetail.CommCnt?.toInt()) ?: 0,
sharedCount = contentsDetail.SharedCnt.toInt()
),
buttons = listOf(
Button(
getString(R.string.common_view_detail),
link = link
)
)
)
val serverCallbackArgs = mapOf(
"InfoType" to userNo,
"ShareType" to "101",
"ContentNo" to (args.contentsNo ?: ""),
"ShareMsg" to "-"
)
if (LinkClient.instance.isKakaoLinkAvailable(context)) {
// 카카오톡 앱으로 공유
LinkClient.instance.defaultTemplate(context, defaultFeed, serverCallbackArgs) { linkResult, error ->
if (error != null) showToast(R.string.common_error_occurred)
else if (linkResult != null) {
startActivity(linkResult.intent)
}
}
} else {
// 카카오웹으로 공유
WebSharerClient.instance.defaultTemplateUri(defaultFeed, serverCallbackArgs).let {
KakaoCustomTabsClient.openWithDefault(context, it)
}
}
코드에 문제가 있어 보이지는 않습니다.
오늘 3번의 카카오링크를 사용하셨고, 이 중 serverCallbackArgs 가 포함된것은 5시 11분경 마지막에 보내신 한 건입니다.
이 전 두건은 동일한 코드로 보내시지 않은 것 같습니다만, 그대로 사용하셨다면 SDK 버전 업그레이드를 고려 부탁드립니다.
해당 메시지에 대해 콜백이 정상적으로 나갔으나 서비스측에서 400오류를 응답하셨습니다.
서비스측 오류메시지는 아래와 같습니다. 확인 부탁드립니다.
{"Message":"The request is invalid."}
혹시 확인하신 serverCallbackArgs 에 어떤 값들이 들어있었는지도 알려주실 수 있나요?
11시 13분 14초 경
serverCallbackArgs
{"InfoType":"cFVhZXJjenNkRlhiSThUeXdKbHhlZz09","ContentNo":"60","ShareMsg":"","ShareType":"101"}
11시 13분 15초 경 콜백 (queryString으로 전송)
{"HASH_CHAT_ID":"406e7d04be4e873486048fc9a501df2b","ContentNo":"60","ShareMsg":"","CHAT_TYPE":"MultiChat","InfoType":"cFVhZXJjenNkRlhiSThUeXdKbHhlZz09","ShareType":"101"}
{"InfoType":"cFVhZXJjenNkRlhiSThUeXdKbHhlZz09","ContentNo":"60","ShareMsg":"","ShareType":"101"}
이 파라미터 값이라고 가정하면 아래 모양대로 콜백이 가는 게 맞을까요?
[콜백 URL]?InfoType=bmdpdENDdEN2eG1DVzlScVBBRmRWZz09&ContentNo=1&ShareMsg=-&ShareType=101
일단 원인은 파악했습니다.
카카오에서 발송하는 콜백은 일반적인 GET 호출 형식으로 돼 있는데
[콜백 URL]?파라미터1=파라미터1값&파라미터2=파라미터2값& ...
저희 쪽 서버에서는 이런 형식으로 파라미터를 받고 있었네요.
[콜백 URL]/파라미터1값/파라미터2값/ ...
혹시나해서 여쭤보는데, 카카오에서 발송하는 콜백 파라미터 구조를 후자의 형태로 받을 수 있는 방법이 있을까요?
아래 문서에서 GET, POST 방식에서의 파라메터 구조를 확인하실 수 있습니다.
Sample 항목을 참고 부탁드립니다.
Kakao Developers
콜백 받는 쪽 파라미터 수신 구조를 바꾸어 해결했습니다.
도움 주셔서 감사합니다.