ㅈㄴ빢친다.. 개밖쳐서 아 진짜 아 이걸로 몇시간을 소비한거냐 내가 보려고 만들었다
1. 카카오 계정에서 앱 추가하자
https://developers.kakao.com/console/app
카카오계정
accounts.kakao.com
앱이름, 사업자명, 카테고리는 알아서 입력해라 서비스이용제한 체크하고 저장하기
만든것 들어가기
네이티브앱을 보면된다 (안드로이드에서 연결할때 필요함)
다음은 플랫폼을 등록해야한다.
패키지명은 앱 이름을 넣으면되고 (로그캣창 앱이름확인 매니페스트에서도 확인 가능)
해시키 확인방법은 내가 작성한 예제코드인 TestLogin.class 메서드로 되어있어서 안드로이드를 실행시켜 로그캣으로 보면 된다
해당코드는 안드로이드의 해시키를 보는 코드이다. 따로 확인하고 싶으면 별도의 클래스를 만들어서 붙여넣고 실행을하고
로그캣으로 확인하면 나온다.
PackageInfo packageInfo = null;
try {
packageInfo = getPackageManager().getPackageInfo(getPackageName(), PackageManager.GET_SIGNATURES);
} catch (PackageManager.NameNotFoundException e) {
e.printStackTrace();
}
if (packageInfo == null)
Log.e("KeyHash", "KeyHash:null");
for (Signature signature : packageInfo.signatures) {
try {
MessageDigest md = MessageDigest.getInstance("SHA");
md.update(signature.toByteArray());
Log.d("KeyHash", Base64.encodeToString(md.digest(), Base64.DEFAULT));
} catch (NoSuchAlgorithmException e) {
Log.e("KeyHash", "Unable to get MessageDigest. signature=" + signature, e);
}
}
저장을 누르면 패키지명, 마켓url, 키해시가 저장이된다
다음은 내 애플리케이션에서 카카오 로그인 들어가 활성화 설정을 on 해준다.
다음으로 동의항목에 들어가서 개인정보르 닉네임, 프로필사진 상태를 설정해서 필수동의를 받는다.
2. 안드로이드 셋팅 설정
카카오 공홈 안드로이드 셋팅과정이다 참고하도록!
https://developers.kakao.com/docs/latest/ko/android/getting-started
Kakao Developers
카카오 API를 활용하여 다양한 어플리케이션을 개발해보세요. 카카오 로그인, 메시지 보내기, 친구 API, 인공지능 API 등을 제공합니다.
developers.kakao.com
공홈에서 알려주는 코드중에서 이해를 못해서 엄청...시간을 소비했다
"{NATIVE_APP_KEY}" 이부분 -> {} <- 꼭 지우고 네이티브앱 키 입력할것!!!!!!!!!!
kakaoApplication.class
import android.app.Application;
import com.kakao.sdk.common.KakaoSdk;
public class kakaoApplication extends Application {
@Override
public void onCreate() {
super.onCreate();
// Kakao SDK 초기화
KakaoSdk.init(this, "123412341234");
}
}
TestLogin.class
import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.ImageView;
import android.widget.TextView;
import com.bumptech.glide.Glide;
import com.kakao.sdk.auth.model.OAuthToken;
import com.kakao.sdk.user.UserApiClient;
import com.kakao.sdk.user.model.User;
import kotlin.Unit;
import kotlin.jvm.functions.Function1;
import kotlin.jvm.functions.Function2;
public class TestLogin extends AppCompatActivity {
private static final String TAG = "TestLogin";
private View loginButton, logoutButton;
private TextView nickName;
private ImageView profileImage;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.testlogin);
loginButton = findViewById(R.id.login);
logoutButton = findViewById(R.id.logout);
nickName = findViewById(R.id.nickname);
profileImage = findViewById(R.id.profile);
getKey_Hash();
// 해시키 가져오기 메서드
// 카카오가 설치되어 있는지 확인 하는 메서드또한 카카오에서 제공 콜백 객체를 이용함
Function2<OAuthToken, Throwable, Unit> callback = new Function2<OAuthToken, Throwable, Unit>() {
@Override
public Unit invoke(OAuthToken oAuthToken, Throwable throwable) {
// 이때 토큰이 전달이 되면 로그인이 성공한 것이고 토큰이 전달되지 않았다면 로그인 실패
if(oAuthToken != null) {
}
if (throwable != null) {
}
updateKakaoLoginUi();
return null;
}
};
// 로그인 버튼
loginButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
if(UserApiClient.getInstance().isKakaoTalkLoginAvailable(TestLogin.this)) {
UserApiClient.getInstance().loginWithKakaoTalk(TestLogin.this, callback);
}else {
UserApiClient.getInstance().loginWithKakaoAccount(TestLogin.this, callback);
}
}
});
// 로그 아웃 버튼
logoutButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
UserApiClient.getInstance().logout(new Function1<Throwable, Unit>() {
@Override
public Unit invoke(Throwable throwable) {
updateKakaoLoginUi();
return null;
}
});
}
});
updateKakaoLoginUi();
}
void getKey_Hash() {
PackageInfo packageInfo = null;
try {
packageInfo = getPackageManager().getPackageInfo(getPackageName(), PackageManager.GET_SIGNATURES);
} catch (PackageManager.NameNotFoundException e) {
e.printStackTrace();
}
if (packageInfo == null)
Log.e("KeyHash", "KeyHash:null");
for (Signature signature : packageInfo.signatures) {
try {
MessageDigest md = MessageDigest.getInstance("SHA");
md.update(signature.toByteArray());
Log.d("KeyHash", Base64.encodeToString(md.digest(), Base64.DEFAULT));
} catch (NoSuchAlgorithmException e) {
Log.e("KeyHash", "Unable to get MessageDigest. signature=" + signature, e);
}
}
}
private void updateKakaoLoginUi(){
UserApiClient.getInstance().me(new Function2<User, Throwable, Unit>() {
@Override
public Unit invoke(User user, Throwable throwable) {
// 로그인이 되어있으면
if (user!=null){
// 유저의 아이디
Log.d(TAG,"invoke: id" + user.getId());
// 유저의 어카운트정보에 이메일
Log.d(TAG,"invoke: nickname" + user.getKakaoAccount().getEmail());
// 유저의 어카운트 정보의 프로파일에 닉네임
Log.d(TAG,"invoke: email" + user.getKakaoAccount().getProfile().getNickname());
// 유저의 어카운트 파일의 성별
Log.d(TAG,"invoke: gerder" + user.getKakaoAccount().getGender());
// 유저의 어카운트 정보에 나이
Log.d(TAG,"invoke: age" + user.getKakaoAccount().getAgeRange());
nickName.setText(user.getKakaoAccount().getProfile().getNickname());
Glide.with(profileImage).load(user.getKakaoAccount().
getProfile().getProfileImageUrl()).circleCrop().into(profileImage);
loginButton.setVisibility(View.GONE);
logoutButton.setVisibility(View.VISIBLE);
}else {
// 로그인이 되어 있지 않다면 위와 반대로
nickName.setText(null);
profileImage.setImageBitmap(null);
loginButton.setVisibility(View.VISIBLE);
logoutButton.setVisibility(View.GONE);
}
return null;
}
});
}
}
testlogin.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout 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"
android:orientation="vertical"
tools:context=".TestLogin">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1"
android:gravity="center"
android:orientation="vertical">
<ImageView
android:id="@+id/profile"
android:layout_width="200dp"
android:layout_height="200dp"
/>
<TextView
android:id="@+id/nickname"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
</LinearLayout>
<ImageView
android:id="@+id/login"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:src="@drawable/kakaologin"/>
<Button
android:id="@+id/logout"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="로그아웃"
android:visibility="gone"/>
</LinearLayout>
kakaologin.png
drawable에 카카오로그인 png파일을 넣어주자
매니페스트
설명간다 scheme에 카카오 개발 홈페이지에 네이티브앱 키 복붙해라 단 앞에 kakao붙여서 할 것.
ex ) 네이티브앱키 : 1234
ex ) android:scheme ="kakao1234"
<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입력하고 네이티브앱 키입력해" />
</intent-filter>
</activity>
아래 사진은 이렇게 구성하면 됨 참고
매니페스트 애플리케이션에 카카오앱키 초기화 클래스 입력해줘야함
<application
android:name=".kakaoApplication"
2.2. 개빡치는 Gradle Scripts 설정들
2.2.1 bulid.gradle (Module:app) 설정
저걸들어가면 아래 코드를 복붙해서 때려박아라
implementation "com.kakao.sdk:v2-all:2.15.0" // 전체 모듈 설치, 2.11.0 버전부터 지원
implementation "com.kakao.sdk:v2-user:2.15.0" // 카카오 로그인
implementation "com.kakao.sdk:v2-talk:2.15.0" // 친구, 메시지(카카오톡)
implementation "com.kakao.sdk:v2-story:2.15.0" // 카카오스토리
implementation "com.kakao.sdk:v2-share:2.15.0" // 메시지(카카오톡 공유)
implementation "com.kakao.sdk:v2-navi:2.15.0" // 카카오내비
implementation "com.kakao.sdk:v2-friend:2.15.0" // 카카오톡 소셜 피커, 리소스 번들 파일 포함
implementation 'com.github.bumptech.glide:glide:4.13.2' // 사진 라이브러리에 필요함!
annotationProcessor 'com.github.bumptech.glide:compiler:4.13.2'
아래는 내가 한것이니 참고만 할 것
2.2.2 bulid.gradle (Project: 너의앱이름)
블로그 글 예제 참고할때 잘못이해 해서 난 저기다 아주 뻘짓을 했다 그냥 두자
그냥 건드리지말고 나와라
2.2.3 setting.gradle (project:setting) 여기다 설정하는데가
그냥 복붙
dependencyResolutionManagement {
repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS)
repositories {
google()
mavenCentral()
maven { url 'https://devrepo.kakao.com/nexus/content/groups/public/' }
}
}
아래사진은 내꺼니까 참고만 할 것
카카오개발홈페이지설정
매니페스트설정
Gradle 설정
안드로이드 자바코드 작성
xml 코드작성
다 하게되면 실행될 화면
로그인 버튼 화면
버튼을 누르고 난 후
로그인 한 후
'Android' 카테고리의 다른 글
[JAVA][Android]안드로이드 interface 사용하기 (3) | 2024.06.07 |
---|---|
안드로이드 네이버 로그인 API 자바 연결하기 /JAVA/Android/NaverLogin (3) | 2024.05.15 |
로그캣 EGL_emulation 지우기 / Filter하기 / 특정 필터링 / 계속떠요 (4) | 2024.05.12 |
PHP / json_encode 안드로이드 전송 / UTF-8 변환 (3) | 2024.05.12 |
안드로이드 통신하기 HttpURLConnection / PHP(우분투/ubuntu) (1) | 2024.05.02 |