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

Posted

技术标签:

【中文标题】Flutter:如何从谷歌登录firebase获取生日? (安卓和iOS)【英文标题】:Flutter: How to get birthdate from google sign in firebase? (Android and iOS) 【发布时间】:2021-11-11 09:59:55 【问题描述】:

我想从 google 登录 firebase 获取生日,但我看不到任何生日。我能得到的唯一信息是显示名称、电子邮件、号码等。你能帮我吗?谢谢!

这是我使用 google 登录后获取用户信息的代码。

final GoogleSignIn _googleSignIn = GoogleSignIn();
var googleIdToken;
FirebaseUser user;

Future<FirebaseUser> signInWithGoogle() async 

   final GoogleSignInAccount googleSignInAccount = await _googleSignIn.signIn();
   final GoogleSignInAuthentication googleSignInAuthentication = await googleSignInAccount.authentication;

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

googleIdToken = googleSignInAuthentication.idToken;

final AuthResult authResult = await _auth.signInWithCredential(credential);
user = authResult.user;

AuthService().googleLogin(googleIdToken).then((val) 

  if (val.data['success']) 
     var token2 = val.data['token'];

     AuthService().getInfo(token2).then((val) async          
       var store = val.data['user'];
      
       await UserSimplePreferences.setEmail(store['email']);
       await UserSimplePreferences.setFirstName(store['firstname']);
       await UserSimplePreferences.setLastName(store['lastname']);
       await UserSimplePreferences.setUsername(store['username']);

      showDialog(context: context,
          builder: (BuildContext context)
            return  _SuucessLogin();
          );
      EasyLoading.dismiss();

     );
   else 
    print('WRONG EMAIL/ PASS');
  
);

assert(!user.isAnonymous);
assert(await user.getIdToken() != null);

final FirebaseUser currentUser = await _auth.currentUser();
assert(currentUser.uid == user.uid);

return user;

【问题讨论】:

【参考方案1】:

由于数据安全合规性,Google 不会直接在 API 响应中提供生日。它的作用是,当用户完成由您的 Firebase 应用程序发起的 google 登录时,它会通过弹出窗口提示用户让用户允许在生日时授予访问权限。

在您的 firebase google 身份验证配置中,您必须为生日定义如下范围。

signInOptions: [
  
    provider: fb.auth.GoogleAuthProvider.PROVIDER_ID,
    scopes: [
      "https://www.googleapis.com/auth/user.birthday.read",
      "https://www.googleapis.com/auth/userinfo.profile"
    ],
    customParameters: 
      prompt: "select_account"
    
  ,

按照此处的帖子了解如何在 google 登录提供程序 https://firebase.google.com/docs/auth/web/google-signin 中添加范围

【讨论】:

我应该把那部分代码放在哪里?我遇到了一个错误。 您需要更改 GoogleSignIn() 实例或您在代码中配置身份验证提供程序的任何位置。阅读此链接了解详情pub.dev/documentation/firebase_auth_platform_interface/latest/…

以上是关于Flutter:如何从谷歌登录firebase获取生日? (安卓和iOS)的主要内容,如果未能解决你的问题,请参考以下文章

Flutter从谷歌地图获取坐标

Flutter + Firebase:如何实现“谷歌登录”

如何在flutter中将标记从firebase(真实数据库)检索到新的google maps api

如何从谷歌 api 令牌中获取数据?

如何在flutter中使用firebase登录谷歌时检查用户是新用户还是现有用户?

如何在颤振中从谷歌地图获取位置的经纬度坐标?