在 Flutter 中使用 Google 登录获取用户的生日/性别

Posted

技术标签:

【中文标题】在 Flutter 中使用 Google 登录获取用户的生日/性别【英文标题】:Get user's birthday/gender using Google Sign-In in Flutter 【发布时间】:2020-05-07 17:15:56 【问题描述】:

我想使用 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;
  

【问题讨论】:

flutter.dev/docs/development/data-and-backend/google-apis 【参考方案1】:

我希望这对面临同样问题的其他人有用:)

 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=",
      headers: 
        "Authorization": headers["Authorization"]
      
    );
    final response = JSON.jsonDecode(r.body);
    return response["genders"][0]["formattedValue"];
  

【讨论】:

您需要先为您的项目启用 Google People API flutter.dev/docs/development/data-and-backend/google-apis 你好,过生日怎么样??

以上是关于在 Flutter 中使用 Google 登录获取用户的生日/性别的主要内容,如果未能解决你的问题,请参考以下文章

使用firebase和flutter登录google后获取用户详细信息

Firebase + Flutter:获取用于登录的平台用户

Flutter:如何从谷歌登录firebase获取生日? (安卓和iOS)

在 Flutter 中使用 Google 登录的错误 403 受限客户端

在 Flutter 中使用 Firebase/Google 登录时无法注销并重定向到 LoginPage

如何在 Flutter 中使用 rest api 不使用 firebase 以 google 或 facebook 登录