Android - Kakaolink를 활용하여 카톡으로 공유하기(V2) (Kotlin)

업데이트:

  • 연구주제 : Android - Kakaolink를 활용하여 카톡으로 공유하기(V2) (Kotlin)
  • 연구목적 : 안드로이드에서의 코틀린 활용
  • 연구일시 : 2020년 03월 26일 09:00~17:00
  • 연구자 : 이재환 ljh951103@naver.com
  • 연구장비 : HP EliteDesk 800 G4 TWR, Kotlin, Android studio, IntelliJ
  • 관련연구 : Java, Android, Kotlin, RecyclerView, Share, Kakaolink]


서론

앱에서 카카오톡으로 이동하여 카카오 링크를 전송할 수 있다.

image

이런 링크 많이 보았을 것이다. 이것이 카카오 링크를 활용한 것이다
V1 기준으로 작성된 예제들이 많던데 이제 V1 카카오링크는 활용할 수 없으므로 이번 글에서는 V2를 기준으로 다루겠다.
이제 카카오 링크 API를 활용하여 앱 링크를 전송해보자.


본론

개발자 계정 설정

우선 카카오톡 개발자 페이지에서 앱을 생성해야한다.

카카오 개발자 페이지

다음 페이지에서 앱을 만들고

image


일반 탭으로 이동하여 플랫폼 패키지에 대한 정보를 입력해준다.

image


그래들 설정

우선 앱 그래들에서 다음과 같이 링크 sdk를 추가한다.

//KAKAO SDK
implementation group: 'com.kakao.sdk', name: 'kakaolink', version: project.KAKAO_SDK_VERSION


그리고 프로퍼티의 마지막에 다음을 추가한다.

KAKAO_SDK_GROUP=com.kakao.sdk
KAKAO_SDK_VERSION=1.27.0


마지막으로 프로젝트 그래들에서도 sdk를 사용하기위해 다음과 같이 명시해준다.

subprojects {
    repositories {
        mavenCentral()
        maven { url 'http://devrepo.kakao.com:8088/nexus/content/groups/public/' }
    }
}


키 파일 생성

/res/values에 kakao_string.xml 파일을 생성하여 다음의 내용을 입력한다.
key는 조금 전에 개발자 페이지에서 확인했던 네이티브 키를 입력한다.

<resources>
    <string name="kakao_app_key">AAAAAAAAAAAAAAAAAAAAAA</string>
    <string name="kakao_scheme">kakaoAAAAAAAAAAAAAAAAAAAAAA</string>
    <string name="kakaolink_host">kakaolink</string>
</resources>


매니페스트 추가

다음과 같이 권한을 추가하고

<uses-permission android:name="android.permission.INTERNET"/>


사용하는 액티비티 안에 앱을 호출하기위한 스키마를 추가한다.

...

<activity
    android:name=".PhotoViewPager"
    android:theme="@style/PhotoTheme">
    <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:scheme="@string/kakao_scheme"
            android:host="@string/kakaolink_host"/>
    </intent-filter>
</activity>
<meta-data
    android:name="com.kakao.sdk.AppKey"
    android:value="@string/kakao_app_key" />

...


템플릿 추가

특정 버튼과 연결하여 공유할 템플릿 소스를 다음의 예제로 입력해준다.

fun kakaoLink() {
        val params = FeedTemplate
            .newBuilder(
                ContentObject.newBuilder(
                        "디저트 사진",
                        "http://mud-kage.kakao.co.kr/dn/NTmhS/btqfEUdFAUf/FjKzkZsnoeE4o19klTOVI1/openlink_640x640s.jpg",
                        LinkObject.newBuilder().setWebUrl("https://developers.kakao.com")
                            .setMobileWebUrl("https://developers.kakao.com").build()
                    )
                    .setDescrption("아메리카노, 빵, 케익")
                    .build()
            )
            .setSocial(
                SocialObject.newBuilder().setLikeCount(10).setCommentCount(20)
                    .setSharedCount(30).setViewCount(40).build()
            )
            .addButton(
                ButtonObject(
                    "웹에서 보기",
                    LinkObject.newBuilder().setWebUrl("https://developers.kakao.com").setMobileWebUrl(
                        "https://developers.kakao.com"
                    ).build()
                )
            )
            .addButton(
                ButtonObject(
                    "앱에서 보기", LinkObject.newBuilder()
                        .setWebUrl("'https://developers.kakao.com")
                        .setMobileWebUrl("https://developers.kakao.com")
                        .setAndroidExecutionParams("key1=value1")
                        .setIosExecutionParams("key1=value1")
                        .build()
                )
            )
            .build()

        val serverCallbackArgs: MutableMap<String, String> =
            HashMap()
        serverCallbackArgs["user_id"] = "\${current_user_id}"
        serverCallbackArgs["product_id"] = "\${shared_product_id}"

        KakaoLinkService.getInstance().sendDefault(
            this,
            params,
            serverCallbackArgs,
            object : ResponseCallback<KakaoLinkResponse?>() {
                override fun onFailure(errorResult: ErrorResult) {
                    //Logger.e(errorResult.toString())
                }

                override fun onSuccess(result: KakaoLinkResponse?) { // 템플릿 밸리데이션과 쿼터 체크가 성공적으로 끝남. 톡에서 정상적으로 보내졌는지 보장은 할 수 없다. 전송 성공 유무는 서버콜백 기능을 이용하여야 한다.
                }
            })
    }


결론

이제 버튼을 활성화 하여 위의 예제 메소드를 호출하면 링크가 제대로 전송되어 공유가 될 것이다!


향후과제


참고자료

https://thisisspear.tistory.com/52?category=823575
https://developers.kakao.com/docs/android/kakaotalk-link


Writer: Jae-Hwan Lee

댓글남기기