pubspec.yaml 파일에 종속성 추가
로그인 → 내 애플리케이션 → 애플리케이션 추가에서 현재 진행 중인 프로젝트 등록
해당 애플리케이션을 누르면 앱 키에 대한 정보가 보임
플랫폼 설정하기 클릭
Project → android → app → src → main →AndroidManifest.xml 파일에서 package명 복사
kakao developers에서 android 플랫폼 등록을 누른 후 패키지명에 방금 복사한 내용 작성
인터넷 사용 권한 설정하기
키 해시 등록하기
keytool -exportcert -alias androiddebugkey -keystore ~/.android/debug.keystore -storepass android -keypass android | openssl sha1 -binary | openssl base64
keytool -exportcert -alias <RELEASE_KEY_ALIAS> -keystore <RELEASE_KEY_PATH> | openssl sha1 -binary | openssl base64
keytool -exportcert -alias androiddebugkey -keystore %USERPROFILE%\.android\debug.keystore -storepass android -keypass android | openssl sha1 -binary | openssl base64
keytool -exportcert -alias androiddebugkey -keystore ~/.android/debug.keystore -storepass android -keypass android | openssl sha1 -binary | openssl base64
프로젝트 설정
<activity
android:name="com.kakao.sdk.flutter.AuthCodeCustomTabsActivity"
android:exported="true">
<intent-filter android:label="flutter_web_auth">
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" />
<!-- Redirect URI, "kakao${YOUR_NATIVE_APP_KEY}://oauth" 형식 -->
<data android:scheme="kakao${YOUR_NATIVE_APP_KEY}" android:host="oauth"/>
</intent-filter>
</activity>
카카오계정 정보 입력을 통한 로그인을 사용자에게 요청
Flutter SDK가 기본 브라우저를 사용해 카카오계정 로그인 페이지 열기
해당 페이지에서 사용자가 ID와 비밀번호를 입력해 카카오계정으로 로그인하면 앱 이용 관련 동의를 구하는 화면 출력
필수 항목에 동의한 뒤 [동의하고 계속하기]를 선택하면 인가 코드가 발급되고, flutter SDK가 인가 코드로 토큰을 발급받아 로그인을 완료
발급된 토큰은 Flutter SDK가 TokenManager를 통해 내부적으로 관리
카카오 로그인 구현 예제
try {
OAuthToken token = await UserApi.instance.loginWithKakaoAccount();
print('카카오계정으로 로그인 성공 ${token.accessToken}');
} catch (error) {
print('카카오계정으로 로그인 실패 $error');
}
social_login.dart 파일 생성 후 로그인과 로그아웃 기능을 관리하는 abstract class 생성 (비동기로 기능을 관리하기 때문에 Future 사용)
SocialLogin file을 implements한 kakao_login.dart 파일 생성 후 login() logout() override
logout()
@override
Future<bool> logout() async {
try {
await UserApi.instance.unlink();
return true;
}
catch (error) {
return false;
}
}
login()
Future<bool> login() async {
try {
bool isInstalled = await isKakaoTalkInstalled(); //카카오톡 설치 확인
if (isInstalled) { //설치되어 있다면
try { //카카오톡 로그인 시도
await UserApi.instance.loginWithKakaoTalk(); //카카오톡 로그인
return true; //성공하면 true
}
catch (error) { //error 발견하면
return false; //return false
}
}
else { //카카오톡 설치되어 있지 않다면
try { //카카오톡 계정으로 로그인 시도
await UserApi.instance.loginWithKakaoAccount(); //카카오톡 계정 로그인
return true; //성공하면 true
}
catch (error) { //error 발견하면
return false; //return false
}
}
}
catch (error) {
return false;
}
}
main_view_model.dart 파일을 생성해 사용자 정보 가져오기
class MainViewModel {
final SocialLogin _socialLogin;
bool isLogined = false; //처음에 로그인 안 되어 있음
User? user; //카카오톡에서 사용자 정보를 저장하는 객체 User를 nullable 변수로 선언
MainViewModel(this._socialLogin);
Future login() async {
isLogined = await _socialLogin.login(); //로그인되어 있는지 확인
user = await UserApi.instance.me(); //사용자 정보 받아오기
}
Future logout() async {
await _socialLogin.logout(); //로그아웃 실행
isLogined = false; //로그인되어 있는지를 저장하는 변수 false값 저장
user = null; //user 객체 null
}
}
native app key 넣고 kakao sdk 초기화
로그인 구현할 페이지에 MainViewModel 객체 생성
카카오톡 프로필 가져와서 띄우는 Widget 추가
로그인 버튼 Widget 추가
로그아웃 버튼 Widget 추가
SdkVersion 변경
android → app → build.gradle 에서 minSdkVersion을 수동으로 19 이상으로 조정
android → app → build.gradle 에서 compileSdkVersion을 수동으로 33 이상으로 조정
kakao developers → 내 애플리케이션 → 제품 설정 → 카카오 로그인에서 카카오 로그인 활성화
kakao developers → 내 애플리케이션 → 제품 설정 → 카카오 로그인 → 동의항목에서 수집할 정보들 설정
emulator에 카카오톡이 설치되어 있지 않기 때문에 로그인 버튼을 누르면 카카오 계정 로그인으로 이동
kakao developers에서 수집하는 정보들에 대한 제공 동의 화면