[Android/SDK연동]SNS 로그인 구현(2) - 카카오톡 sdk v1

2021. 5. 11. 11:08Android/튜토리얼 및 가이드

728x90
반응형

0. Kakao Developer 기본 세팅

 

Kakao Developers

카카오 API를 활용하여 다양한 어플리케이션을 개발해보세요. 카카오 로그인, 메시지 보내기, 친구 API, 인공지능 API 등을 제공합니다.

developers.kakao.com

    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() 메서드에서 해당 소스를 통해 메서드 실행

728x90
반응형