[flutter + firebase AppleID] flutterでApple ID認証を実装する時の大きな落とし穴

AppStoreにて公開しようとしたところ、ガイドラインに引っかかったとの連絡が。

Guideline 5.1.1 - Legal - Privacy - Data Collection and Storage

We still noticed that after users authenticate their account with Sign in with Apple, they are required to take additional steps before they can access content and features in your app. Specifically:

- Your app requires users to provide their name after using Sign in with Apple.

要は「AppleIDでログインしたらユーザーの名前取得できるから、初期値で入力した状態にしておいて」ということ。
しかしこれ、Firebase Authenticationを使って実装する場合は気をつけないといけないことが。。

ちなみにsign_in_with_appleパッケージを使っています。

落とし穴その1

firebaseを使っている場合、

    String result = '';
    final FirebaseAuth _auth = FirebaseAuth.instance;
    auth.User? _currentUser = _auth.currentUser;

で取得できます。
解説すると、Apple ID以外で認証した場合は_currentUserのdisplayNameにユーザ名(表示名)が存在するのですが、AppleIDにおいてはそもそもここでは受け取れません。「初回ログイン時にのみ、Credentialにて取得できる」と言われているのです。

      final appleIdCredential = await SignInWithApple.getAppleIDCredential(
        scopes: [
          AppleIDAuthorizationScopes.email,
          AppleIDAuthorizationScopes.fullName,
        ],
      ); //このappleIdCredentialに存在

これに気づくまでが1つ目の落とし穴。

落とし穴その2

じゃあこの「初回ログイン」ってどのような意味かわかりますか?実はfirebase上にログイン情報が作成されたかどうかではないのです。iOS端末にて、設定-AppleID情報見れるとこ-パスワードとセキュリティ-AppleIDを使用中のApp ここにデータが存在するかどうかなのです。

何故かCredentialでデータが取得できないという状況に陥っていた方はここを確認してみましょう。もしデータが存在していた場合は削除すると、取得できます。

まとめ

そもそも自分が作っているアプリは匿名性を大切にしたSNSだったので、「そもそもAppleIDに登録している名前を使って欲しくないんだけど」というような内容で異議申し立てしたのですが無視されました。なんとも言えないですね。