signInWithAppleOnApple method
Future<User>
signInWithAppleOnApple(
)
Implementation
Future<User> signInWithAppleOnApple() async {
final rawNonce = generateNonce();
final nonce = sha256ofString(rawNonce);
final appleCredential = await SignInWithApple.getAppleIDCredential(
scopes: [
AppleIDAuthorizationScopes.email,
AppleIDAuthorizationScopes.fullName,
],
nonce: nonce,
);
final oauthCredential = OAuthProvider('apple.com').credential(
idToken: appleCredential.identityToken,
rawNonce: rawNonce,
);
final UserCredential userCredential =
await FirebaseAuth.instance.signInWithCredential(oauthCredential);
if (userCredential.user?.displayName == null ||
(userCredential.user?.displayName != null &&
userCredential.user!.displayName!.isEmpty)) {
final fixDisplayNameFromApple = [
appleCredential.givenName ?? '',
appleCredential.familyName ?? '',
].join(' ').trim();
await userCredential.user?.updateDisplayName(fixDisplayNameFromApple);
}
if (userCredential.user?.email == null ||
(userCredential.user?.email != null &&
userCredential.user!.email!.isEmpty)) {
await userCredential.user?.updateEmail(appleCredential.email ?? '');
}
if (_firebaseAuth.currentUser != null) return _firebaseAuth.currentUser!;
throw Exception('_firebaseAuth.currentUser is null');
}