카카오 링크 공유 API 를 사용하는 법을 포스팅 해보겠습니다! 아래의 게시물이 정말 꼼꼼하게 자세히 포스팅하셨기 때문에 하다가 막혔던 부분에 대해서 좀 더 보완해서 올려 보도록 하겠습니다.
https://nezhitsya.tistory.com/21
카카오 개발문서에서도 아주 자세히 나와 있습니다.
https://developers.kakao.com/docs/latest/ko/message/android-link
초기설정
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
카카오 init 에 아까 string 으로 만들어 두었던 네이티브 앱 키 를 가져와서 사용합니다.
KakaoSdk.init(this, getString(R.string.kakao_share_app_key))
마지막으로 다시 카카오 Developer 내 어플리케이션으로 돌아가서 해쉬키를 등록해 주어야 합니다!
플랫폼으로 가신 후 릴리즈 해쉬키와 디버그 해쉬키를 추가해 주어야합니다!
릴리즈 버전이 필요하신 분은 이 곳에서 참조해 주세요!
https://nezhitsya.tistory.com/20
디버그 버전은 카카오 개발문서에도 잘 나와있지만 영 모르시겠다 하시는 분은 밑에 링크를 참조해 주세요!
https://dev-donghwan.tistory.com/3
해쉬키 등록을 해줍니다.
이제 설정은 끝났습니다. 이제 마지막으로 다시 안드로이드에 돌아와서 카카오 개발문서에 있는 템플릿을 이용하여서 필요한 부분을 가져와서 데이터를 가져다가 줄 수 있습니다! 카카오 링크 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)
}
}
이상입니다.
'안드로이드' 카테고리의 다른 글
[Android Studio] 사진 가져오기, 사진 찍은 후 Crop 하기 1편 ! (Kotlin) (0) | 2023.04.11 |
---|---|
[Android Studio] CharSequence 와 String 비교하는 법 Kotlin. (0) | 2023.03.28 |
[Android Studio] ParselableArrayList 로 Intent 하는 법! (Kotlin) (0) | 2023.03.17 |
[Android studio] ViewPager2, CircleIndicator3 사용하기! (Kotlin) (0) | 2023.03.01 |
[Android Studio] TimeUnit 시간 계산 (Kotlin) (0) | 2023.03.01 |