카카오링크 .defulatLink() 에서 응답을 받지 못하고 있습니다

v1에서 v2인 KakaoSDK 2.5.2 로 마이그레이션 작업중입니다.
현재 LinkApi.defaultLink 를 통해 템플릿을 담아 공유를 시도했으나 completion 블럭에 error를 포함 아무런 응답을 받지 못하고 있습니다.

디버그를 통해 아래 KakaoSDKCommon.shared.appKey() 에서 Appdelegate 에서 init해준 kakao app key가 정상적으로 들어가는 것을 확인했습니다. 테스트를위해 사용한 모바일 기기는 카카오가 설치되어 있고 또한 Android 에서는 정상적으로 링크 공유가 되고있습니다.

MessageService.swift

if let feedTemplateJsonData = (try? SdkJSONEncoder.default.encode(feedTemplate)) {
            
            //생성한 메시지 템플릿 객체를 jsonObject로 변환
            if let templateJsonObject = SdkUtils.toJsonObject(feedTemplateJsonData) {
                LinkApi.shared.defaultLink(templateObject:templateJsonObject) {(linkResult, error) in
                    if let error = error {
                        print(error)
                    } else {
                        print("defaultLink(templateObject:templateJsonObject) success.")
                        
                        //do something
                        guard let linkResult = linkResult else { return }
                        UIApplication.shared.open(linkResult.url, options: [:], completionHandler: nil)
                    }
                }
            }
        }

LinkApi.swift

func defaultLink(templateObjectJsonString:String?,
                     serverCallbackArgs:[String:String]? = nil,
                     completion:@escaping (LinkResult?, Error?) -> Void ) {
        return API.responseData(.post,
                                Urls.compose(path:Paths.defalutLink),
                                parameters: ["link_ver":"4.0",
                                             "template_object":templateObjectJsonString].filterNil(),
                                headers: ["Authorization":"KakaoAK \(try! KakaoSDKCommon.shared.appKey())"],
                                sessionType: .Api,
                                apiType: .KApi) { [weak self] (response, data, error) in
                                    let strongSelf = self
                                    
                                    strongSelf?.transformResponseToLinkResult(response: response, data: data, serverCallbackArgs: serverCallbackArgs) { (linkResult, error) in
                                        if let error = error {
                                            completion(nil, error)
                                        }
                                        else {
                                            if let linkResult = linkResult {
                                                completion(linkResult, nil)
                                            }
                                            else {
                                                completion(nil, SdkError(reason:.Unknown, message: "linkResult is nil"))
                                            }
                                        }
                                    }
        }
    }

안녕하세요~

앱 ID 알려주시면 로그확인해보겠습니다~

AppID 는 221508 입니다~

넘어온 데이터를 보면 필수 항목이 모두 포함된 것 같은데요.

에러는 필수값이 없다는 에러인 것을 보면 jsonObject 문제가 있는것 같습니다.

jsonObject String log로 출력해서 공유해주시겠어요?

