⛔ 문제사항
Firebase Google Login을 연동하던 중의 연장선이다. 힘겹게 Google Login 로직을 다 작성하고 이제 성공하나! 싶었는데 무엇 하나 쉽게 되지 않는다더니 정말로 에러가 발생해버렸다.
com.google.android.gms.common.api.ApiException: 10 이런 에러가 발생했는데, 내 소중한 짝꿍 Gemini에게 물어보니 다양한 원인이 있다고 친절하게 설명해줬다.
내가 추측한 문제로는 단연 SHA-1 키의 불일치 문제였다. Firebase Console에서 우리 프로젝트의 SHA 인증서 지문에서는 SHA 키가 2개 등록 되어있었기 때문이다. 밑에 노란색으로 경고 표시가 뜬 SHA-1 키가 내가 구글 로그인을 연동하며 추가한 것이고, 위에 멀쩡한 키는 팀장 친구가 Firebase를 세팅하며 초기에 가장 먼저 추가해둔 SHA-1 키였다. 그렇다 보니 노랗게 경고 뜬 SHA-1 키가 OAuth에 등록되어있던 것이다.
(구글링 하다보니 2개 등록 되어있어도 잘 되는 케이스가 있는 것 같았는데, 일단 나의 경우에는 아니었다.)
✅ 해결방안
튜터님이 제시하신 원인으로는, SHA-1 키값이 각각 local 마다 달라서 발생하는 이슈로 파악된다고 하셨다. keyStore를 생성하고 세팅해주면 동일한 SHA-1 키값이 나올 것이며 이를 다시 SHA 인증서 지문으로 등록하면 해결될 것!
1. keyStore 생성
$keytool -genkey -v -keystore ~/key.jks -keyalg RSA -keysize 2048 -validity 10000 -alias key
jks 파일을 생성해준다. 나는 늘 터미널에서 해왔기 때문에 터미널로 작업을 했지만 안드로이드 스튜디오에서 GUI로도 keyStore를 만들 수 있도록 제공해주기 때문에 편한 방법을 선택하면 된다.
(작년에 배포하며 내가 기록해둔 포스팅을 참고했다. 역시 기록의 중요성!)
2. key.properties 파일 참조
keyAlias=key
keyPassword=<키생성시 입력한 암호>
storeFile=./key.jks
storePassword=<키생성시 입력한 암호>
app 단에서 key.properties를 생성하여 위와 같이 코드를 작성해준다.
그리고 생성된 key.jks 파일도 함께 app 폴더에 넣어주면 된다. 참고로, key.jks파일은 재생성이 불가능하고 특히 배포할 때에도 필수로 필요한 key 값이므로 꼭 잘 보관하고 있어야 한다. key.jks 파일과 key.properties는 git ignore 시켜주는 것도 잊지 말자!
3. gradle setting
val keyPropertiesFile = rootProject.file("./app/key.properties")
val properties = Properties()
properties.load(FileInputStream(keyPropertiesFile))
android {
...
signingConfigs {
getByName("debug") {
storeFile = properties["storeFile"]?.toString()?.let { file(it) }
storePassword = properties["storePassword"]?.toString()
keyAlias = properties["keyAlias"]?.toString()
keyPassword = properties["keyPassword"]?.toString()
}
create("release") {
storeFile = properties["storeFile"]?.toString()?.let { file(it) }
storePassword = properties["storePassword"]?.toString()
keyAlias = properties["keyAlias"]?.toString()
keyPassword = properties["keyPassword"]?.toString()
}
}
...
}
app 단위의 gradle에서 signingConfigs를 통해 keyStore를 세팅 해준다.
4. Firebase에서 SHA-1 키값 새로 등록
그리고 새로 발급된 SHA-1 키 값을 Firebase에 새로 등록하고 기존에 등록되어 있던 SHA-1 키는 모두 삭제한다. 마지막으로 google-services.json을 다시 다운 받아 덮어씌워주면 완벽하게 작동한다.