카카오 로그인 API 만들기
1. 애플리케이션 등록
1-1.앱 만들기
내 애플리케이션 > 애플리케이션 추가하기
1-2. 플랫폼 선택
내 애플리케이션 > 앱 설정 > 플랫폼
플랫폼 등록 버튼을 눌러 플랫폼 추가
1-3. 카카오 로그인 설정
내 애플리케이션 > 제품 설정 > 카카오 로그인에서 활성화 ON
1-4. 동의 항목 설정
내 애플리케이션 > 제품 설정 > 동의항목
필요한 사용자 정보 동의 항목 설정
1-5. Redirect URI 등록
앱 설정 > 카카오 로그인 > Redirect URI
1-6. 팀 멤버 등록
내 애플리케이션 > 앱 설정 > 팀관리
2. SDK 사용
2-1 root 레벨의 build.gradle 에 카카오 레파지토리(Repository, 저장소) 설정
subprojects {
repositories {
google()
jcenter()
maven { url 'https://devrepo.kakao.com/nexus/content/groups/public/' }
}
}
안드로이드 스튜디오의 내 프로젝트 Maven 설정을 통해 카카오 SDK를 import
이 방법을 사용해 따로 파일을 다운로드 받지 않고도 편리하게 내 프로젝트에서 카카오 SDK를 이용 가능
2-2 project/module 레벨의 build.gradle에 디펜던시 설정
dependencies {
// 카카오 로그인
implementation group: 'com.kakao.sdk', name: 'usermgmt', version: '1.29.0'
// 카카오톡
implementation group: 'com.kakao.sdk', name: 'kakaotalk', version: '1.29.0'
// 카카오스토리
implementation group: 'com.kakao.sdk', name: 'kakaostory', version: '1.29.0'
// 카카오링크
implementation group: 'com.kakao.sdk', name: 'kakaolink', version: '1.29.0'
// 카카오내비
implementation group: 'com.kakao.sdk', name: 'kakaonavi', version: '1.29.0'
}
필요한 항목 추가
2-3 앱 키 설정
AndroidManifest.xml
<application>
...
<meta-data
android:name="com.kakao.sdk.AppKey"
android:value="{NATIVE_APP_KEY}" /> //네이티브 앱 키 설정
</application>
*네이티브 앱키 등록 방법 : 내 애플리케이션 -> 앱 설정 -> 요약 정보
카카오 SDK는 API 호출 시 지정된 앱 키로 권한 인증
2-4. 키 해시 등록
앱 내 자바 코드로 키 해시 찾기
public static String getKeyHash(final Context context) {
PackageInfo packageInfo = getPackageInfo(context, PackageManager.GET_SIGNATURES);
if (packageInfo == null)
return null;
for (Signature signature : packageInfo.signatures) {
try {
MessageDigest md = MessageDigest.getInstance("SHA");
md.update(signature.toByteArray());
return Base64.encodeToString(md.digest(), Base64.NO_WRAP);
} catch (NoSuchAlgorithmException e) {
Log.w(TAG, "Unable to get MessageDigest. signature=" + signature, e);
}
}
return null;
}
위 클래스를 작성 한 후
Log.e("getKeyHash", "" +getKeyHash(LoginActivity.this));
사용하여 Logcat에서 값을 확인
키 해시 : 내 애플리케이션 -> 앱 설정 -> 플랫폼에서 작성
만약 여러 명의 개발자가 앱의 개발에 참여하고 있다면 각 개발자들의 개발 환경의 디버그 키스토어가 다를 것이므로
여러개의 키해시를 모두 등록
2-5 SDK 초기화
클래스 작성
public class MyApplication extends Application {
@Override
public void onCreate() {
super.onCreate();
// SDK 초기화
KakaoSDK.init(new KakaoAdapter() {
@Override
public IApplicationConfig getApplicationConfig() {
return new IApplicationConfig() {
@Override
public Context getApplicationContext() {
return MyApplication.this;
}
};
}
});
}
}
카카오 SDK를 앱과 연결하는 과정
KakaoAdapter 객체를 사용해 카카오 SDK에 필요한 정보를 제공
앱이 가진 정보를 얻기 위한 인터페이스(interface)인 IApplicationConfig, 로그인 세션(Session)
생성할 때 필요한 옵션을 얻는 추상 클래스(abstract class)인 ISessionConfig를 구현
카카오 로그인 설정을 담은 ISessionConfig는 KakaoAdapter에 기본 설정되어 있으며,
설정 변경이 필요할 때 상속해서 사용
3 카카오 로그인
3-1 xml 작성
작성 예시
<com.kakao.usermgmt.LoginButton
android:id="@+id/login_button"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginLeft="20dp"
android:layout_marginRight="20dp"
android:layout_marginBottom="30dp"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintBottom_toBottomOf="parent" />
ConstraintLayout을 활용하여 화면 중앙 아래에 버튼을 배치하는 예제
3-2 LoginActivity 클래스로, 로그인 관련 동작들을 포함
public class LoginActivity extends Activity {
// 세션 콜백 구현
private ISessionCallback sessionCallback = new ISessionCallback() {
@Override
public void onSessionOpened() {
Log.i("KAKAO_SESSION", "로그인 성공");
}
@Override
public void onSessionOpenFailed(KakaoException exception) {
Log.e("KAKAO_SESSION", "로그인 실패", exception);
}
};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_login);
// 세션 콜백 등록
Session.getCurrentSession().addCallback(sessionCallback);
}
@Override
protected void onDestroy() {
super.onDestroy();
// 세션 콜백 삭제
Session.getCurrentSession().removeCallback(sessionCallback);
}
@Override
protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
// 카카오톡|스토리 간편로그인 실행 결과를 받아서 SDK로 전달
if (Session.getCurrentSession().handleActivityResult(requestCode, resultCode, data)) {
return;
}
super.onActivityResult(requestCode, resultCode, data);
}
}
로그인 액티비티에서 가장 중요한 부분은 세션 처리
현재 세션의 상태를 구하고 로그인 결과를 처리할 콜백을 추가하거나 삭제
3-3 토큰 관리
AuthService.getInstance()
.requestAccessTokenInfo(new ApiResponseCallback<AccessTokenInfoResponse>() {
@Override
public void onSessionClosed(ErrorResult errorResult) {
Log.e("KAKAO_API", "세션이 닫혀 있음: " + errorResult);
}
@Override
public void onFailure(ErrorResult errorResult) {
Log.e("KAKAO_API", "토큰 정보 요청 실패: " + errorResult);
}
@Override
public void onSuccess(AccessTokenInfoResponse result) {
Log.i("KAKAO_API", "사용자 아이디: " + result.getUserId());
Log.i("KAKAO_API", "남은 시간 (ms): " + result.getExpiresInMillis());
}
});
카카오 SDK는 토큰 관리 기능 내장
카카오 API 요청 시 토큰 갱신 하는 기능 포함
별도에 토큰 관리 기능 제공하지 않지만 사용자가 토큰 정보가 필요한 경우 위와 같이 요청
* Redirect URI
코드가 리다이렉트 된 URI
설정 > 일반 > 웹 > 사이트 도메인에서 설정한 각각의 도메인에 설정 > 일반 > 웹 > Redirect Path 를 붙인 URI
카카오 로그인은 서비스와 카카오 서버가 서로 정보를 주고 받는 방식으로 진행
카카오 서버는 Redirect URI로 서비스에서 필요한 로그인 인증 정보를 보내고,
서비스는 Redirect URI로 받은 로그인 인증 정보를 처리해 다음 단계 요청을 보냄
따라서 이 정보가 앱 설정에 등록돼 있지 않으면 카카오 로그인 시 에러가 발생
* Oauth Redirect URI
다른 서비스의 정보를 해당 서비스에 건네주기 위한 방법
서비스의 회원 정보를 안전하게 사용하기 위해 사용
Oauth Redirect URI 과정
서비스를 등록하는 과정 -> 토큰을 받기 위한 과정 -> 토큰을 이용해 정보를 요청하는 과정
'안드로이드' 카테고리의 다른 글
Material Design (0) | 2022.02.09 |
---|