Вход в систему Flutter Apple - пустой адрес электронной почты

Я пытаюсь добавить Apple Sign In в свое приложение Flutter для iOS с помощью пакета apple_sign_in.

Код в основном рабочий. Моя проблема в том, что вызов _firebaseAuth.signInWithCredential(credential) создает учетную запись firebase с нулевым идентификатором (см. Снимок экрана ниже).

Одна странность в этом заключается в том, что, когда пользователь выбирает вариант поделиться своим адресом электронной почты при регистрации, result.credential.email содержит адрес электронной почты пользователя после вызова AppleSignIn.performRequests(). Поэтому я действительно озадачен, почему электронная почта пользователя не используется в качестве идентификатора при создании учетной записи в Firebase.

  Future<FirebaseUser> signInWithApple() async {
    final AuthorizationResult result = await AppleSignIn.performRequests([
      AppleIdRequest(requestedScopes: [Scope.email, Scope.fullName])
    ]);

    switch (result.status) {
      case AuthorizationStatus.authorized:
        final AppleIdCredential appleIdCredential = result.credential;

        OAuthProvider oAuthProvider =
        new OAuthProvider(providerId: "apple.com");

        final AuthCredential credential = oAuthProvider.getCredential(
          idToken: String.fromCharCodes(appleIdCredential.identityToken),
          accessToken: String.fromCharCodes(
              appleIdCredential.authorizationCode),
        );

        await _firebaseAuth.signInWithCredential(credential);
        return _firebaseAuth.currentUser();

        break;

      case AuthorizationStatus.error:
        print('Sign in failed: ${result.error.localizedDescription}');
        break;

      case AuthorizationStatus.cancelled:
        print('User cancelled');
        break;
    }

    return null;
  }

введите описание изображения здесь


person spookymodem    schedule 30.07.2020    source источник


Ответы (2)


Я считаю, что это работает как задумано;

Apple возвращает полное имя и адрес электронной почты только при первом входе в систему на устройстве для вашего приложения, она вернет для них нулевые значения при любом входе в систему после этого. Я предполагаю, что вы вошли в систему ранее, а затем попытались войти снова через нового пользователя Firebase Auth, и имя / адрес электронной почты больше не доступны в этот момент.

В целях тестирования, чтобы получить их снова; зайти в настройки вашего устройства; Настройки ›Apple ID, iCloud, iTunes и App StoreПароль и безопасностьПриложения Используя ваш Apple ID, нажмите на свое приложение и нажмите« Прекратить использование Apple ID »< / сильный>. Теперь вы можете войти снова, и вы снова получите полное имя и электронную почту.

Именно так Apple разработала свой API - поэтому рекомендуется хранить их в другом месте в своем приложении, например с помощью плагина shared_preferences - чтобы у вас всегда был к ним доступ, когда это необходимо.

person Tanvir Ahmed    schedule 14.01.2021
comment
Да, в самом деле! Это дизайн входа в систему от Apple. Только что понял, что все учетные данные извлекаются только один раз - person stan; 28.01.2021

Проблема в iOS 13.6 в 13.5. У меня есть имя, адрес электронной почты, токен, идентификатор. но в iOS 13.6 возвращается только идентификатор пользователя. Я использую зависимость sign_in_with_apple (https://pub.dev/packages/sign_in_with_apple).

person Julio Heberto Gonzalez Morales    schedule 31.07.2020
comment
Я получаю то же самое с iOS 14. Вы знаете, есть ли решение для этого? - person Kitcc; 14.10.2020
comment
Вы нашли решение, пожалуйста? - person Octet; 20.10.2020
comment
та же проблема, любое решение? - person Abdullah Khan; 02.03.2021