본문 바로가기
Android/Develop

[Android] 카카오 계정으로 로그인하기(2019.10)

by hyun's life_developer 2019. 10. 16.

안녕하세요 초보개발자 시아아빠입니다.

이번 포스팅은 카카오 계정으로 로그인하기를 구현하기위해 카카오 api사용과 버튼 넣는 법들을 알아보겠습니다.

 

참조 : https://developers.kakao.com/docs/android/user-management#로그인-사용법 - kakao Developers

 

kakao Developers에 나와있지만 본문을 보고 사용하기에 다소 어려움이 있습니다.

이 글을 검색해서 들어오신 분들 또한 kakao developers를 다 보시고나서 어려움이 있기에 들어오셨을텐데요.

 

딱딱 요점만 콕콕 찝어서 바로 구현하실 수 있도록 알아보겠습니다.

 

 

I 로그인 구현하기 - Kakao Developers

1.  제일 먼저 여기를 눌러 카카오 디벨로퍼에 가입을 해줍니다. 아이디가 있으신 분들은 로그인해주시면 되겠습니다.

  (카카오 로그인이나 앱 키 등등 받기위해서 필수)

 

 

2. 우측 상단에 계정을 눌러 '내 애플리케이션'에 해당 애플리케이션으로 들어갑니다.

 

 

3. 사용자관리를 'ON'해주시고 로그인 동의항목들을 설정해주세요. 

    (수집하고자하는 항목과 해당 항목별 수집목적들을 기입해야만 설정이 가능합니다.)

 

 

4. 다시 아래페이지로 돌아오면 카카오 로그인 '사용가능'으로 변경되었는지 확인합니다.

    (변경이 안되었을 시 2번부터 재진행 해주세요)

 

 

5.  다음은 바로 아래 앱 정보 탭에서 설정을 눌러줍니다. (위의 그림은 설정 후의 상황이라 아래그림과 다를 수 있습니다.)

 

 

6. 아래 그림에서 플랫폼 추가 버튼을 눌러줍니다.

 

 

 

7.  Android에 체크해줍니다.

 

 

 

8. 패키지명을 기입후 추가 버튼을 눌러줍니다. (마켓 URL은 알아서 입력됩니다.)

 

 

 

9. 다음과 같이 설정이 완료됩니다.  (키 해시 구하는 법은 여기를 참고하세요)

자,  카카오 디벨로퍼에서 설정해줄 것은 끝났습니다.

 

안드로이드로 넘어가보겠습니다.

(안드로이드에서 해시키를 구한 후 다시 해시키를 입력해주어야 하니 창은 닫지마세요)

 

 

I 로그인 구현하기 - Android

우선 프로젝트에 Kakao SDK를 추가해주겠습니다. 간단하게 Gradle 설정을 통해 추가해보도록 하겠습니다.

 

1. build.gradle(Project: ~) 파일에 다음과 같이 추가합니다.

 

> build.gradle(Project:~)

allprojects {
    repositories {
        google()
        jcenter()

        //kakao
        mavenCentral()
        maven { url 'http://devrepo.kakao.com:8088/nexus/content/groups/public/'}
    }
}

allprojects-repositories에 

mavenCentral() 과 maven { url  'http://devrepo.kakao.com:8088/nexus/content/groups/public/'} 을 추가해줍니다.

 

 

 

2. 다음으로 grdle.properties를 열어줍니다.

KAKAO_SDK_GROUP=com.kakao.sdk

KAKAO_SDK_VERSION=1.24.0

두 줄을 추가해줍니다. 여기서 KAKAO_SDK_VEISON= ? 에는 최신버전을 확인하시고 넣어주시면 됩니다.

 

> 최신버전 확인은 아래 링크에서 하세요.

더보기

https://developers.kakao.com/docs/sdk

위의 링크 접속 후 Full SDK Source의 버젼을 넣어주세요.

 

 

3. 다음으로 build.gradle(Module : app)의 dependencies에 다음과 같이 추가합니다.

 

> build.gradle(Module:app)에

api group: 'com.kakao.sdk', name: 'usermgmt', version: '1.14.0' 를 추가합니다. 

dependencies {

    compile fileTree(dir: 'libs', include: ['*.jar'])

    androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', {

        exclude group: 'com.android.support', module: 'support-annotations'

    })

    compile 'com.android.support:appcompat-v7:26.+'

    testCompile 'junit:junit:4.12'



    // 카카오톡 SDK 추가
    api group: 'com.kakao.sdk', name: 'usermgmt', version: '1.14.0'

}

 

4. res > value에 있는 strings.xml에 앱 키를 정의해줍니다.

 

> strings.xml

<resources>
	// 카카오 앱 키
	<string name="kakao_app_key">네이티브 앱 키</string>