▿ 4 elements
  ▿ 0 : 2 elements
    - key : "objectType"
    - value : feed
  ▿ 1 : 2 elements
    - key : "social"
    ▿ value : 3 elements
      ▿ 0 : 2 elements
        - key : likeCount
        - value : 286
      ▿ 1 : 2 elements
        - key : sharedCount
        - value : 845
      ▿ 2 : 2 elements
        - key : commentCount
        - value : 45
  ▿ 2 : 2 elements
    - key : "content"
    ▿ value : 6 elements
      ▿ 0 : 2 elements
        - key : imageWidth
        - value : 0
      ▿ 1 : 2 elements
        - key : imageHeight
        - value : 0
      ▿ 2 : 2 elements
        - key : title
        - value : 딸기 치즈 케익
      ▿ 3 : 2 elements
        - key : imageUrl
        - value : http://mud-kage.kakao.co.kr/dn/Q2iNx/btqgeRgV54P/VLdBs9cvyn8BJXB3o7N8UK/kakaolink40_original.png
      ▿ 4 : 2 elements
        - key : description
        - value : #케익 #딸기 #삼평동 #카페 #분위기 #소개팅
      ▿ 5 : 2 elements
        - key : link
        ▿ value : 2 elements
          ▿ 0 : 2 elements
            - key : webUrl
            - value : https://developers.kakao.com
          ▿ 1 : 2 elements
            - key : mobileWebUrl
            - value : https://developers.kakao.com
  ▿ 3 : 2 elements
    - key : "buttons"
    ▿ value : 2 elements
      ▿ 0 : 2 elements
        ▿ 0 : 2 elements
          - key : title
          - value : 웹으로 보기
        ▿ 1 : 2 elements
          - key : link
          ▿ value : 2 elements
            ▿ 0 : 2 elements
              - key : webUrl
              - value : https://developers.kakao.com
            ▿ 1 : 2 elements
              - key : mobileWebUrl
              - value : https://developers.kakao.com
      ▿ 1 : 2 elements
        ▿ 0 : 2 elements
          - key : title
          - value : 앱으로 보기
        ▿ 1 : 2 elements
          - key : link
          ▿ value : 2 elements
            ▿ 0 : 2 elements
              - key : iosExecutionParams
              - value : key1=value1&key2=value2
            ▿ 1 : 2 elements
              - key : androidExecutionParams
              - value : key2=value2&key1=value1

이고 해당 json object 는 kakao developers 문서에 있는 샘플 코드입니다.

let link = Link(webUrl: URL(string:"https://developers.kakao.com"),
                mobileWebUrl: URL(string:"https://developers.kakao.com"))
let appLink = Link(androidExecutionParams: ["key1": "value1", "key2": "value2"],
                    iosExecutionParams: ["key1": "value1", "key2": "value2"])
let button1 = Button(title: "웹으로 보기", link: link)
let button2 = Button(title: "앱으로 보기", link: appLink)

let social = Social(likeCount: 286,
                    commentCount: 45,
                    sharedCount: 845)
let content = Content(title: "딸기 치즈 케익",
                        imageUrl: URL(string:"http://mud-kage.kakao.co.kr/dn/Q2iNx/btqgeRgV54P/VLdBs9cvyn8BJXB3o7N8UK/kakaolink40_original.png")!,
                        description: "#케익 #딸기 #삼평동 #카페 #분위기 #소개팅",
                        link: link)
let feedTemplate = FeedTemplate(content: content, social: social, buttons: [button1, button2])

//메시지 템플릿 encode
if let feedTemplateJsonData = (try? SdkJSONEncoder.custom.encode(feedTemplate)) {

json 데이터 그대로 정상작동하는지 테스트 한번 해보시겠어요?

    let feedTemplateJsonStringData =
        """
        {
            "object_type": "feed",
            "content": {
                "title": "딸기 치즈 케익",
                "description": "#케익 #딸기 #삼평동 #카페 #분위기 #소개팅",
                "image_url": "http://mud-kage.kakao.co.kr/dn/Q2iNx/btqgeRgV54P/VLdBs9cvyn8BJXB3o7N8UK/kakaolink40_original.png",
                "link": {
                    "mobile_web_url": "https://developers.kakao.com",
                    "web_url": "https://developers.kakao.com"
                }
            },
            "social": {
                "comment_count": 45,
                "like_count": 286,
                "shared_count": 845
            },
            "buttons": [
                {
                    "title": "웹으로 보기",
                    "link": {
                        "mobile_web_url": "https://developers.kakao.com",
                        "web_url": "https://developers.kakao.com"
                    }
                },
                {
                    "title": "앱으로 보기",
                    "link": {
                        "android_execution_params": "key1=value1&key2=value2",
                        "ios_execution_params": "key1=value1&key2=value2"
                    }
                }
            ]
        }
        """.data(using: .utf8)!

정상동작 확인했습니다! 감사합니다.

고급: 생성자를 사용해 메시지 만들기 는 왜 안 되는 건가요?

메시지를 구성하는 코드에 버그가 있을 것으로 예상됩니다. 카카오측 로그에는 필수값이 전달되지 않은 것으로 나왔습니다.

설정된 값을 하드코딩하여 디버깅 해보셔야할 것 같아요.

넵 확인 감사합니다.

1개의 좋아요