본문 바로가기
개발노트/iOS

[Swift] KaKao Link Share, 카카오톡 링크 공유하기

by 전지적진영시점 2023. 2. 27.
반응형

개발 환경

---------------------------------

OS : Mac

개발 툴 : xcode

개발 언어 : Swift

xcode version : 14.2

min iOS version : 13.0 

---------------------------------

 

안녕하세요 전진시 입니다

 

이번 포스팅 주제는 iOS에서 카카오톡 링크 공유를 해볼겠습니다.

 

일단 카카오 개발자 사이트에 프로젝트 생성하여 앱 package name 및 hash 값 등록했다는 전제하에 내용 작성하겠습니다.

Native Key까지 가져온 상태로요 :D

 

제가 구현한 Kakao Link 공유는 webView에서 카카오톡 링크 버튼을 클릭하면 

javaScript 통신으로 앱 함수를 호출하여 필요한 값들을 앱에 전달하여 작업하였습니다. 

 

1. 프로젝트에 kakao link를 사용할 수 있도록 패키지를 추가해 주겠습니다.

 

file -> add package 에 들어가서 kakao를 검색하고

아래 이미지처럼 Kakao-ios-sdk가 뜬다면 플젝에 추가해줍시다.

 

2. Appdelegate 파일에 Kakao Develop 사이트에서 발급받은 native key를 등록하는 작업을 해줍니다.

 

"전진시" 부분에 복사한 NativeKey를 넣어줍니다.

 

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
        // Override point for customization after application launch.
        
        KakaoSDK.initSDK(appKey: "전진시")
        
        return true
    }

 

3. 카카오 링크 공유하기 소스를 구현할 파일에 라이브러리를 import 해줍니다.

 

맨 위에 있는 KakaoSDKTemplate 는 카카오 링크 공유시 template을 사용해서 보낼건데 그때 사용할겁니다

 

import KakaoSDKTemplate
import KakaoSDKCommon
import KakaoSDKShare

 

 

 

 

 

4. 소스 구현

if ShareApi.isKakaoTalkSharingAvailable() {
            let link = Link(webUrl: URL(string:url),
            mobileWebUrl: URL(string:url))
            
            var imageUrlString = ""
            
            if imageUrl == "" {
                imageUrlString = "default url"
            } else {
                imageUrlString = imageUrl
            }
            
            imageUrlString = imageUrlString.addingPercentEncoding(withAllowedCharacters: .urlQueryAllowed)!
            
            let content = Content(title: title,
                                  imageUrl: URL(string: imageUrlString)!,
                                    description: description,
                                    link: link)
            
            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)
                        }
                    }
                }
            }
        }

 

[소스 설명]

 

ShareApi.isKakaoTalkSharingAvailable()

위 코드는 카카오톡 공유가 가능한지 bool 값으로 return 해줍니다.

 

let content = Content(title: title,
                                  imageUrl: URL(string: imageUrlString)!,
                                description: description,
                                link: link)
            
let template = FeedTemplate(content: content, buttons: nil)

 

이 부분은 카카오 링크 템플릿을 생성합니다.

 

 

 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)
            }
        }
    }
}

 

이 부분은 위에서 만든 template을 encode하고 json 객체로 변환시켜 준 후 카카오톡을 열어줍니다.

 

이상 !

반응형

댓글