본문 바로가기

안드로이드

[Android Studio] 카카오 링크 공유 API 사용하기!

728x90

 

 카카오 링크 공유 API 를 사용하는 법을 포스팅 해보겠습니다! 아래의 게시물이 정말 꼼꼼하게 자세히 포스팅하셨기 때문에 하다가 막혔던 부분에 대해서 좀 더 보완해서 올려 보도록 하겠습니다.

 

 

https://nezhitsya.tistory.com/21

 

 

[AOS] Android KakaoLink 카카오톡 공유하기 1 - 초기 설정

🐱 카카오 공유하기 기능 개발 요청 들어왔네요. 개발환경 세팅해주세요! 넵 🐶 🐱 카카오톡 공유와 카카오톡 메시지 두 가지가 있는데 공유로 부탁드려요! (무슨 차이지... 일단...) 넵..! 🐶

nezhitsya.tistory.com

 

 

카카오 개발문서에서도 아주 자세히 나와 있습니다. 

https://developers.kakao.com/docs/latest/ko/message/android-link

 

Kakao Developers

카카오 API를 활용하여 다양한 어플리케이션을 개발해보세요. 카카오 로그인, 메시지 보내기, 친구 API, 인공지능 API 등을 제공합니다.

developers.kakao.com

 

 

 

초기설정

 

0. 카카오 앱 등록은 넘어가도록 하겠습니다.

 

1. Gradle 설정

최신 버전 안드로이드 스튜디오에서는 settings.gradle에서 Android SDK 레파지토리를 설정해준다.

maven { url 'https://devrepo.kakao.com/nexus/content/groups/public/' }

 

2. 모듈 수준 build.gradle에 모듈 설정하기

kakaolink를 이용한 카카오톡 공유하기 기능을 사용할 것이기 때문에 하나의 모듈만 추가해주면 된다.

dependencies {
    // kakao link
    implementation "com.kakao.sdk:v2-share:2.11.2"
}

 

 

3. AndroidManifest.xml에 인터넷 사용 설정

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.sample">
 
    <!-- 인터넷 사용 권한 설정-->
    <uses-permission android:name="android.permission.INTERNET" />

    <application
    android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        ...

 

 

4. (선택) 프로가드 설정

코드 난독화를 사용할 경우 proguard-rules.pro 파일에 프로가드 설정을 추가해주면 된다.

-keep class com.kakao.sdk.**.model.* { <fields>; }
-keep class * extends com.google.gson.TypeAdapter

 

 

이제는 카카오에 등록해 놓은 내 어플리케이션에 가셔서 네이티브 앱 키를 가져와야합니다! 

 

이런식으로 string 에 저장을 해놓습니다. 하나는 kakao 가 붙은 네이티브 앱 키 하나는 그냥 네이티브 앱 키 입니다 

<string name="kakao_scheme" translatable="false">kakao네이티브앱키</string>
<string name="kakao_share_app_key" translatable="false">네이티브앱키</string>

 

 

메니페스트에 가셔서 링크를 클릭했을 때 데이터를 받아올 액티비티 안에 intent-filter 를 추가해 줍니다. 

string 으로 만들어 두었던  kakao + 네이티브 앱 키 를 가져와서 사용합니다.

<intent-filter>
    <action android:name="android.intent.action.VIEW" />
    <category android:name="android.intent.category.DEFAULT" />
    <category android:name="android.intent.category.BROWSABLE" />

    <data android:host="kakaolink"
        android:scheme="@string/kakao_scheme" />
</intent-filter>

 

 

개발 문서에 나와있는 것 처럼 초기화를 해줘야 합니다. 

 

https://developers.kakao.com/docs/latest/ko/getting-started/sdk-android#select-module

 

Kakao Developers

카카오 API를 활용하여 다양한 어플리케이션을 개발해보세요. 카카오 로그인, 메시지 보내기, 친구 API, 인공지능 API 등을 제공합니다.

developers.kakao.com

카카오 init 에 아까 string 으로 만들어 두었던 네이티브 앱 키 를 가져와서 사용합니다.

KakaoSdk.init(this, getString(R.string.kakao_share_app_key))

 

