Swift 에 카카오링크(Kakao.Link.sendDefault) 적용이 안됩니다. ㅡ.ㅡ

function sendLink_kakao(obj_btn) {	// edit_20210720
	try {
		var key = obj_btn.attr("data_access_key_java");
		Kakao.init(key);	// init 은 한 번만해야 하므로...
	} catch(e) { }
	var i, v_desc = "", v_imageUrl = "";
	var v_title = obj_btn.attr("data_sns_title");
	var v_url = obj_btn.attr("data_our_base_url");		//var v_url = obj_btn.attr("data_short_url");
	if ($('body').hasClass('isApp') && $('body').hasClass('isIos')) {
		// 여기에 ios 앱으로 전달한다.
		var obj_etc = {
			action: "kakaoShare"
			, key: key
			, title: v_title
			, description: v_desc
			, imageUrl: v_imageUrl
			, link: v_url
		};
		window.webkit.messageHandlers.MyIOSHandler.postMessage(obj_etc);
	} else {
		Kakao.Link.sendDefault({
			objectType: 'feed',
			content: {
				title: v_title,
				description: v_desc,
				imageUrl: v_imageUrl,
				link: {
					mobileWebUrl: v_url,
					webUrl: v_url,
				},
			},
		});
	}
}

html 의 카카오톡 이미지를 클릭하면 위 메소드가 호출됩니다.
iOS 앱을 제외한 안드로이드 앱, 안드로이드폰의 웹브라우즈, 아이폰의 사파리에서는 위 메소드의 Kakao.Link.sendDefault({ 에 의해 카카오톡 링크가 제대로 됩니다.
구글링해서 찾아 보았지만 명확한 답이 없어 이렇게 도움을 요청합니다.

아래와 같이 해 보았습니다.
pod ‘KakaoSDK’
pod update
설치가 정상적으로 되었습니다.

info.plist 에서
LSApplicationQueriesSchemes 아래에
kakaolink 를 추가

ViewController.swift 에 아래를 추가함

import KakaoSDKCommon       // for kakao
import KakaoSDKShare        // for kakao
import KakaoSDKTemplate
import KakaoSDKTalk
... ...
extension ViewController: WKScriptMessageHandler {  // for web's javascript -> ios app  add_2021040301
    func userContentController(_ userContentController: WKUserContentController, didReceive message: WKScriptMessage) {
        if message.name == "MyIOSHandler" {
            if let dictionary: [String: String] = message.body as? Dictionary {
                if let action = dictionary["action"] {
                    if action == "kakaoShare"
                                , let key = dictionary["key"]
                                , let title = dictionary["title"]
                                , let description = dictionary["description"]
                                , let imageUrl = dictionary["imageUrl"]
                                , let link = dictionary["link"] {
                        KakaoSDK.initSDK(appKey: key)    // Kakao SDK 초기화
                        
                        let linkObject = Link(webUrl: URL(string: link), mobileWebUrl: URL(string: link))
                        
                        let content = Content(title: title,
                                              imageUrl: URL(string: imageUrl)!,
                                              description: description,
                                              link: linkObject)
                        
                        let template = FeedTemplate(content: content, buttons: nil)
                                    
                        //메시지 템플릿 encode
                        if let templateJsonData = (try? SdkJSONEncoder.custom.encode(template)) {
                            
                            //생성한 메시지 템플릿 객체를 jsonObject로 변환
                            if let templateJsonObject = SdkUtils.toJsonObject(templateJsonData) {
                                ShareApi.shared.shareDefault(templateObject:templateJsonObject) {(linkResult, error) in
                                    if let error = error {
                                        print("error : \(error)")
                                    }
                                    else {
                                        print("defaultLink(templateObject:templateJsonObject) success.")
                                        guard let linkResult = linkResult else { return }
                                        UIApplication.shared.open(linkResult.url, options: [:], completionHandler: nil)
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}

이렇게 했는데 앱 실행시 이상한 에러가 나는데… 제가 작업한 pod 부터 userContentController 메소드까지… 어디가 잘못된 걸까요?
Xcode 는 14.2 입니다. 맥이 2015년이라 맥OS 와 Xcode 업데이트가 안됩니다.
아래는 에러 내용입니다.
Undefined symbol: _swift_FORCE_LOAD$_swiftCompatibility56

고수님들의 조언부탁합니다.

윗부분 코드는 JS SDK 로 보이고 SDK 버전도 오래된 함수를 호출하는 듯하네요.
아래 부분 코드는 Native iOS SDK 인데…

두코드간 연관관계를 이해하지 못했습니다.
웹뷰에서 띄운 Html에서 카카오톡 공유가 안되어 아래 코드를 시도하신거라면,
윗부분 코드의 JS SDK를 최신버전으로 교체하셔서 사용해보시면 좋을 것같아요.

1개의 좋아요

말씀하시는 용어를 기준으로 다시 설명 드리자면…
처음에는 JS SDK 밖에 없었습니다. 그리고 JS SDK 의 iOS 호출부분의 if 문도 없었구요…
단지 iOS 앱에서만 JS SDK 의 “Kakao.Link.sendDefault” 에 의해 링크가 되지 않았습니다.
그래서 얘를 체크하여 iOS 앱에서 클릭되었으면? 이라는 if 문을 추가해서 앱의 SDK 를 이용하게 수정을 했습니다.

JS SDK 가 오래된 버전이라고 하셨는데… 혹시 Kakao.Share.sendDefault 형태로 해 보라는 말씀이신지요?
방금 아래에서 확인 했습니다.
https://developers.kakao.com/docs/latest/ko/message/js-link

답변 감사합니다.

Kakao.Link.sendDefault 부분에서 “Link” 를 “Share” 로 바꾸니 바로 되네요…

감사합니다.

1개의 좋아요