카카오 로그인 기능을 추가하기 위해서는 kakao developers 사이트에 들어가서 내 어플리케이션 등록을 해야한다.
https://developers.kakao.com/
등록을 한 후, 플랫폼 등록이라는 설정이 있는데, 안드로이드 플랫폼 등록할때 키해시를 넣는 곳이 있다. 여기부분에는 터미널에 아래 명령어를 치면 얻을 수 있음.
keytool -exportcert -alias androiddebugkey -keystore ~/.android/debug.keystore -storepass android -keypass android | openssl sha1 -binary | openssl base64
그리고 위의 사진과 같이 카카오로그인 on을 시켜야 함.
이제 androidMenifest.xml 파일에 추가해준다.
<activity android:name="com.kakao.sdk.flutter.AuthCodeCustomTabsActivity">
<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" />
<data android:scheme="kakao네이티브앱키" android:host="oauth"/>
</intent-filter>
</activity>
Main.dart에 추가
Future<void> main() async {
KakaoSdk.init(nativeAppKey: '네이티브 앱 키');
runApp(const MyApp());
}
네이티브앱키는 카카오 문서에 앱 키 항목을 누르면 나옴
Information Property List 에 KAKAO_APP_KEY 항목을 추가하고 value에 kakao{네이티브 앱 키}를 입력해주면 됨. 물론 플랫폼 등록도 해줘야함
kakaoLogin() async {
if (await isKakaoTalkInstalled()) {
try {
await UserApi.instance.loginWithKakaoTalk();
print('카카오톡으로 로그인 성공');
} catch (error) {
print('카카오톡으로 로그인 실패 $error');
// 사용자가 카카오톡 설치 후 디바이스 권한 요청 화면에서 로그인을 취소한 경우,
// 의도적인 로그인 취소로 보고 카카오계정으로 로그인 시도 없이 로그인 취소로 처리 (예: 뒤로 가기)
if (error is PlatformException && error.code == 'CANCELED') {
return;
}
// 카카오톡에 연결된 카카오계정이 없는 경우, 카카오계정으로 로그인
try {
await UserApi.instance.loginWithKakaoAccount();
print('카카오계정으로 로그인 성공');
} catch (error) {
print('카카오계정으로 로그인 실패 $error');
}
}
} else {
try {
await UserApi.instance.loginWithKakaoAccount();
print('카카오계정으로 로그인 성공');
} catch (error) {
print('카카오계정으로 로그인 실패 $error');
}
}
}
버튼을 하나 생성하고 이 함수를 실행시켰더니 동의항목에서 되지 않았다.
에러 메세지 :
Local module descriptor class for com.google.android.gms.providerinstaller.dynamite not found.
구글링을 여러차례 시도해보고 그냥 애뮬에 있는 어플 삭제하고 다시돌려보자 해서 다시돌렸더니 정상 작동 됨..
막막할때는 그냥 어플을 지웠다가 다시 실행시키는것도 하나의 방법인 것 같다.
뭔가 찜찜한 성공이긴 하지만...
이제 저 예제코드에 로그인을 성공했을때 등 여러 조건들을 붙혀서 사용하면 될것 같다.