0. Kakao Developer 기본 세팅
private void getAppKeyHash() {
try {
PackageInfo info = getPackageManager().getPackageInfo(getPackageName(), PackageManager.GET_SIGNATURES);
for (Signature signature : info.signatures) {
MessageDigest md;
md = MessageDigest.getInstance("SHA");
md.update(signature.toByteArray());
String something = new String(Base64.encode(md.digest(),0));
Log.e("Hash Key", something);
}
} catch (Exception e) {
Log.e("name not found", e.toString());
}
}
* 세팅 시 키해시가 필요한데, 이는 위 코드를 이용하여 구할 수 있다.
1. build.gradle 의존성 추가
implementation 'com.kakao.sdk:usermgmt:1.27.0' // 카카오 로그인
* build.gradle(Module)
allprojects {
repositories {
google()
mavenCentral()
maven { url 'http://devrepo.kakao.com:8088/nexus/content/groups/public/' }
}
}
* build.gradle(Project)
2. Kakao Login Adapter 생성
public class KakaoLogin extends Application {
private static volatile KakaoLogin instance = null;
private static class KakaoSDKAdapter extends KakaoAdapter {
// 카카오 로그인 세션을 불러올 때의 설정값을 설정하는 부분.
public ISessionConfig getSessionConfig() {
return new ISessionConfig() {
@Override
public AuthType[] getAuthTypes() {
return new AuthType[] {AuthType.KAKAO_LOGIN_ALL};
//로그인을 어떤 방식으로 할지 지정
//KAKAO_LOGIN_ALL: 모든 로그인방식을 사용하고 싶을때 지정.
}
@Override
public boolean isUsingWebviewTimer() {
return false;
// SDK 로그인시 사용되는 WebView에서 pause와 resume시에 Timer를 설정하여 CPU소모를 절약한다.
// true 를 리턴할경우 webview로그인을 사용하는 화면서 모든 webview에 onPause와 onResume 시에 Timer를 설정해 주어야 한다.
// 지정하지 않을 시 false로 설정된다.
}
@Override
public boolean isSecureMode() {
return false;
// 로그인시 access token과 refresh token을 저장할 때의 암호화 여부를 결정한다.
}
@Override
public ApprovalType getApprovalType() {
return ApprovalType.INDIVIDUAL;
// 일반 사용자가 아닌 Kakao와 제휴된 앱에서만 사용되는 값으로, 값을 채워주지 않을경우 ApprovalType.INDIVIDUAL 값을 사용하게 된다.
}
@Override
public boolean isSaveFormData() {
return true;
// Kakao SDK 에서 사용되는 WebView에서 email 입력폼의 데이터를 저장할지 여부를 결정한다.
// true일 경우, 다음번에 다시 로그인 시 email 폼을 누르면 이전에 입력했던 이메일이 나타난다.
}
};
}
@Override
public IApplicationConfig getApplicationConfig() {
return new IApplicationConfig() {
@Override
public Context getApplicationContext() {
return KakaoLogin.getGlobalApplicationContext();
}
};
}
}
public static KakaoLogin getGlobalApplicationContext() {
if(instance == null) {
throw new IllegalStateException("this application does not inherit com.kakao.GlobalApplication");
}
return instance;
}
@Override
public void onCreate() {
super.onCreate();
instance = this;
KakaoSDK.init(new KakaoSDKAdapter());
}
@Override
public void onTerminate() {
super.onTerminate();
instance = null;
}
}
3. AndroidManifest.xml에 위 내용 추가
<application
android:name=".KakaoLogin"
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:usesCleartextTraffic="true"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/Theme.SnsLoginTest_210511">
* application>androi:name 부분에 (2번)에서 만든 클래스 이름을 넣어준다.
4. 로그인 버튼 클릭 로직 구현
* ISessionCallback : 세션의 상태 변경에 따른 콜백, 세션이 오픈되었을 때, 세션이 만료되어 닫혔을 때 세션 콜백을 넘기게 된다.
static private ISessionCallback mSessionCallBack = new ISessionCallback() {
@Override
public void onSessionOpened() { // access token을 성공적으로 발급 받아 valid access token을 가지고 있는 상태
Log.d("Kakao Login","MainActivity.java - onSessionOpened()");
// 로그인 요청
UserManagement.getInstance().me(new MeV2ResponseCallback() {
@Override
public void onFailure(ErrorResult errorResult) {
// 로그인 실패
Toast.makeText(mContext,"로그인 도중에 오류가 발생하였습니다.", Toast.LENGTH_LONG).show();
}
@Override
public void onSessionClosed(ErrorResult errorResult) {
// 세션이 닫힘..
Toast.makeText(mContext,"세션이 닫혔습니다. 다시 시도하세요", Toast.LENGTH_LONG).show();
}
@Override
public void onSuccess(MeV2Response result) {
Toast.makeText(mContext,result.getKakaoAccount().getProfile().getNickname() + "님 환영합니다!", Toast.LENGTH_LONG).show();
Log.d("Kakao Login","카카오 로그인 성공");
}
});
}
@Override
public void onSessionOpenFailed(KakaoException exception) { // 네트워크 등으로 로그인 실패
Toast.makeText(mContext,exception.toString(), Toast.LENGTH_LONG).show();
Log.d("Kakao Login",exception.toString());
}
};
Session.getCurrentSession().addCallback(mSessionCallBack);
Session.getCurrentSession().checkAndImplicitOpen();
* 위에 정의한 메서드를 실행시키기 위해 onCreate() 메서드에서 해당 소스를 통해 메서드 실행
'Android > 튜토리얼 및 가이드' 카테고리의 다른 글
[Android/API]SNS 로그인 구현(5) - 네이버 JSON 파싱으로 계정 정보 얻어오기 (0) | 2021.05.14 |
---|---|
[Android/SDK연동]SNS 로그인 구현(4) - 페이스북 (0) | 2021.05.12 |
[Android/SDK연동]SNS 로그인 구현(1) - 네이버 (0) | 2021.05.10 |
[Android/API]MS-SQL DB를 안드로이드 스튜디오와 연결하기 (0) | 2021.05.08 |
[Android/API]네이버 쇼핑 API 파싱 (2) JSON (0) | 2021.03.11 |