마지막으로 다시 카카오 Developer 내 어플리케이션으로 돌아가서 해쉬키를 등록해 주어야 합니다!

플랫폼으로 가신 후 릴리즈 해쉬키와 디버그 해쉬키를 추가해 주어야합니다! 

 

 

릴리즈 버전이 필요하신 분은 이 곳에서 참조해 주세요! 

https://nezhitsya.tistory.com/20

 

[AOS] Android Release key hash 발급하기

🤖 카카오 / 네이버 / 구글 API 사용할건가요? 예.... 🐶 🤖 해시 키 주세요. 예...? 🐶 🤖 주세요. Java KeyStore (JKS) SSL 암호화를 위해 쓰이는 key들을 모아놓은 파일로 형식은 .jks 또는 .keystore를 사

nezhitsya.tistory.com

 

디버그 버전은 카카오 개발문서에도 잘 나와있지만 영 모르시겠다 하시는 분은 밑에 링크를 참조해 주세요!

https://dev-donghwan.tistory.com/3

 

[Android] Hash Key (카카오 Api / 네이버 Api / 구글 Api)

2021-08-13 수정 Android에서 카카오, 네이버, 구글 Api를 연동할때, HashKey를 입력해 달라는 경우를 많이 볼 수 있습니다. 이런 경우 필요한 키의 종류는 Debug Key와 Release key가 있습니다. Debug Key와 Release

dev-donghwan.tistory.com

 

 

해쉬키 등록을 해줍니다. 

 

이제 설정은 끝났습니다. 이제 마지막으로 다시 안드로이드에 돌아와서 카카오 개발문서에 있는 템플릿을 이용하여서 필요한 부분을 가져와서 데이터를 가져다가 줄 수 있습니다! 카카오 링크 API 를 활용할 수 있습니다! 

 

private fun sendKakaoLink() {
    val defaultFeed = FeedTemplate(
        content = Content(
            title = "제목",
            description = Title,
            imageUrl = "https://mud-kage.kakao.com/dn/Q2iNx/btqgeRgV54P/VLdBs9cvyn8BJXB3o7N8UK/kakaolink40_original.png",
            link = Link(
                androidExecutionParams = mapOf("type" to "6", "route" to "main", "data" to "data")
            )
            // 콘텐츠를 클릭했을 때 
        ),
        buttons = listOf(
            Button(
                "자세히 보기",
                Link(
                    androidExecutionParams = mapOf("type" to "6", "route" to "main", "data" to "data")
                )
            )
            //버튼을 클릭했을 때
        )
    )
    if (ShareClient.instance.isKakaoTalkSharingAvailable(requireActivity())) {
        // 카카오톡으로 카카오톡 공유 가능
        ShareClient.instance.shareDefault(requireActivity(), defaultFeed) { sharingResult, error ->
            if (error != null) {
                Timber.e( "카카오톡 공유 실패", error)
            }
            else if (sharingResult != null) {
                Timber.d( "카카오톡 공유 성공 ${sharingResult.intent}")
                startActivity(sharingResult.intent)

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

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

        // 1. CustomTabsServiceConnection 지원 브라우저 열기
        // ex) Chrome, 삼성 인터넷, FireFox, 웨일 등
        try {
            KakaoCustomTabsClient.openWithDefault(requireActivity(), sharerUrl)
        } catch(e: UnsupportedOperationException) {
            // CustomTabsServiceConnection 지원 브라우저가 없을 때 예외처리
        }

        // 2. CustomTabsServiceConnection 미지원 브라우저 열기
        // ex) 다음, 네이버 등
        try {
            KakaoCustomTabsClient.open(requireActivity(), sharerUrl)
        } catch (e: ActivityNotFoundException) {
            // 디바이스에 설치된 인터넷 브라우저가 없을 때 예외처리
        }
    }
}

 

 

 

데이터 받기는 아까 메니페스트에서 intent-filter 를 등록한 곳 으로 가서 Log를 찍어보시길 바랍니다. ㅎㅎ 

if (Intent.ACTION_VIEW == intent.action) {
    val uri = intent.data
    if (uri != null) {
        uri.getQueryParameter(TYPE)
        uri.getQueryParameter(ROUTE)
        uri.getQueryParameter(DATA)
    }
}

 

이상입니다.