</resources>

 

5. 다음으로 해시키를 구해줍니다.

프로젝트 해시키 구하기

https://siadaddy-cordinglife.tistory.com/27

키 해시 값을 얻어오셨다면 그 값을 카카오 디벨로퍼에 키 해시 입력란에 추가해주신 후 저장합니다.

 

 

6. AndroidManifest.xml 파일을 열어줍니다.

다음 내용을 추가해줍니다.

 

> AndroidManifest.xml

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
     package="com.패키지폴더.패키지명">

    <uses-permission android:name="android.permission.INTERNET"/>

    <application
        android:name=".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">

        <meta-data
            android:name="com.kakao.sdk.AppKey"
            android:value="@string/kakao_app_key"/>

        <activity android:name="com.kakao.auth.authorization.authcode.KakaoWebViewActivity"
            android:launchMode="singleTop"
            android:windowSoftInputMode="adjustResize">
            <intent-filter>
                <action android:name="android.intent.action.MAIN"/>
                <category android:name="android.intent.category.DEFAULT"/>
            </intent-filter>
        </activity>
        
    </application>

</manifest>

이것으로 기본적인 설정들은 마쳤습니다. 

 

이제 프로젝트와 Kakao SDK를 연결하겠습니다.

 

 

 

7.  GlobalApplication.java를 생성해줍니다.

 

GlobalApplication.java

package com.siadaddy.패키지이름;

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;
public class GlobalApplication extends Application
{
    private static GlobalApplication instance;
    
    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()
                {
                    return new AuthType[]{AuthType.KAKAO_LOGIN_ALL};
                }
                
                @Override
                public boolean isUsingWebviewTimer()
                {
                    return false;
                }
                
                @Override
                public boolean isSecureMode()
                {
                    return false;
                }
                
                @Override
                public ApprovalType getApprovalType()
                {
                    return ApprovalType.INDIVIDUAL;
                }
                
                @Override
                public boolean isSaveFormData()
                {
                    return true;
                }
            };
        }
        
        @Override
        public IApplicationConfig getApplicationConfig()
        {
            return new IApplicationConfig()
            {
                @Override
                public Context getApplicationContext()
                {
                    return GlobalApplication.getGlobalApplicationContext();
                }
            };
        }
    }
    
    @Override
    public void onCreate() {
        super.onCreate();
        instance = this;
    }
}

 

 

8. MainActivity.java에 추가해줍니다.

 

> MainActivity.java

package com.siadaddy.패키지이름;

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.app.Activity;
import android.content.Intent;

import com.kakao.auth.ISessionCallback;
import com.kakao.auth.KakaoSDK;
import com.kakao.auth.Session;
import com.kakao.util.exception.KakaoException;
import com.kakao.util.helper.log.Logger;

public class MainActivity extends Activity
{
    private SessionCallback callback;
    
    /**
     * 로그인 버튼을 클릭 했을시 access token을 요청하도록 설정한다.
     *
     * @param savedInstanceState 기존 session 정보가 저장된 객체
     */
     
    @Override
    protected void onCreate(final Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        KakaoSDK.init(new GlobalApplication.KakaoSDKAdapter());

        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);
    }
    
    @Override
    protected void onDestroy()
    {
        super.onDestroy();
        Session.getCurrentSession().removeCallback(callback);
    }
    
    private class SessionCallback implements ISessionCallback
    {
        @Override
        public void onSessionOpened()
        {
            redirectSignupActivity();
        }
        
        @Override
        public void onSessionOpenFailed(KakaoException exception)
        {
            if (exception != null)
            {
                Logger.e(exception);
            }
        }
    }
    
    protected void redirectSignupActivity()
    {
        final Intent intent = new Intent(this, MainActivity.class);
        startActivity(intent);
        finish();
    }
}

 

 

 

I로그인 버튼 추가하기

> activity_main.xml

<com.kakao.usermgmt.LoginButton
    android:id="@+id/com_kakao_login"
    android:layout_width="0dp"
    android:layout_height="wrap_content"
    android:layout_weight="1"
    android:layout_marginBottom="30dp"
    android:layout_marginLeft="20dp"
    android:layout_marginRight="20dp"/>

로그인 버튼을 포함하는 FrameLayout이며 카카오에서 제공합니다.

 

자신의 앱 테마와 맞지않아 커스텀하여 적용하시고 싶을 경우가 있으실 겁니다. 

그것은 다음 포스팅에서 알아보겠습니다.

 

 

 

도움이 되셨다면 공감 '꾸욱' 부탁드리며,

잘못된 곳이 있거나 궁금한 점이 있으실 경우 댓글이나 카카오톡 아이디검색 : wkd13927으로 말씀주시면 감사하겠습니다.

댓글