일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
- 안드로이드 뒤집히는 뷰
- 우편물재난문자
- android 수익
- android 뒤집히는 카드뷰
- RecyclerView in Admob
- 정국라면
- 안드로이드 광고
- 테러우편물
- 앱에 광고 수익
- android 광고달기
- 안드로이드 리스트뷰와 광고
- 앱 광고 설정
- kotlin
- Android
- android 터치시 뒤집히는 뷰
- android kotlin
- android remoteconfig
- 불그리레시피
- 라면레시피추천
- 안드로이드
- android notification
- android 앱업데이트 없이 변경하기
- 정국라면레시피
- firebase RemoteConfig
- android 영단어 기능 만들기
- FlipView
- Android AdMob
- 앱에 광고달기
- 국제우편물
- 애드몹 설정
- Today
- Total
TAE
[Android / Kotlin] SNS(카카오)로그인 본문
이번에는 Kakao Developers에서 카카오 로그인 api를 활용하여 로그인 기능을 구현해 보겠습니다.
Kakao Developers
카카오 API를 활용하여 다양한 어플리케이션을 개발해보세요. 카카오 로그인, 메시지 보내기, 친구 API, 인공지능 API 등을 제공합니다.
developers.kakao.com
1.카카오 설정
https://developers.kakao.com/console/app
카카오계정
accounts.kakao.com
위 링크에 들어가 카카오 계정으로 로그인 후 애플리케이션 추가하기를 눌러 카카오 로그인 api를 사용할 애플리케이션을 등록한다.
앱이름과 사업자명 등록 후 서비스 이용 약관에 동의한 후 확인 버튼을 누르게 되면 프로젝트 생성이 완료된다.
그 후 좌측 메뉴에 내 어플리케이션 > 앱설정 > 플랫폼에 들어가서 Android플랫폼 등록 클릭
패키지명(AndroidMainfest에서 확인 가능합니다.)과 위에서 추출한 해시키를 등록해 줍니다.
마켓 URL은 추후 앱 등록 후 추가해 주셔도 됩니다.
키 해시 부분은 안드로이드 코드상에서
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.util.Log
import com.kakao.sdk.common.util.Utility
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
val keyHash = Utility.getKeyHash(this)
Log.d("Hash", keyHash)
}
}
위 처럼 코드를 작성하고 실행을 하면 로그에 키 해시가 나오게 되는데 그 키 해시를 적어주시면 됩니다.
내 어플리케이션 > 앱 설정 > 요약 정보 에서 [네이티브 앱 키]를 복사해줍니다.
프로젝트 마다 키가 다르며, 중요한 정보이므로 외부에 유출 되지 않게 관리하여 줍니다.
2. 앱 설정
1. Gradle
build.gradle(Module)
implementation "com.kakao.sdk:v2-user:2.0.1"
카카오 모듈을 추가해 줍니다.
2. mainfest.xml
mainfests -> AndroidMainfest.xml
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools">
<uses-permission android:name="android.permission.INTERNET" />
<application
android:name=".Application"
android:allowBackup="true"
....
<uses-permission android:name="android.permission.INTERNET" />
인터넷 권한을 추가해 줍니다.
<activity android:name="com.kakao.sdk.auth.AuthCodeHandlerActivity">
<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="oauth"
android:scheme="kakao네이티브 앱 키" />
</intent-filter>
</activity>
data scheme 부분에 네이티브 앱 키는 프로젝트 적용 시점에 나와있는 네이티브 앱키를 사용하시면 됩니다.
ex) android:scheme="kakaoed66testtesttest"
3.코드
1. Application
import android.app.Application
import com.kakao.sdk.common.KakaoSdk
class Application : Application() {
override fun onCreate() {
super.onCreate()
KakaoSdk.init(this, "네이티브 앱 키")
}
}
여기서 네이티브 앱키는 위에 프로젝트 설정 부분 네이티브 앱 키를 그대로 복사 붙여넣기 해주시면 됩니다.
ex) KakaoSdk.init(this, "ed66testtesttest")
2. activity_login.xml
<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:tools="http://schemas.android.com/tools">
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
xmlns:app="http://schemas.android.com/apk/res-auto">
<LinearLayout
android:layout_alignParentBottom="true"
android:layout_width="match_parent"
android:orientation="vertical"
android:layout_height="wrap_content">
<ImageButton
android:id="@+id/kakao_login_button"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@android:color/transparent"
android:src="@drawable/kakao_login_medium_wide"/>
<com.google.android.gms.common.SignInButton
android:id="@+id/googleLoginBT"
android:layout_marginTop="10dp"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginStart="55dp"
android:layout_marginEnd="60dp"/>
</LinearLayout>
</RelativeLayout>
</layout>
https://developers.kakao.com/tool/resource/login
Kakao Developers
카카오 API를 활용하여 다양한 어플리케이션을 개발해보세요. 카카오 로그인, 메시지 보내기, 친구 API, 인공지능 API 등을 제공합니다.
developers.kakao.com
위 사이트에 들어가면 카카오 버튼을 다운로드 할수 있습니다.
로그인 버튼 다운로드 후 xml구성을 해주시면 됩니다.
3. LoginActivity
import android.content.Intent
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.util.Log
import android.widget.ImageButton
import android.widget.Toast
import com.kakao.sdk.auth.LoginClient
import com.kakao.sdk.auth.model.OAuthToken
import com.kakao.sdk.common.util.Utility
import com.kakao.sdk.common.model.AuthErrorCause.*
import com.kakao.sdk.user.UserApiClient
class LoginActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
// 로그인 정보 확인
UserApiClient.instance.accessTokenInfo { tokenInfo, error ->
if (error != null) {
Toast.makeText(this, "토큰 실패", Toast.LENGTH_SHORT).show()
}
else if (tokenInfo != null) {
Toast.makeText(this, "토큰 성공", Toast.LENGTH_SHORT).show()
val intent = Intent(this, SecondActivity::class.java)
startActivity(intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP))
finish()
}
}
//로그인버튼
val kakao_login_button = findViewById<ImageButton>(R.id.kakao_login_button)
kakao_login_button.setOnClickListener {
if(LoginClient.instance.isKakaoTalkLoginAvailable(this)){
LoginClient.instance.loginWithKakaoTalk(this, callback = callback)
}else{
LoginClient.instance.loginWithKakaoAccount(this, callback = callback)
}
}
//로그인 callBack
val callback: (OAuthToken?, Throwable?) -> Unit = { token, error ->
if (error != null) {
when {
error.toString() == AccessDenied.toString() -> {
Toast.makeText(this, "접근이 거부 됨(동의 취소)", Toast.LENGTH_SHORT).show()
}
error.toString() == InvalidClient.toString() -> {
Toast.makeText(this, "유효하지 않은 앱", Toast.LENGTH_SHORT).show()
}
error.toString() == InvalidGrant.toString() -> {
Toast.makeText(this, "인증 수단이 유효하지 않아 인증할 수 없는 상태", Toast.LENGTH_SHORT).show()
}
error.toString() == InvalidRequest.toString() -> {
Toast.makeText(this, "요청 파라미터 오류", Toast.LENGTH_SHORT).show()
}
error.toString() == InvalidScope.toString() -> {
Toast.makeText(this, "유효하지 않은 scope ID", Toast.LENGTH_SHORT).show()
}
error.toString() == Misconfigured.toString() -> {
Toast.makeText(this, "설정이 올바르지 않음(android key hash)", Toast.LENGTH_SHORT).show()
}
error.toString() == ServerError.toString() -> {
Toast.makeText(this, "서버 내부 에러", Toast.LENGTH_SHORT).show()
}
error.toString() == Unauthorized.toString() -> {
Toast.makeText(this, "앱이 요청 권한이 없음", Toast.LENGTH_SHORT).show()
}
else -> { // Unknown
Toast.makeText(this, "기타 에러", Toast.LENGTH_SHORT).show()
}
}
}
else if (token != null) {
Toast.makeText(this, "로그인에 성공하였습니다.", Toast.LENGTH_SHORT).show()
val intent = Intent(this, SecondActivity::class.java)
startActivity(intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP))
finish()
}
}
}
}
코드상세
Activity를 실행 후 토큰값이 있는지 없는지 여부를 통하여 토근값이 있으면 다음 프로세스 실행(현재는 startActivity)해줍니다.
// 로그인 정보 확인
UserApiClient.instance.accessTokenInfo { tokenInfo, error ->
if (error != null) {
Toast.makeText(this, "토큰 실패", Toast.LENGTH_SHORT).show()
}
else if (tokenInfo != null) {
Toast.makeText(this, "토큰 성공", Toast.LENGTH_SHORT).show()
val intent = Intent(this, SecondActivity::class.java)
startActivity(intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP))
finish()
}
}
로그인 버튼 클릭 시 카카오톡이 설치 되어있는지 여부를 판단하여 카카톡을 실행하거나, 웹페이지로 로그인 창을 띄워줍니다.
로그인 실행은 callBack을 실행하여 오류가 있을경우 오류 토스트를 띄워주며, 토큰값이 null이 아니면 로그인 성공으로 판단 하여, 다음 프로세스를 실행하여 줍니다.
'android > 코드' 카테고리의 다른 글
[android/Kotlin] 푸시 메시지 구현 - 푸시 메시지 구현(이미지 푸시, 긴글 푸시) (0) | 2023.03.22 |
---|---|
[android/Kotlin] 푸시 메시지 구현 - firebase 프로젝트 만들기 (0) | 2023.03.21 |
[Android/Kotlin] 비디오에서 썸네일 이미지 지정하기 - 비디오 썸네일 지정(2) (0) | 2023.03.20 |
[Android/Kotlin] registerForActivityResult사용하여 앨범에서 사진 선택하기- 비디오 썸네일 지정(1) (0) | 2023.03.20 |
[Android/Kotlin] 커스텀 앨범 만들기 - 커스텀 갤러리(2) (0) | 2023.03.17 |