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,所以我不是专家。 我正在尝试为 android 和 ios 开发一个应用程序,其中包括使用 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
方法和 AuthCredential
和 FacebookAuthProvider
类来进行验证过程。我将放一个带有一些 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】:看起来signInWithFacebook
在0.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) 验证
Flutter 中的 cloud_firestore 和 firebase_auth 兼容性问题
如何在 firebase-functions 中使用 firebase.auth()?