macOS 中的 Firebase Auth SDK for Flutter 中不存在函数 SignInWithFacebook,但在 Windows 中存在

Posted

技术标签:

【中文标题】macOS 中的 Firebase Auth SDK for Flutter 中不存在函数 SignInWithFacebook,但在 Windows 中存在【英文标题】:Function SignInWithFacebook doesn't exist in Firebase Auth SDK for Flutter in macOS, but in Windows it exists 【发布时间】:2019-07-09 18:06:33 【问题描述】:

我今年开始使用 Flutter,所以我不是专家。 我正在尝试为 androidios 开发一个应用程序,其中包括使用 Firebase Auth 登录 Google 和 Facebook。

首先我在 Windows 的 Android Studio 中编写了代码,它可以正常工作,但是当我在 macOS 的 Android Studio 中编写代码时,某些代码行无法正常工作。我已经在 Firebase 控制台和 Facebook 上为开发人员“控制台”配置了 iOS 项目。我没有使用 CocoaPods 添加框架,而是在 Xcode 上手动完成的。

基本上,错误是:The method 'signInWithFacebook' isn't defined for the class 'FirebaseAuth'.

【问题讨论】:

【参考方案1】:

是的,signInWithFacebook 方法已从 FirebaseAuth 消失,现在我们使用 signInWithCredential 方法和 AuthCredentialFacebookAuthProvider 类来进行验证过程。我将放一个带有一些 cmets 的片段,只是为了说明如何使用 facebook 凭据在 firebase 中进行身份验证。希望对你有帮助...

/// in some point of your code you will get facebookLoginResult 

final facebookLoginResult = await facebookLogin
  .logInWithReadPermissions(['email', 'public_profile']);
FacebookAccessToken myToken = facebookLoginResult.accessToken;

///assuming sucess in FacebookLoginStatus.loggedIn
/// we use FacebookAuthProvider class to get a credential from accessToken
/// this will return an AuthCredential object that we will use to auth in firebase
AuthCredential credential= FacebookAuthProvider.getCredential(accessToken: myToken.token);

// this line do auth in firebase with your facebook credential.
FirebaseUser firebaseUser = (
  await FirebaseAuth.instance.signInWithCredential(credential)
).user;

/// ... do your things

【讨论】:

FacebookAccessToken和facebookLogin登录来自哪个包? 来自flutter_facebook_login 包。 @MarcosBoaventura 感谢这个提示。我能够成功登录,但由于某种原因,此更新后的用户对象没有电子邮件属性(显示名称很好)。猜猜为什么? @user1961 我看看 firebase_auth 插件 CHANGELOG 没有关于此类更改的信息,我还查看了插件实现 here 和 here 一切看起来都很好。跨度> @MarcosBoaventura 很奇怪 uid/displayName/photoUrl 都是从对象返回的罚款。电子邮件有些奇怪,好像它没有授权一样。我会继续浏览文档。【参考方案2】:

signInWithFacebook 已不存在。 这是完美的工作! flutter_facebook_login 3.0.0

final FacebookLoginResult facebookLoginResult = await facebookLogin.logIn(['email', 'public_profile']);
FacebookAccessToken facebookAccessToken = facebookLoginResult.accessToken;
AuthCredential authCredential = FacebookAuthProvider.getCredential(accessToken: facebookAccessToken.token);
FirebaseUser fbUser;
fbUser = (await _firebaseAuth.signInWithCredential(authCredential)).user;

【讨论】:

【参考方案3】:

看起来signInWithFacebook0.7.0 中被删除了,而signInWithCredential 被添加了。

更改日志可能会更清楚地说明更改:https://pub.dartlang.org/packages/firebase_auth#070

另见:https://github.com/flutter/plugins/commit/a444ad120418d622c4dea2882190968722abbcfe

如果您更新到较新的插件版本,您可能还会https://flutter.io/docs/development/packages-and-plugins/androidx-compatibility

【讨论】:

我不知道为什么,但现在 'signInWithFacebook' 和 'signInWithGoogle' 工作得很好。我发誓我没有碰任何东西! 看来您使用的是0.7.0 之前的版本。检查pubspec.lock 以查看您的项目中实际使用的依赖项的版本。【参考方案4】:

不幸的是,flutter_facebook_login 3.0.0 在 Flutter 1.17 中损坏。

【讨论】:

以上是关于macOS 中的 Firebase Auth SDK for Flutter 中不存在函数 SignInWithFacebook,但在 Windows 中存在的主要内容,如果未能解决你的问题,请参考以下文章

Firebase 中的 Auth 用户名 (displayName) 验证

快速js中的firebase googlesignin错误

Flutter 中的 cloud_firestore 和 firebase_auth 兼容性问题

如何在 firebase-functions 中使用 firebase.auth()?

未捕获的 TypeError: (0 , _firebase.auth) 不是函数

Flutter Firebase Auth - PHP 服务器中的令牌验证问题