왕현성
코딩발자취
왕현성
전체 방문자
오늘
어제
  • 코딩 (277)
    • Python (71)
    • Java (16)
    • MySQL (34)
    • 인공지능 (48)
      • 머신러닝 (16)
      • 딥러닝 (32)
    • 영상처리 (4)
    • Rest API (21)
    • Android Studio (25)
    • streamlit (13)
    • DevOps (22)
      • AWS (9)
      • PuTTY (5)
      • Git (4)
      • Serverless (2)
      • Docker (2)
    • IT 기술 용어 (6)
    • 디버깅 ( 오류 해결 과정 ) (17)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • OpenCV
  • 비지도학습
  • 기상탐사
  • ckpt_file
  • 딥러닝
  • labelme UnocodeDecodeError
  • 영상기술
  • alibi-detection
  • encoding='utf-8'
  • imageprocessing
  • PYTHON
  • unsupervised
  • matplotlib
  • get_long_description
  • maskimage
  • labelme
  • PIL
  • tune()
  • UnboundLocalError
  • 영상처리
  • 의료이미징
  • pip install labelme
  • alibidetect
  • yolov8
  • pytorch
  • numpy
  • 영상처리역사
  • ComputerVision
  • 컴퓨터비전
  • TensorFlow

최근 댓글

최근 글

티스토리

250x250
hELLO · Designed By 정상우.
왕현성

코딩발자취

Android - 카카오 로그인 API를 이용해 간편 로그인 기능 구현하기
Android Studio

Android - 카카오 로그인 API를 이용해 간편 로그인 기능 구현하기

2023. 4. 3. 09:52
728x90

안드로이드 스튜디오를 이용해 내 앱에서 카카오 로그인 API로 간편 로그인 구현하기

아래 페이지로 가서 로그인 후 내 애플리케이션을 등록해줍니다.

(https://developers.kakao.com/)

 

애플리케이션 등록을 하면 네이티브 앱 키를 얻을 수 있습니다.

(네이티브 앱 키를 확인하려면 내 애플리케이션 > 앱 설정 > 요약정보로 들어가면 확인이 가능합니다.)

 

좌측의 플랫폼으로 들어가서 Android 플랫폼 등록을 클릭하여 등록해줍니다.

 

키 해시를 얻기 위해서는 안드로이드 스튜디오를 실행 시켜 아래 코드를 입력해 로그를 확인하고

확인한 로그를 키해시에 입력해주면 플랫폼 등록은 완료된다

 

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        // getKeyHash() 메서드를 호출하여 키해시를 얻습니다.
        String keyHash = getKeyHash(this, getPackageName());
        Log.d("KeyHash", keyHash);
    }

    // 키해시를 얻기 위한 메서드
    public static String getKeyHash(Context context, String packageName) {
        PackageInfo packageInfo;
        try {
            packageInfo = context.getPackageManager().getPackageInfo(packageName, PackageManager.GET_SIGNATURES);
        } catch (PackageManager.NameNotFoundException e) {
            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.e("KeyHash", "Unable to get MessageDigest. signature=" + signature, e);
            }
        }
        return null;
    }
}

그리고 사용할 기능을 on 처리 해줍니다.(카카오 로그인)

그리고 밑의 Redirect URI가 등록되어있지 않으면 카카오 로그인시 에러가 난다하니 임의로 적어줍니다.

 

등록을 다 하였다면 동의항목을 설정해줍니다.

동의항목에 설정한 항목들은 유저가 카카오 로그인시에 카카오 서비스에 등록한 사용자의 정보를 가지고 올 수 있으니

필요한 정보를 체크해줍니다.

(이메일 필수 동의는 내 애플리케이션 > 앱 설정 > 비즈니스에 사업자 정보를 등록해야합니다.)

 

웹에서 하는 설정은 끝났습니다.

이제 Android에서 구현하기 위해 Gradle을 먼저 설정해 줍니다

 

settings.gradle 파일의 dependencyResolutionManagement에 repositories 안에 아래 코드를 추가해줍니다

 

maven { url 'https://devrepo.kakao.com/nexus/content/groups/public/' }

build.gradle(Module) 파일의 dependencies에 필요한 모듈을 설치해줍니다.

// 카카오 로그인
implementation 'com.kakao.sdk:v2-user:2.10.0'

