환경 설정 공식 가이드 : https://developers.kakao.com/docs/latest/ko/getting-started/sdk-android
카카오 로그인 Android SDK 공식 가이드 : https://developers.kakao.com/docs/latest/ko/kakaologin/android#before-you-begin
사전 체크 1. android studio 최신 Fox버전을 사용하는 경우, settings.gradle 설정 추가
dependencyResolutionManagement {
repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS)
repositories {
google()
mavenCentral()
maven { url 'https://devrepo.kakao.com/nexus/content/groups/public/' }
}
}
rootProject.name = "TestRestAPIForJava"
include ':app'
사전 체크 2. build.gradle (Module) 설정
plugins {
id 'com.android.application'
}
android {
compileSdk 31
defaultConfig {
applicationId "패키지명"
minSdk 21
targetSdk 30
versionCode 1
versionName "1.0"
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
}
}
compileOptions {
sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8
}
}
dependencies {
implementation 'androidx.appcompat:appcompat:1.4.0'
implementation 'com.google.android.material:material:1.4.0'
implementation 'androidx.constraintlayout:constraintlayout:2.1.2'
testImplementation 'junit:junit:4.+'
androidTestImplementation 'androidx.test.ext:junit:1.1.3'
androidTestImplementation 'androidx.test.espresso:espresso-core:3.4.0'
//Kakao SDK
implementation "com.kakao.sdk:v2-user:2.8.3" // 카카오 로그인
implementation "com.kakao.sdk:v2-talk:2.8.3" // 친구, 메시지(카카오톡)
implementation "com.kakao.sdk:v2-story:2.8.3" // 카카오스토리
implementation "com.kakao.sdk:v2-link:2.8.3" // 메시지(카카오링크)
implementation "com.kakao.sdk:v2-navi:2.8.3" // 카카오내비
}
사전 체크 3. GlobalApplication 클래스 추가
import android.app.Application;
import com.kakao.sdk.common.KakaoSdk;
public class GlobalApplication extends Application {
private static GlobalApplication instance;
@Override
public void onCreate() {
super.onCreate();
instance = this;
// 네이티브 앱 키로 초기화
KakaoSdk.init(this, "{네이티브 앱키}");
}
}
사전 체크 4. AndroidManifest.xml 설정
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="패키지명">
<!-- 인터넷 사용 권한 설정 -->
<uses-permission android:name="android.permission.INTERNET" />
<application
android:name=".GlobalApplication"
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/Theme.TestRestAPIForJava">
<activity
android:name=".MainActivity"
android:exported="true">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity
android:name="com.kakao.sdk.auth.AuthCodeHandlerActivity"
android:exported="true">
<intent-filter>
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" />
<!-- Redirect URI: "kakao{NATIVE_APP_KEY}://oauth" -->
<data android:host="oauth"
android:scheme="kakao{NATIVE_APP_KEY}" />
</intent-filter>
</activity>
</application>
</manifest>
사전 체크 5. 키해시 조회 및 등록
import androidx.appcompat.app.AppCompatActivity;
import android.content.pm.PackageInfo;
import android.content.pm.PackageManager;
import android.content.pm.Signature;
import android.os.Bundle;
import android.util.Base64;
import android.util.Log;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Log.d("KeyHash", getKeyHash());
}
// 키해시 얻기
public String getKeyHash(){
try{
PackageInfo packageInfo = getPackageManager().getPackageInfo(getPackageName(), PackageManager.GET_SIGNATURES);
if(packageInfo == null) return null;
for(Signature signature: packageInfo.signatures){
try{
MessageDigest md = MessageDigest.getInstance("SHA");
md.update(signature.toByteArray());
return android.util.Base64.encodeToString(md.digest(), Base64.NO_WRAP);
}catch (NoSuchAlgorithmException e){
Log.w("getKeyHash", "Unable to get MessageDigest. signature="+signature, e);
}
}
}catch(PackageManager.NameNotFoundException e){
Log.w("getPackageInfo", "Unable to getPackageInfo");
}
return null;
}
}
1. 카카오 로그인 버튼 추가
2. activity_main.xml
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">
<ImageButton
android:id="@+id/kakao_login_button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/kakao_login_button"
android:background="@android:color/transparent"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintBottom_toBottomOf="parent"
android:layout_marginBottom="40dp"
/>
</androidx.constraintlayout.widget.ConstraintLayout>
3. MainActovity
import androidx.appcompat.app.AppCompatActivity;
import android.content.pm.PackageInfo;
import android.content.pm.PackageManager;
import android.content.pm.Signature;
import android.os.Bundle;
import android.util.Base64;
import android.util.Log;
import android.view.View;
import android.widget.ImageButton;
import com.kakao.sdk.user.UserApiClient;
import com.kakao.sdk.user.model.Account;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Log.d("KeyHash", getKeyHash());
ImageButton kakao_login_button = (ImageButton)findViewById(R.id.kakao_login_button);
kakao_login_button.setOnClickListener(new View.OnClickListener(){
@Override
public void onClick(View v) {
if(UserApiClient.getInstance().isKakaoTalkLoginAvailable(MainActivity.this)){
login();
}
else{
accountLogin();
}
}
});
}
public void login(){
String TAG = "login()";
UserApiClient.getInstance().loginWithKakaoTalk(MainActivity.this,(oAuthToken, error) -> {
if (error != null) {
Log.e(TAG, "로그인 실패", error);
} else if (oAuthToken != null) {
Log.i(TAG, "로그인 성공(토큰) : " + oAuthToken.getAccessToken());
getUserInfo();
}
return null;
});
}
public void accountLogin(){
String TAG = "accountLogin()";
UserApiClient.getInstance().loginWithKakaoAccount(MainActivity.this,(oAuthToken, error) -> {
if (error != null) {
Log.e(TAG, "로그인 실패", error);
} else if (oAuthToken != null) {
Log.i(TAG, "로그인 성공(토큰) : " + oAuthToken.getAccessToken());
getUserInfo();
}
return null;
});
}
public void getUserInfo(){
String TAG = "getUserInfo()";
UserApiClient.getInstance().me((user, meError) -> {
if (meError != null) {
Log.e(TAG, "사용자 정보 요청 실패", meError);
} else {
System.out.println("로그인 완료");
Log.i(TAG, user.toString());
{
Log.i(TAG, "사용자 정보 요청 성공" +
"\n회원번호: "+user.getId() +
"\n이메일: "+user.getKakaoAccount().getEmail());
}
Account user1 = user.getKakaoAccount();
System.out.println("사용자 계정" + user1);
}
return null;
});
}
// 키해시 얻기
public String getKeyHash(){
try{
PackageInfo packageInfo = getPackageManager().getPackageInfo(getPackageName(), PackageManager.GET_SIGNATURES);
if(packageInfo == null) return null;
for(Signature signature: packageInfo.signatures){
try{
MessageDigest md = MessageDigest.getInstance("SHA");
md.update(signature.toByteArray());
return android.util.Base64.encodeToString(md.digest(), Base64.NO_WRAP);
}catch (NoSuchAlgorithmException e){
Log.w("getKeyHash", "Unable to get MessageDigest. signature="+signature, e);
}
}
}catch(PackageManager.NameNotFoundException e){
Log.w("getPackageInfo", "Unable to getPackageInfo");
}
return null;
}
}
'언어, 환경별 예제 코드' 카테고리의 다른 글
iOS, 웹뷰에서 JS SDK 방식 로그인 간단히 테스트 (0) | 2022.04.05 |
---|---|
Android Kakao SDK v2 Java로 사용하기 - 카카오 링크 (1) | 2021.11.29 |
카카오 SDK 공식 예제 링크 (0) | 2021.11.03 |
iOS 하이브리드앱(웹뷰) 팝업방식 로그인, 카카오링크, 채널상담 (0) | 2021.09.02 |
[rest api 예제] java (spring boot) - 카카오 로그인, 카카오 친구목록 조회, 나에게 메시지 발송 (0) | 2021.08.06 |
댓글