app의 build.gradle
dependencies {
...
implementation "com.kakao.sdk:v2-user:2.8.4" // 카카오 로그인
implementation "com.kakao.sdk:v2-talk:2.8.4" // 친구, 메시지(카카오톡)
implementation "com.kakao.sdk:v2-story:2.8.4" // 카카오스토리
implementation "com.kakao.sdk:v2-link:2.8.4" // 메시지(카카오링크)
implementation "com.kakao.sdk:v2-navi:2.8.4" // 카카오내비
}
setting.gradle
dependencyResolutionManagement {
repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS)
repositories {
google()
mavenCentral()
jcenter() // Warning: this repository is going to shut down soon
maven { url 'https://devrepo.kakao.com/nexus/content/groups/public/'}
}
}
MainActivity.kt
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import com.kakao.sdk.common.KakaoSdk
import android.app.Application
import android.content.Context
import android.content.res.Resources
import android.util.Log
import android.widget.Toast
import com.example.kakaoapitest.databinding.ActivityMainBinding
import com.kakao.sdk.link.LinkClient
import com.kakao.sdk.template.model.Content
import com.kakao.sdk.template.model.FeedTemplate
import com.kakao.sdk.template.model.Link
import com.kakao.sdk.user.model.User
class MainActivity : AppCompatActivity(), KakaoLogin.IKLoginResult {
lateinit var binding: ActivityMainBinding
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
binding = ActivityMainBinding.inflate(layoutInflater,null,false)
setContentView(binding.root)
KakaoSdk.init(this, "네이티브 앱 키")
kakaoLogin()
binding.button.setOnClickListener()
{
kakaoLink(this)
}
}
private fun kakaoLogin() {
KakaoLogin.instance.listener = this
KakaoLogin.instance.login(this)
}
fun kakaoLink(context : Context) {
val defaultFeed = FeedTemplate(
content = Content(
title = "테스트",
description = "테스트 내용",
imageUrl = "http://k.kakaocdn.net/dn/Q2iNx/btqgeRgV54P/VLdBs9cvyn8BJXB3o7N8UK/kakaolink40_original.png",
link = Link(
webUrl = "https://developers.kakao.com",
mobileWebUrl = "https://developers.kakao.com"
// androidExecParams = mapOf("1" to "안드로이드 폰 링크"),
// iosExecParams = mapOf("1" to "ios 폰 링크")
)
)
)
LinkClient.instance.defaultTemplate(context, defaultFeed) { linkResult, error ->
if (error != null) {
Log.e("TAG", "카카오링크 보내기 실패", error)
}
else if (linkResult != null) {
context.startActivity(linkResult.intent)
// 카카오링크 보내기에 성공했지만 아래 경고 메시지가 존재할 경우 일부 컨텐츠가 정상 동작하지 않을 수 있습니다.
Log.w("TAG", "Warning Msg: ${linkResult.warningMsg}")
Log.w("TAG", "Argument Msg: ${linkResult.argumentMsg}")
}
}
}
override fun onKakaoLoginResult(user: User?) {
Toast.makeText(this, "로그인성공",Toast.LENGTH_SHORT).show()
}
}
kakaoLogin.kt
import android.content.Context
import android.util.Log
import com.kakao.sdk.auth.model.OAuthToken
import com.kakao.sdk.user.UserApiClient
import com.kakao.sdk.user.model.User
class KakaoLogin
{
interface IKLoginResult
{
fun onKakaoLoginResult(user: User?)
}
var user:User? = null
var listener:IKLoginResult? = null
// 로그인 callback 구성
val callback: (OAuthToken?, Throwable?) -> Unit = { token, error ->
if (error != null) {
Log.e("TAG", "로그인 실패", error)
if(listener != null)
listener!!.onKakaoLoginResult(null)
}
else if (token != null)
{
Log.i("TAG", "로그인 성공 ${token.accessToken}")
UserApiClient.instance.me { user, error ->
if (error != null)
{
Log.e("TAG", "사용자 정보 요청 실패", error)
}
else if (user != null)
{
Log.i("TAG", "사용자 정보 요청 성공" +
"\n회원번호: ${user.id}" +
"\n이메일: ${user.kakaoAccount?.email}" +
"\n닉네임: ${user.kakaoAccount?.profile?.nickname}" +
"\n프로필사진: ${user.kakaoAccount?.profile?.thumbnailImageUrl}")
this.user = user
if(listener != null)
listener!!.onKakaoLoginResult(user)
}
}
}
}
fun login(context: Context)
{
// 카카오톡이 설치되어 있으면 카카오톡으로 로그인, 아니면 카카오계정으로 로그인
if (UserApiClient.instance.isKakaoTalkLoginAvailable(context))
UserApiClient.instance.loginWithKakaoTalk(context, callback = callback)
else
UserApiClient.instance.loginWithKakaoAccount(context, callback = callback)
}
//로그아웃
fun onLink() {
UserApiClient.instance.unlink { error ->
if (error != null) {
Log.e("TAG", "연결 끊기 실패", error)
}
else {
Log.i("TAG", "연결 끊기 성공. SDK에서 토큰 삭제 됨")
}
}
}
companion object {
@JvmStatic
val instance by lazy { KakaoLogin() }
}
}
KOE004 에러가 나온다면 https://developers.kakao.com/console/app/682679/product/login/easySignUp 에서 카카오 로그인을 활성화해준다.
공식문서
https://developers.kakao.com/docs/latest/ko/kakaologin/android#before-you-begin
'프로그래밍 > Kotlin' 카테고리의 다른 글
View의 Visible, Gone, invisible 차이 (0) | 2022.02.09 |
---|---|
[Retrofit] HTTPS 통신, 안드로이드 <-> 서버 (0) | 2021.12.24 |
[Kotlin] Dialog 종료시 커스텀 리스너 동작 (0) | 2021.12.14 |
[Kotlin] 전체화면으로 DialogFragment 열기 (0) | 2021.12.13 |
안드로이드 RecyclerView 사용법 (0) | 2021.12.12 |
댓글