Edd*_*dyG 3 xcode facebook ios flutter
我用facebook应用程序写了一个flutter登录。
它在 Android 上正常工作。在 iOS 模拟器和真正的 iPhone 设备上它不起作用。两者都有 iOS 13.2。
pub spec.yaml 文件
firebase_auth: ^0.6.6
flutter_facebook_login: ^1.1.1
flutter_auth_buttons: ^0.3.1
Run Code Online (Sandbox Code Playgroud)
main.dart 文件
import 'package:flutter/material.dart';
import 'package:firebase_auth/firebase_auth.dart';
import 'package:flutter_facebook_login/flutter_facebook_login.dart';
import 'package:flutter_auth_buttons/flutter_auth_buttons.dart';
void main() => runApp(MyApp());
class MyApp extends StatefulWidget {
@override
State<StatefulWidget> createState() {
return _MyAppState();
}
}
class _MyAppState extends State<MyApp> {
FirebaseAuth _auth = FirebaseAuth.instance;
bool isLogged = false;
FirebaseUser myUser;
Future<FirebaseUser> _loginWithFacebook() async {
var facebookLogin = new FacebookLogin();
var result = await facebookLogin.logInWithReadPermissions(['email']);
debugPrint(result.status.toString());
if (result.status == FacebookLoginStatus.loggedIn) {
FirebaseUser user =
await _auth.signInWithFacebook(accessToken: result.accessToken.token);
return user;
}
return null;
}
void _login() {
_loginWithFacebook().then((response) {
if (response != null) {
myUser = response;
setState(() {
isLogged = true;
});
}
});
}
void _logout() async {
await _auth.signOut().then((response) {
setState(() {
isLogged = false;
});
});
}
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Login App',
home: Scaffold(
appBar: AppBar(
title: Text(isLogged ? 'Profile Page' : 'Login App'),
actions: <Widget>[
IconButton(
onPressed: _logout,
icon: Icon(Icons.power_settings_new),
)
],
),
body: Center(
child: isLogged
? Column(
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
Text('Name: ' + myUser.displayName),
Image.network(myUser.photoUrl),
],
)
: FacebookSignInButton(
onPressed: _login,
),
),
),
);
}
}
Run Code Online (Sandbox Code Playgroud)
我在 Xcode 项目中正确添加了 plist 文件。并根据以下步骤正确配置了 Facebook 开发者的 iOS 版本:https : //developers.facebook.com/docs/facebook-login/ios
我在旧版构建和新构建系统之间更改了 Xcode 中的项目工作区设置。我仍然收到错误。
我尝试将以下内容添加到 pod 文件中,但仍然出现错误
pod 'FBSDKCoreKit', '~> 4.44'
Run Code Online (Sandbox Code Playgroud)
甚至这里所有建议的解决方案 如何在 Xcode 中使用 FBSDKLoginKit 修复构建错误
我得到的错误是
No known class method for selector 'dictionary:setObject:forKey:'
Run Code Online (Sandbox Code Playgroud)
我还尝试更改 pub 规范文件中的 Firebase 版本和 Facebook Flutter 登录版本(在 1.1.1 和 1.2.0 之间,因为我不想使用 AndroidX)但仍然收到错误。
请注意,我将 Xcode 更新到最新版本,但错误并未修复。
我将 Xcode 中所有 pod 的 iOS 部署版本更改为版本 8。错误未修复!
更新(2020 年 7 月)
您可以使用适用于 Android 和 iOS 的新软件包: flutter_login_facebook
如果你想使用flutter_facebook_login,下面是一个解决方案:
更新(2020 年 4 月)
Podfile.lock位于 Flutter 项目的 iOS 文件夹中,并将所有 facebook api 版本更改为 5.8.0。如果Podfile.lock不存在,请运行您的应用程序一次(因此该文件已创建),并在触发错误编辑Podfile.lock后再次运行它。如果您的应用程序仍然失败,请pod install从终端手动运行。有两个问题:
在 pubspec.yaml 文件中将 firebase 版本更新为最新版本。另外,我使用 1.2.0 版登录 facebook,但 1.1.1 版仍然有效。
firebase_auth: ^0.14.0+5
flutter_facebook_login: ^1.2.0
flutter_auth_buttons: ^0.3.1
Run Code Online (Sandbox Code Playgroud)
我在 Xcode 中打开 Runner.xcworkspace(位于 flutter 项目内的 iOS 文件夹中),然后 File->WorkSpace settings,并选择 New Build System 选项。
对于所有 Pod,将 iOS 部署版本更改为 8.0(或更高版本)。
现在应用程序构建成功并在 iOS 上运行。但是每次单击“使用 Facebook 登录”按钮时,我都会收到 CancelledByUser。
这是运行 facebook 登录 api 的 iOS 更新 13.x 时的错误。我发现了一个使登录工作的周转。
final facebookLogin = new FacebookLogin();
facebookLogin.loginBehavior = FacebookLoginBehavior.webViewOnly;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4615 次 |
| 最近记录: |