如果有人可以提供帮助,我将不胜感激,因为我已经花了近 5 天的时间来努力解决这个问题。我尝试了这里和另一个论坛中的所有主题,但没有成功。
我正在尝试使用 Facebook 的凭据登录我的应用程序。
我在 firebase 上创建了帐户,Facebook 开发人员和我向 Ann 提供了必要的输入以继续操作。
在我的应用程序中,我使用此功能,一旦我按下登录按钮,该功能就会被触发:
func loginButton(_ loginButton: FBSDKLoginKit.FBLoginButton, didCompleteWith result: FBSDKLoginKit.LoginManagerLoginResult?, error: (any Error)?) {
guard let token = result?.token?.tokenString else {
print("User failed to login in with facebook")
return
}
let credential = FacebookAuthProvider.credential(withAccessToken: token)
FirebaseAuth.Auth.auth().signIn(with: credential, completion: { [weak self] authResult, error in
guard let strongSelf = self else {
return
}
guard authResult != nil, error == nil else {
if let error = error {
print("Facebook credential login failed, MFA may be needed - \(error)")
}
return
}
print("Successfully login")
strongSelf.navigationController?.dismiss(animated: true, completion: nil)
})
}
在进行任何操作之前,只需按下按钮,它就会引导我访问 Facebook,并附有以下注释:
如果您不使用有限登录,则需要使用 iOS Graph API 处理所有 Graph API 调用。访问令牌将无效。要了解有关 iOS 版 Facebook SDK 的更改以及如何继续使用 Facebook Login SDK 的更多信息,请访问博客。
登录后,登录时出现以下错误:
Domain=FIRAuthErrorDomain Code=17004 "Bad access token" UserInfo={FIRAuthErrorUserInfoNameKey=ERROR_INVALID_CREDENTIAL, NSLocalizedDescription=Bad access token}
在 Firebase 的身份验证选项卡中,我提供应用程序 ID Facebook 和应用程序密码。
在 info.list 中,我将其作为源代码打开,并提供以下输入:
<key>CFBundleURLTypes</key>
<array>
<dict>
<key>CFBundleURLSchemes</key>
<array>
<string>fb1183972462675995</string>
</array>
</dict>
</array>
<key>FacebookAppID</key>
<string>1183972462675995</string>
<key>FacebookDisplayName</key>
<string>My app</string>
我不确定我错过了什么或我犯了什么错误。 如果有人可以支持的话,我们将不胜感激。
提前感谢大家。
这对我来说是工作
import 'package:crypto/crypto.dart';
import 'dart:math';
import 'dart:convert';
String _generateNonce([int length = 32]) {
const charset =
'0123456789ABCDEFGHIJKLMNOPQRSTUVXYZabcdefghijklmnopqrstuvwxyz-._';
final random = Random.secure();
return List.generate(length, (_) =>
charset[random.nextInt(charset.length)]).join();
}
String _sha256ofString(String input) {
final bytes = utf8.encode(input);
final digest = sha256.convert(bytes);
return digest.toString();
}
Future<UserCredential> facebookSignIn() async {
if (Platform.isIOS) {
final rawNonce = _generateNonce();
final nonce = _sha256ofString(rawNonce);
final LoginResult loginToken = await FacebookAuth.instance.login(
loginTracking: LoginTracking.limited,
nonce: nonce,
);
final OAuthCredential facebookAuthCredential =
OAuthProvider('facebook.com').credential(
idToken: loginToken.accessToken!.tokenString,
rawNonce: rawNonce,
);
return FirebaseAuth.instance.signInWithCredential(facebookAuthCredential);
}
}