예전에 버그 인줄 알고 한참 찾다 알게 된 사실을 공유 합니다 😀
서비스 특성상 간편 로그인을 하면 해당 계정의 이름을 가져와 서비스에서 보여주고 있습니다. 근데 회원가입할 때 작성한 애플 계정의 이름이 노출 안되고 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 의 어마무시함을 느꼈네요 ㅋㅋㅋ