[Flutter]Sign in apple 사용시 fullName 이 등록 되지 않는 이유

Arcanine·2023년 4월 27일
0

예전에 버그 인줄 알고 한참 찾다 알게 된 사실을 공유 합니다 😀

서비스 특성상 간편 로그인을 하면 해당 계정의 이름을 가져와 서비스에서 보여주고 있습니다. 근데 회원가입할 때 작성한 애플 계정의 이름이 노출 안되고 FirebaseAuth.instance.currentUser!.displayName 을 call 하면 null 이 나오더라구요. (android 는 안그러는데…)

먼저, apple 로 로그인 시 appleCredential 을 요청해서 가져옵니다.

final appleCredential = await SignInWithApple.getAppleIDCredential(
  scopes: [
    AppleIDAuthorizationScopes.email,
    AppleIDAuthorizationScopes.fullName,
  ],
  nonce: nonce,
);

만약 firebaseAuth 라이브러리를 쓰고 있다면 UserCredential 정보를 받습니다.

final oauthCredential = OAuthProvider("apple.com").credential(
  idToken: appleCredential.identityToken,
  rawNonce: rawNonce,
);
UserCredential userCredential =
    await FirebaseAuth.instance.signInWithCredential(oauthCredential);

이 때, 애플로그인 유저의 이름을 알고 싶다면, appleCredential.givenName, appleCredential.familyName 을 통해 받을 수 있습니다.
단, 이 API 는 최초 회원가입 한번만 제공하기 때문에, 그때 제대로 유저 정보를 업데이트를 못하면, name이 null 이 되는 불상사가…

해결방법

이 방법처럼 userCredential.user 정보를 업데이트 해주면, FirebaseAuth에도 자동으로 연동되어 FirebaseAuth.instance.currentUser!.displayName 이 제대로 나옵니다.

애플로 로그인 시 최초 한번만 이름을 제공한다는 사실을 몰라 방어코드를 작성하는 등 헤맸는데요. ios 정책을 알아야만 해결할 수 있는 문제라 또 한번 apple 의 어마무시함을 느꼈네요 ㅋㅋㅋ

ref)
FirebaseAuth - issue
AuthorizationAppleID - issue

profile
Flutter Developer

0개의 댓글