Получить день рождения / пол пользователя, используя Google Войти в Flutter - PullRequest
3 голосов
/ 21 января 2020

Я хочу узнать день рождения и пол пользователя, используя Firebase Auth и Google Sign-In. К сожалению, после входа в систему я получаю только электронную почту пользователя, отображаемое имя, ссылку на фотографию и номер телефона. Я видел, что могу добавить области к объекту GoogleSignIn, что я и делаю - https://www.googleapis.com/auth/user.birthday.read, https://www.googleapis.com/auth/userinfo.profile, но все же я не вижу никаких дополнительных данных после входа в систему , Любая идея, как получить результат этого? Потому что, когда эти области добавляются к объекту, он спрашивает меня, согласен ли я дать эти данные перед выполнением входа в систему, поэтому я предполагаю, что должен быть способ получить и отобразить их.

Вот мой код входа в систему :

  final GoogleSignIn _googleSignIn = GoogleSignIn(scopes: ["email", "https://www.googleapis.com/auth/user.birthday.read", "https://www.googleapis.com/auth/userinfo.profile"]);
  final FirebaseAuth _auth = FirebaseAuth.instance;

  Future<FirebaseUser> _handleSignIn() async {
    final GoogleSignInAccount googleUser = await _googleSignIn.signIn();
    final GoogleSignInAuthentication googleAuth = await googleUser.authentication;

    final AuthCredential credential = GoogleAuthProvider.getCredential(
      accessToken: googleAuth.accessToken,
      idToken: googleAuth.idToken,
    );

    final FirebaseUser user = (await _auth.signInWithCredential(credential)).user;
    return user;
  }

1 Ответ

0 голосов
/ 10 апреля 2020

Надеюсь, это станет полезным для всех, кто столкнулся с такой же проблемой:)

 GoogleSignIn googleSignIn = GoogleSignIn(scopes: ['email',"https://www.googleapis.com/auth/userinfo.profile"]);

  @override
  Future<User> login() async {
    await googleSignIn.signIn();
    User user = new User(
      email: googleSignIn.currentUser.email,
      name: googleSignIn.currentUser.displayName,
      profilePicURL: googleSignIn.currentUser.photoUrl,
      gender: await getGender()
    );

    return user;
  }

  Future<String> getGender() async {
    final headers = await googleSignIn.currentUser.authHeaders;
    final r = await http.get("https://people.googleapis.com/v1/people/me?personFields=genders&key=AIzaSyB9n6b3P_JDcVolJNYsDxokc4qf5B-q4Ac",
      headers: {
        "Authorization": headers["Authorization"]
      }
    );
    final response = JSON.jsonDecode(r.body);
    return response["genders"][0]["formattedValue"];
  }

...