-
Flutter - 구글 로그인 초기, 구현, 로그아웃개발/Flutter 2021. 9. 14. 16:07반응형
1. 구글로그인 초기 세팅
firebase 프로젝트에서 Authentication에서 sign-in method 에서 google를 활성화 시켜준다. 그 후 프로젝트 설정으로 들어가서 하단에 SHA certificate fingerprints 부분이 입력 되어 있어야 한다. 이 부분을 확인하기 위해 android studio 에서 terminal로 간 후 cd android 폴더로 변경해준다. 그 후 ./gradlew signingReport를 입력해주면 무언가 쭉 뜬다. 그러면 testing 중이라면 variang가 debug 인것 에서 sha1을 입력해주면 된다. sha-256도 업력해주면 된다. 그러나 출시 하려는 앱이라면 variant가 release 부분을 입력 해주면 된다. 하지만 현재는 config가 debug인데 store의 keystore를 해주면 release로 바뀌기 때문에 그때 해주면 된다. 하지만 맥에서만 ./gradlew signingReport 이게 정상 작동하는거 같아서 gradlew signingReport 로 실행했더니 정상작동함을 알 수 있었다.
이로써 세팅은 끝이다.
2. 로그인 구현
auth_page의 google 버튼을 찾아서 onPressed를 지워주고 하단에 _signInWithGoogle 메소드를 만들어준다.
void _signInWithGoogle() { print("google"); }
현재 잘 작동하나 확인하기 위한 메소드이다.
그리고 pub.dev에서 google_sign_in 을 찾아서 dependencies에 넣어준다. 5.0.0이상은 null safety 적용된 버전이라 강의와 맞추기 위해 4.5.9를 해준다. 나중에 바꾸자.
google 로그인을 위해 다음과 같이 메소드를 변경 해준다.
Future<UserCredential> _signInWithGoogle() async { final GoogleSignInAccount googleUser = await GoogleSignIn().signIn(); //유저가 버튼 클릭시 구글 로그인 팝업 창이 뜨고 로그인 하는 부분 final GoogleSignInAuthentication googleAuth = await googleUser.authentication; // 받아온 정보를 저장 final GoogleAuthCredential credential = GoogleAuthProvider.credential( //firebase에 로그인 하기위해 credential을 불러와서 저장 accessToken: googleAuth.accessToken, idToken: googleAuth.idToken, ); final UserCredential userCredential = await FirebaseAuth.instance.signInWithCredential(credential); // firebase에서 로그인함 return userCredential; }
구글 정보를 받아와 firebase에 맞게 변경하고 가입과 로그인을 하는 부분이다. onPress 부분은 _signInWithGoogle 로만 작성 하면 정상적으로 동작한다.
여기서 에뮬레이터가 google play store가 없으면 로그인이 안되므로 플레이스토어가 있는 에뮬레이터로 실행해준다.
그 결과 정상 작동 함을 알 수 있었다.
3.IOS 구글 로그인은 IOS 관련 개발을 할 수 없는 관계로 넘어간다.
4. 로그아웃
my_home에서는 firebase부분만 로그아웃 됨. 구글 로그인은 sign in 상태이므로 로그아웃 시켜줘야함. page_notifier에서 하도록 작성. 현재 로그인 상태에 대한 부분이 저장되있으므로 찾아서 그에 해당하는 로그아웃을 해줌
enum SignInMethodFlag{ email,google,facebook,apple }
페이지의 가장 하단에 위 코드를 작성해 로그인에 관련된 부분을 불러 오면 됨.
최고 상단에
SignInMethodFlag _signInMethodFlag = SignInMethodFlag.email;
기본 상태를 이메일로 지정해둠.
String providerId = user.providerData.length >0? user.providerData[0].providerId:""; switch(providerId){ case "google.com": _signInMethodFlag = SignInMethodFlag.google; break; case "facebook.com": _signInMethodFlag = SignInMethodFlag.facebook; break; case "apple.com": _signInMethodFlag = SignInMethodFlag.apple; break; default: _signInMethodFlag = SignInMethodFlag.email; break; }
PageNotifier 부분의 else 부분(로그인 되었을때)에 위 코드를 작성해서 providerId 부분에 들어가 있는 값이 무엇인지 가져와서 _signInMethodFlag 부분을 변경 시켜줌.
switch(_signInMethodFlag){ case SignInMethodFlag.google: GoogleSignIn().signOut(); break; case SignInMethodFlag.facebook: // todo: 페이스북 로그아웃 break; case SignInMethodFlag.apple: // todo: 애플 로그아웃 break; default: break; }
위코드는 if 부분에 넣는 것으로 로그아웃을 해서 user가 null 이되면 소셜 로그인도 로그아웃 시켜주는 부분임.
정확히 위에 코드들을 잘 넣으면 정상 로그인이 되고 로그아웃 후 다시 구글 로그인을 불러오는것을 알 수 있음.
반응형'개발 > Flutter' 카테고리의 다른 글
Flutter - 광고 넣기, firebase_admob 라이브러리 개발 중지로 다른 방법 찾아봐야 할듯. (0) 2021.09.28 Flutter - 페이스북 로그인, 애플로그인 (0) 2021.09.28 Flutter - 로그인시 에러, 이메일 인증 확인, 템플릿 변경, login (0) 2021.09.14 Flutter - 이메일 로그인 초기설정 및 프로젝트 생성, email 로그인 설정 (0) 2021.09.13 Flutter - 로그인 가입 전환 토글, 페이지 정렬, 버튼 누를 때 나타내기와 숨기기, 메인 페이지로 가기 (0) 2021.09.10 댓글