flutter로 firebase , google_sign_in를 이용하여 구글로그인 구현 시 IOS에서는 문제가 없으나
AOS에서만 idToken 이 null로 응답되는 문제가 발생하였습니다.
@override
Future<String> authorize() async {
final googleUser = await GoogleSignIn().signIn();
final googleAuth = await googleUser?.authentication;
return googleAuth?.idToken ?? "";
}
flutter google_sign_in 라이브러리를 통해 개발하게 되면 authentication을 통해 idToken을 얻어올 수 있는데
해당 값으로 서버에서 유효한 토큰인지 체크합니다.
하지만 안드로이드에서만 null로 나오는 문제가 발생하였고 계속하여 검색하기 시작했습니다.😢
firebase 가이드에는 안드로이드 프로젝트 레벨의 build.gradle과 모듈 레벨의 build.gradle 에 각각 의존성을 추가하라고 되어있지만
해당 의존성들을 추가하게 되면 코틀린 버전 충돌부터.. 수많은 문제들을 만나게 되었습니다.
결론은 strings.xml 에 default_web_client_id를 추가하여 해결할 수 있었습니다.
<resources>
<!-- Google Login (Web Client ID) -->
<string name="default_web_client_id">{client_id}</string>
<!-- // Google Login -->
</resources>
firebase에서 안드로이드 앱을 만들면 다운로드할 수 있는 google-services.json 파일을 확인하고
1. oauth_client의 client_type 이 "3"인 client_id를 default_web_client_id의 {client_id} 부분에 넣습니다.
혹시나 client_type 3인 client_id 가 없다면 firebase에서 그냥 웹앱 애플리케이션 하나 더 추가한 뒤 google-services.json 파일을 다시 받습니다.
2. 해당 client_id를 서버에서 인증할 때도 사용합니다.
해당 방법으로 해결은 되었으나 왠지 strings.xml 에 네이버로그인할 때 사용되었던
<string name="client_id">{naver_client_id}</string>
이 부분과 충돌이 있지 않았나 쉽기도 하네요.. (제거하고 해보진 않았습니다.)
저보다는 더 쉽게 찾아서 해결하시길 바라며 기록합니다...