Android SDK를 사용하기 위해서 가장 먼저 네이티브 앱 키로 초기화를 해야 하기때문에 클래스를 새로 만들어 초기화 코드를 추가해줍니다.

public class kakaoApplication extends Application {
    @Override
    public void onCreate() {
        super.onCreate();
        KakaoSdk.init(this, {KAKAO_NATIVE_APP_KEY});
    }
}

AndroidManifest.xml 파일에 인터넷 권한과 kakaoApplication 클래스를 추가합니다.

 

// 인터넷 권한
<uses-permission android:name="android.permission.INTERNET" />

// kakaoApplication 추가
<activity
    android:name="com.kakao.sdk.auth.AuthCodeHandlerActivity"
    android:exported="true">
    <intent-filter>
        <action android:name="android.intent.action.VIEW" />

        <category android:name="android.intent.category.DEFAULT" />
        <category android:name="android.intent.category.BROWSABLE" />

        <data
            android:host="oauth"
            android:scheme={KAKAO_NATIVE_APP_KEY}/>
    </intent-filter>
</activity>

위에서 생성한 kakaoApplication 를 application name에 등록해줍니

 

<application
    android:name=".kako.kakaoApplication"

아래는 제가 구현한 코드 예시입니다.

로그인이 성공하면 회원 정보를 받아 등록하는 형식으로 코드를 입력했습니다

(레이아웃 이미지는 공식 홈페이지에서 제공합니다 https://developers.kakao.com/tool/resource/login)

 

public class LoginActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_login);
        
		imgKakao.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                // 카카오 로그인 구현
                if(UserApiClient.getInstance().isKakaoTalkLoginAvailable(LoginActivity.this)){
                    login();
                }
                else {
                    accountLogin();
                }
            }
        });
        
        public void login(){
        String TAG = "login()";
        UserApiClient.getInstance().loginWithKakaoTalk(LoginActivity.this,(oAuthToken, error) -> {
            if (error != null) {
                Log.e(TAG, "로그인 실패", error);
            } else if (oAuthToken != null) {
                // 로그인 성공시 사용자 정보 받아오기
                getUserInfo();
            }
            return null;
        });
    }

    public void accountLogin(){
        String TAG = "accountLogin()";
        UserApiClient.getInstance().loginWithKakaoAccount(LoginActivity.this,(oAuthToken, error) -> {
            if (error != null) {
                Log.e(TAG, "로그인 실패", error);
            } else if (oAuthToken != null) {
                // 로그인 성공시 사용자 정보 받아오기
                getUserInfo();
            }
            return null;
        });
    }
    public void getUserInfo(){
        String TAG = "getUserInfo()";
        UserApiClient.getInstance().me((user, meError) -> {
            // 사용자 정보 요청 실패
            if (meError != null) {
                Log.e(TAG, "사용자 정보 요청 실패", meError);
            } else {
                // 사용자 정보 요청(성공 정보 받아오기)
                setUser = new User();
                setUser.setEmail(user.getKakaoAccount().getEmail());
                setUser.setName(user.getKakaoAccount().getProfile().getNickname());

                // 받아온 정보로 회원 등록
                setUserInfo();
            }
            return null;
        });
    }

'Android Studio' 카테고리의 다른 글

Android - RecyclerView, Fragment의 클릭 이벤트 처리하기  (0) 2023.02.15
Android - Fragment 탭바를 이용하여 각각의 다른 화면으로 전환하기  (0) 2023.02.15
Android - Retrofit Multipart 사용 방법, 파일 업로드하기  (0) 2023.02.14
Android - 카메라와 사진첩을 이용하여 이미지 뷰에 사진 출력하기  (0) 2023.02.13
Android - 네트워크 통신 Retrofit2 Library  (0) 2023.02.09
    'Android Studio' 카테고리의 다른 글
    • Android - RecyclerView, Fragment의 클릭 이벤트 처리하기
    • Android - Fragment 탭바를 이용하여 각각의 다른 화면으로 전환하기
    • Android - Retrofit Multipart 사용 방법, 파일 업로드하기
    • Android - 카메라와 사진첩을 이용하여 이미지 뷰에 사진 출력하기
    왕현성
    왕현성
    AI 머신비전 학습일지

    티스토리툴바