728x90
반응형
string.xml에 카카오 디벨로퍼에서 제공하는 키값 추가 (네이티브 앱 키 추가하면 됩니다.)
(카카오 디벨로퍼 사이트 가입은 다른 블로그에도 많이 적혀있으므로 참고바랍니다.)
<build.gradle> Project 에 maven 추가
allprojects {
repositories {
google()
jcenter()
// kakao
mavenCentral()
maven { url 'http://devrepo.kakao.com:8088/nexus/content/groups/public/' }
}
}
<build.gradle> module: app 에 추가
//카카오 로그인
api group: 'com.kakao.sdk', name: 'usermgmt', version: '1.14.0'
<Manifest > 에 인터넷 권한 추가
<uses-permission android:name="android.permission.INTERNET" />
< GlobalApplication > 클래스 생성
import android.app.Application;
import android.content.Context;
import com.kakao.auth.ApprovalType;
import com.kakao.auth.AuthType;
import com.kakao.auth.IApplicationConfig;
import com.kakao.auth.ISessionConfig;
import com.kakao.auth.KakaoAdapter;
import com.kakao.auth.KakaoSDK;
public class GlobalApplication extends Application {
private static volatile GlobalApplication instance = null;
@Override
public void onCreate() {
super.onCreate();
instance = this;
KakaoSDK.init(new KakaoSDKAdapter());
}
public static final GlobalApplication getGlobalApplicationContext() {
if (instance == null)
throw new IllegalStateException("this application does not inherit com.kakao.GlobalApplication");
return instance;
}
protected static class KakaoSDKAdapter extends KakaoAdapter {
/**
* Session Config에 대해서는 default값들이 존재한다.
* 필요한 상황에서만 override해서 사용하면 됨.
*
* @return Session의 설정값.
*/
@Override
public ISessionConfig getSessionConfig() {
return new ISessionConfig() {
@Override
public AuthType[] getAuthTypes() {
// 로그인시 인증받을 타입을 지정한다. 지정하지 않을 시 가능한 모든 옵션이 지정된다.
//1.KAKAO_TALK : kakaotalk으로 login을 하고 싶을때 지정.
//2.KAKAO_STORY : kakaostory으로 login을 하고 싶을때 지정.
//3.KAKAO_ACCOUNT : 웹뷰 Dialog를 통해 카카오 계정연결을 제공하고 싶을경우 지정.
//4.KAKAO_TALK_EXCLUDE_NATIVE_LOGIN : 카카오톡으로만 로그인을 유도하고 싶으면서 계정이 없을때 계정생성을 위한
//버튼도 같이 제공을 하고 싶다면 지정.KAKAO_TALK과 중복 지정불가.
//5.KAKAO_LOGIN_ALL : 모든 로그인방식을 사용하고 싶을때 지정.
return new AuthType[]{AuthType.KAKAO_TALK};
}
@Override
public boolean isUsingWebviewTimer() {
return false;
}
@Override
public boolean isSecureMode() {
return false;
}
@Override
public ApprovalType getApprovalType() {
return ApprovalType.INDIVIDUAL;
//일반 사용자가 아닌 Kakao와 제휴된 앱에서 사용되는 값으로, 값을 채워주지 않을경우 ApprovalType.INDIVIDUAL 값을 사용하게 된다.
}
@Override
public boolean isSaveFormData() {
// Kakao SDK 에서 사용되는 WebView에서 email 입력폼에서 data를 save할지여부를 결정한다. Default true.
return true;
}
};
}
//Application이 가지고있는 정보를 얻기위한 interface.
@Override
public IApplicationConfig getApplicationConfig() {
return new IApplicationConfig() {
// 현재 최상단에 위치하고 있는 Activity. topActivity가 아니거나 ApplicationContext를 넣는다면
// SDK내에서의 Dialog Popup등이 동작하지 않을 수 있습니다.
@Override
public Context getApplicationContext() {
return GlobalApplication.getGlobalApplicationContext();
}
};
}
}
/**
* 애플리케이션 종료시 singleton 어플리케이션 객체 초기화한다.
*/
@Override
public void onTerminate() {
super.onTerminate();
instance = null;
}
}
< MainActivity >
onCreate
callback = new SessionCallback();
Session.getCurrentSession().addCallback(callback);
Session.getCurrentSession().checkAndImplicitOpen();
// ---------------------------- 카카오 로그인 --------------------------------------------
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if (Session.getCurrentSession().handleActivityResult(requestCode, resultCode, data)) {
return;
}
super.onActivityResult(requestCode, resultCode, data);
}
private class SessionCallback implements ISessionCallback {
@Override
public void onSessionOpened() {
Log.d("@@@@@", "main 세션 연결 성공");
redirectSignupActivity();
}
@Override
public void onSessionOpenFailed(KakaoException exception) {
Log.d("@@@@@", "main 세션 연결 실패");
if (exception != null) {
Logger.e(exception);
Log.d("@@@@@@",""+exception.toString());
}
// 세션 실패
setContentView(R.layout.main__menu);
}
}
@Override
protected void onDestroy() {
super.onDestroy();
Session.getCurrentSession().removeCallback(callback);
}
protected void redirectSignupActivity() {
Log.d("@@@@@", "main 실행");
is_login = true;
// 사용자 정보 가지고 오기
get_userData();
}
protected void get_userData(){
List<String> keys = new ArrayList<>();
UserManagement.getInstance().me(keys, new MeV2ResponseCallback() {
@Override
public void onFailure(ErrorResult errorResult) {
String message = "@@@@@ failed to get user info. msg=" + errorResult;
Logger.d(message);
Log.d("@@@@",""+message);
}
@Override
public void onSessionClosed(ErrorResult errorResult) {
// 세션이 닫혀있을때.
Log.d("@@@@",""+errorResult);
}
@Override
public void onSuccess(MeV2Response response) {
Log.d("@@@@@ user id : " ,""+ response.getId());
Log.d("@@@@@ user Nick : " ,""+ response.getNickname());
Log.d("@@@@@ email : " ,""+ response.getKakaoAccount().getEmail());
Log.d("@@@@@ profile image : " ,""+ response.getKakaoAccount());
// 가지고 왔을때
}
});
}
Xml 에 버튼 추가
<com.kakao.usermgmt.LoginButton
android:layout_gravity="center"
android:id="@+id/com_kakao_login"
android:layout_width="match_parent"
android:layout_height="wrap_content"
tools:layout_editor_absoluteX="50dp"
tools:layout_editor_absoluteY="250dp"
android:visibility="gone"/>
<manifest>에 추가
<!-- 카카오 -->
<meta-data
android:name="com.kakao.sdk.AppKey"
android:value="@string/kakao_app_key" />
+ name 에 GlobalApplication 추가
<application
android:name=".Main._Main._main_Sub_menu.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/AppTheme">
++ 카카오 디벨로퍼에서 해쉬키 등록시 해쉬키 가져오기
//카카오 디벨로퍼에서 사용할 키값을 로그를 통해 알아낼 수 있다. (로그로 본 키 값을을 카카오 디벨로퍼에 등록해주면 된다.)
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) {
// TODO Auto-generated catch block
Log.e("name not found", e.toString());
}
}
주의) 카카오 로그인시 엑티비티는 최상단이어야 하는 것 같습니다.
728x90
반응형
'Android' 카테고리의 다른 글
안드로이드 TextView 밑줄 만들기 (0) | 2019.10.12 |
---|---|
( 스크랩 ) 안드로이드 다음 주소검색 api (0) | 2019.10.07 |
Date Pick 속성 (0) | 2019.09.30 |
안드로이드 커스텀 스피너 ( 스피너에 이미지 넣기 ) (0) | 2019.09.28 |
스피너 꾸미기 (0) | 2019.09.26 |