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

[kotlin] KaKao Link Share, 카카오톡 링크 공유하기 - 2

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

개발 환경

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

OS : Mac

개발 툴 : Android Studio

개발 언어 : Kotlin

targetSdk : 31

minSdk : 23

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

 

안녕하세요 전진시 입니당.

 

이번 포스팅 저번 포스팅에 이어 Android에서 카카오톡 링크 공유를 해볼거에요.

 

저번 포스팅에서 kakao link 공유를 위한 환경 셋팅을 끝냈으니 소스 구현을 해보겠습니다.

 

1. 먼저 템플릿을 구성합니다.

 

저는 kakao develop 사이트에서 feed sample을 사용하여 템플릿을 구성했습니다.

제 템플릿은 title, description, imageUrl, link(mobile url, web url)로 구성되어 있습니다.

옵션으로 표시되는 이미지 사이즈도 지정할 수 있습니다.

val defaultFeed = FeedTemplate(
    content = Content(
        title = title,
        description = description,
        imageUrl = imageUrl,
        link = Link(
            mobileWebUrl = webUrl,
            webUrl = webUrl
        ),
        imageWidth = 748,
        imageHeight = 478
    )
)

 

2. 다음 아래 소스를 이용하여 현재 디바이스가 카카오톡 링크 공유가 가능한지 확인합니다.

뭐 카카오톡 설치 여부 같은걸 확인하는 용도라고 생각하심 됩니다.

 

if (LinkClient.instance.isKakaoLinkAvailable(this)) {

 

위 값이 true로 떨어지면 생성한 템플릿으로 카카오톡 링크 공유를 실행해줍니다.

 

// 카카오톡으로 카카오링크 공유 가능
LinkClient.instance.defaultTemplate(this, defaultTemplate = defaultFeed) { linkResult, error ->
    if (error != null) {
        Log.e(Common.TAG_APP, "카카오링크 보내기 실패", error)
    } else if (linkResult != null) {
        Log.d(Common.TAG_APP, "카카오링크 보내기 성공 ${linkResult.intent}")
        startActivity(linkResult.intent)

        // 카카오링크 보내기에 성공했지만 아래 경고 메시지가 존재할 경우 일부 컨텐츠가 정상 동작하지 않을 수 있습니다.
        Log.w(Common.TAG_APP, "Warning Msg: ${linkResult.warningMsg}")
        Log.w(Common.TAG_APP, "Argument Msg: ${linkResult.argumentMsg}")
    }
}

 

false로 떨어지는 경우는 요건에 맞게 처리해주시면 됩니다. 저는 카카오톡이 없는 경우 외부 브라우저를 호출하여

카카오톡을 열게 했습니다.

 

 

[아래는 소스 전문입니다.]

val defaultFeed = FeedTemplate(
    content = Content(
        title = title,
        description = description,
        imageUrl = imageUrl,
        link = Link(
            mobileWebUrl = webUrl,
            webUrl = webUrl
        ),
        imageWidth = 748,
        imageHeight = 478
    )
)

if (LinkClient.instance.isKakaoLinkAvailable(this)) {
    // 카카오톡으로 카카오링크 공유 가능
    LinkClient.instance.defaultTemplate(this, defaultTemplate = defaultFeed) { linkResult, error ->
        if (error != null) {
            Log.e(Common.TAG_APP, "카카오링크 보내기 실패", error)
        } else if (linkResult != null) {
            Log.d(Common.TAG_APP, "카카오링크 보내기 성공 ${linkResult.intent}")
            startActivity(linkResult.intent)

            // 카카오링크 보내기에 성공했지만 아래 경고 메시지가 존재할 경우 일부 컨텐츠가 정상 동작하지 않을 수 있습니다.
            Log.w(Common.TAG_APP, "Warning Msg: ${linkResult.warningMsg}")
            Log.w(Common.TAG_APP, "Argument Msg: ${linkResult.argumentMsg}")
        }
    }
} else {
    // 카카오톡 미설치: 웹 공유 사용 권장
    // 웹 공유 예시 코드
    val sharerUrl = WebSharerClient.instance.defaultTemplateUri(defaultFeed)

    // CustomTabs으로 웹 브라우저 열기

    // 1. CustomTabs으로 Chrome 브라우저 열기
    try {
        KakaoCustomTabsClient.openWithDefault(this, sharerUrl)
    } catch(e: UnsupportedOperationException) {
        // Chrome 브라우저가 없을 때 예외처리
    }

    // 2. CustomTabs으로 디바이스 기본 브라우저 열기
    try {
        KakaoCustomTabsClient.open(this, sharerUrl)
    } catch (e: ActivityNotFoundException) {
        // 인터넷 브라우저가 없을 때 예외처리
    }
}
반응형

댓글