AppleSigninのときFirebaseAuthのuserでdisplayName がない
更新日 2023/9/16
事象発生のバージョン : firebase_auth: 4.6.1
結論、addScopeの設定してなかっただけかも。
そもそも対応が必要になった背景
Appleの審査でAppleIDのユーザー名を利用しないと、リジェクトされる場合があった。
providerDataのDisplayNameをFirebaseAuthのDisplayNameとしてアップデートするサンプルコード
code:sample.dart
Future<UserCredential> signInByApple() async {
final appleProvider = AppleAuthProvider()
..addScope('email')
..addScope('name');
final result = await _auth.signInWithProvider(appleProvider);
// AppleのDisplayNameをFirebaseのDisplayNameに反映させる。
final appleDisplayName = result.user?.providerData
.firstWhere((element) => element.providerId == 'apple.com')
.displayName;
if (appleDisplayName != null) {
await result.user?.updateDisplayName(appleDisplayName);
await result.user?.reload();
}
return result;
}
※ sign_in_with_appleは利用していない。
※ 大元の参考
firebase_auth: 4.4.0以前ではバグが存在した。
紛らわしい挙動
アプリでログインを実装した際、displyaNameが取得できるのは「そのアプリでの最初ログインのみ」というのがある。
動作確認時はApple Idのアカウントまで入って、「Appleサインイン」の該当アプリで連携を停止する必要があった。
https://gyazo.com/a02c669b0df79942afc2715f66c55828
Androidでは「addScope」の指定がなくてもemail・name`の取得ができる模様
その他の設定が関わっているのかもしれないがiOSと挙動が異なり混乱の原因となった。
正しく実装できていればiOSでもログイン時に何の名前とメールアドレスを連携しようとしているか、表示される。