만들고자 하는 것
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"이다. )
그럼 앱에서 보기를 누르자마자 메인화면이 실행되고 끝나는게 아니라, 상세페이지를 바로 볼 수 있게 된다.
이상 끝!
'개발 공부 기록하기 > - Android' 카테고리의 다른 글
왜 개발모드일때는 광고가 노출되지 않지? Failed to load ad: 3 (1) | 2019.01.02 |
---|---|
Intent로 인스타, 유튜브, 앱리뷰 실행시키기 (0) | 2019.01.02 |
Glide 메모리 줄이고 사이즈는 유지시키기 (0) | 2018.06.10 |
스플래시 화면에서 xml을 사용시 에러해결 (3) | 2018.02.28 |
[Android] Unknown Source가 뜰때 해결하기 (0) | 2017.12.09 |