본문 바로가기
개발 공부 기록하기/- Android

[Android] KakaoLink Deep하게 사용하기

by soulduse 2018. 7. 16.
반응형


만들고자 하는 것 


1. 카카오링크를 사용해서 내 앱을 공유한다.

2. 공유된 링크를 타고 앱으로 접근하면 내가 보여주고자 하는 특정 페이지로 바로 이동시킨다.


카카오링크를 보자 

https://developers.kakao.com/docs/android/kakaotalk-link


시작하기 전에 설정할 값들은 참고해서 진행하자

https://developers.kakao.com/docs/android/kakaotalk-link#시작하기-전에



기본적인 세팅이 다 되었다면 아래와 같이 준비가 되었을 것이다.

1. kakao_strings.xml 생성완료.

2. AndroidManifest.xml 값 추가 완료


여러가지 카카오링크 템플릿이 존재하는데, 여기서 FeedTemplate를 사용해서 적용해보겠다.


/**
* 카카오 공유 눌렀을 때 처리 하는 클래스
*/
object KakaoLinkProvider {
private const val KAKAO_BASE_LINK = "https://developers.kakao.com"

// 공유하기 눌렀을 때 처리
fun sendKakaoLink(context: Context, board: Board){
val params = FeedTemplate
.newBuilder(ContentObject.newBuilder("해루질러",
board.picture?: "",
LinkObject.newBuilder()
.setWebUrl(KAKAO_BASE_LINK)
.setMobileWebUrl(KAKAO_BASE_LINK)
.build())
.setDescrption(ShareUtil.getFirstContent(board.content))
.build())
.setSocial(
SocialObject.newBuilder()
.setLikeCount(board.likeCount.toInt())
.setCommentCount(board.commentsCount).build()
)
.addButton(ButtonObject("앱에서 바로 확인", LinkObject.newBuilder()
.setWebUrl(KAKAO_BASE_LINK)
.setMobileWebUrl(KAKAO_BASE_LINK)
.setAndroidExecutionParams("board_id=${board.id}")

.build()))
.build()

// 상세페이지 접근 리스너
KakaoLinkService.getInstance().sendDefault(context, params, object : ResponseCallback<KakaoLinkResponse>() {
override fun onFailure(errorResult: ErrorResult) {
context.toast("존재하지 않는 게시판 입니다.")
}

override fun onSuccess(result: KakaoLinkResponse) {
}
})
}
}

코드중 눈여겨 봐야할 점은 아래의 코드이다.

데이터 형식은 "key1=value1" 로 작성하면된다.  

아래에서는 파라미터를 board_id=id 값으로 넘겨주었다.

.setAndroidExecutionParams("board_id=${board.id}")


공유하기를 누를 경우 아래와 같이 카카오톡으로 공유가 되는데,



앱에서 바로 확인을 눌렀을때 해당 앱에 MainActivity만 뜨고 끝나는게 아니라 내가 원하는 파라미터를 넘겨서

MainActivity에서 그 해당 값을 받았을 경우 내가 원하는 페이지로 StartActivity를 해주면 되는 것이다.


그럼 MainActivity가 실행될 때 데이터는 어떻게 받을까?



AndroidManifest.xml을 다시보자

<activity android:name=".ui.main.MainActivity">
<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>

action 값이 <action android:name="android.intent.action.VIEW"/> 으로 전달되는 것을 알 수 있다. 





MainActivity.kt

if(intent.action == Intent.ACTION_VIEW) {
val boardId = intent.data.getQueryParameter(GotoDetailBoard.QUERY_BOARD_ID).toLong()

GotoDetailBoard.go(this, boardId) // startActivity to DetailActivity

}

Intent 값이 ACTION_VIEW 형태로 실행되었는지 체크하고, uri로부터 parameter를 가져온다.

이후에 받은 BoardId(게시판 번호)를 가지고 DetailActivity를 실행시키면 된다.

(여기서 GotoDetailBoard.QUERY_BOARD_ID 의 값은 "board_id"이다. )


그럼 앱에서 보기를 누르자마자 메인화면이 실행되고 끝나는게 아니라, 상세페이지를 바로 볼 수 있게 된다.


이상 끝!

반응형