Android

Android SNS 로그인 (카카오톡)

Dean83 2022. 3. 24. 23:02

참조 : https://developers.kakao.com/docs/latest/ko/kakaologin/android

현재 카카오톡은 코틀린으로만 제공되고 있고, 자바는 구 버전형태로 제공되고 있음. 
코틀린과 자바를 혼용 사용하여 개발하는방법으로 구현 필요. 

1. 코틀린과 자바 혼용 방법
    - 코틀린 클래스를 추가하면, 안드로이드 스튜디오에 에러 및 안내창이 뜬다. 클릭을 통해 업데이트, 설치 등을 하게되면 자동으로 세팅을 한다. 
    - 호출방법은 기존 함수 이용방법과 동일함. 

2. 어플리케이션 추가 및 설정
    - Developers.kakao 에서 어플리케이션 추가, keystore의 hash값 추가 및 안드로이드 설정 해야 함. 릴리즈 디버그 해쉬 포함 필요

keytool -exportcert -alias "키앨리어스값" -keystore "키스토어 위치 및 파일명" | "openssl설치위치\bin\openssl" sha1 -binary | "openssl설치위치\bin\openssl" base64


    - gradle 수정 (app) : implementation "com.kakao.sdk:v2-user:2.2.0" // 카카오 로그인 추가
    - gradle 수정 (가장 바깥쪽) : 

buildscript { 와 allprojects { 에 maven { url 'https://devrepo.kakao.com/nexus/content/groups/public/' } 추가

3. Manifest.xml 수정
     - developers.kakao 에서 추가한 어플리케이션의 네이티브 키를 입력해야함.

<intent-filter>
            <action android:name="android.intent.action.VIEW" />
            <category android:name="android.intent.category.DEFAULT" />
            <category android:name="android.intent.category.BROWSABLE" />

            <!-- Redirect URI: "kakao{NATIVE_APP_KEY}://oauth“ -->
            <data android:host="oauth"
                android:scheme="kakaob9323959b9655e836eea203eabc5f714" />
        </intent-filter>

4. 초기화
     - 프로그램 시작점에 KakaoSdk.init(context,"b9323959b9655e836eea203eabc5f714") 코드를 호출해야함. 네이티브 키값임

5. 로그인 및 회원정보 가져오기|
 

//로그인 호출 코드의 콜백 등록. KakaoLoginCallback 라는 인터페이스 별도 생성
lateinit var m_callback : KakaoLoginCallback

//초기화시 콜백을 받아 맴버변수 저장 및 카카오 sdk 초기화
    fun Init(context : Context, callaback : KakaoLoginCallback)
    {
        m_callback = callaback
        KakaoSdk.init(context,"b9323959b9655e836eea203eabc5f714")
    }

 fun Login(context : Context)
    {
        //카카오톡 설치여부 확인 후 설치되어 있으면 카카오 로그인, 안되어 있으면 브라우저 로그인
        if(LoginClient.instance.isKakaoTalkLoginAvailable(context))
        {
            LoginClient.instance.loginWithKakaoTalk(context, callback = kakaoLoginCallback)
        }
        else
        {
            LoginClient.instance.loginWithKakaoAccount(context, callback = kakaoLoginCallback)
        }
    }

    // 로그인 결과 콜백.
    val kakaoLoginCallback : (OAuthToken?, Throwable?) -> Unit = {
        token, error ->
        if(error != null)
        {
            m_callback.loginFailCallback(error.message)
        }
        else if(token != null)
        {
            //회원 정보 취득 
            UserApiClient.instance.me { user, userError ->
                if(userError != null)
                {
                    m_callback.loginFailCallback(userError.message)
                }
                else if(user != null)
                {
                    m_callback.loginSuccessCallback(user.kakaoAccount?.email)
                }
            }
        }
    }