要在Flutter中使用Firebase进行登录,并且支持Apple登录,你可以按照以下步骤进行操作:
pubspec.yaml文件中,添加以下依赖项:dependencies:
firebase_core: ^0.4.0+9
firebase_auth: ^0.14.0+5
google_sign_in: ^4.0.7
apple_sign_in: ^0.1.0
运行flutter pub get以获取依赖项。
配置Firebase项目:
在Firebase控制台创建一个新的项目,并将Android和iOS应用添加到该项目中。在Android应用中,下载并添加google-services.json文件。在iOS应用中,下载并添加GoogleService-Info.plist文件。
配置Android项目:
在Android项目的android/build.gradle文件中,添加以下代码:
dependencies {
// ...
classpath 'com.google.gms:google-services:4.2.0'
}
在Android项目的android/app/build.gradle文件的底部添加以下代码:
apply plugin: 'com.google.gms.google-services'
ios/Podfile文件中添加以下代码:pod 'Firebase/Auth'
然后运行以下命令来安装依赖项:
cd ios
pod install
lib/main.dart文件中,添加以下代码示例:import 'package:flutter/material.dart';
import 'package:firebase_core/firebase_core.dart';
import 'package:firebase_auth/firebase_auth.dart';
import 'package:google_sign_in/google_sign_in.dart';
import 'package:apple_sign_in/apple_sign_in.dart';
void main() async {
WidgetsFlutterBinding.ensureInitialized();
await Firebase.initializeApp();
runApp(MyApp());
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Flutter Firebase Login',
theme: ThemeData(
primarySwatch: Colors.blue,
),
home: LoginPage(),
);
}
}
class LoginPage extends StatelessWidget {
final FirebaseAuth _auth = FirebaseAuth.instance;
final GoogleSignIn _googleSignIn = GoogleSignIn();
Future signInWithGoogle() async {
final GoogleSignInAccount googleUser = await _googleSignIn.signIn();
final GoogleSignInAuthentication googleAuth = await googleUser.authentication;
final AuthCredential credential = GoogleAuthProvider.credential(
accessToken: googleAuth.accessToken,
idToken: googleAuth.idToken,
);
final UserCredential userCredential = await _auth.signInWithCredential(credential);
return userCredential;
}
Future signInWithApple() async {
final AuthorizationResult result = await AppleSignIn.performRequests([
AppleIdRequest(requestedScopes: [Scope.email, Scope.fullName])
]);
switch (result.status) {
case AuthorizationStatus.authorized:
final AuthCredential credential = OAuthProvider('apple.com').credential(
idToken: String.fromCharCodes(result.credential.identityToken),
accessToken: String.fromCharCodes(result.credential.authorizationCode),
);
final UserCredential userCredential = await _auth.signInWithCredential(credential);
return userCredential;
case AuthorizationStatus.error:
throw FirebaseAuthException(
code: 'apple_sign_in_failed',
message: result.error.toString(),
);
case AuthorizationStatus.cancelled:
throw FirebaseAuthException(
code: 'apple_sign_in_cancelled',
message: 'Sign in with Apple has been cancelled by the user.',
);
}
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('Flutter Firebase Login'),
),
body: Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: [
RaisedButton(
onPressed: () async {
try {
final UserCredential userCredential = await signInWithGoogle();
print('User signed in with Google: ${userCredential.user.displayName}');
} catch (e) {
print('Failed to sign in with Google: $e');
}
},
child: Text('Sign in with Google'),
),
RaisedButton(
onPressed: () async {
try {
final UserCredential userCredential = await signInWithApple();
print('User signed in with Apple: ${userCredential.user.displayName}');
} catch (e) {
print('Failed to sign in with Apple: $e');
}
},
child: Text('Sign in with Apple'),