안드로이드 스튜디오를 이용해 내 앱에서 카카오 로그인 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 |