情報は色々あるけど、すんなり動かなかったのでメモ
参考
手順はここを参考にした。firebaseのプロジェクト作成やアプリの登録など。コードはうまく動かなかった。
https://zenn.dev/takumiendoh/articles/42d870436bc9c882bb85info.plistの編集も忘れないように...
https://zenn.dev/welchi/articles/firebase-authコードは以下参照
https://firebase.flutter.dev/docs/auth/usage
https://firebase.flutter.dev/docs/auth/social
pubspec.yaml
バージョンは最終的に以下のような感じで、ログインだけならcoreとcloud_firestoreはいらないはず。
```yaml
dependencies:
flutter:
sdk: flutter
firebase_auth: ^0.14.0+5
google_sign_in: ^4.0.14
firebase_core: ^0.4.0+9
cloud_firestore: ^0.12.9+5
## main.dart
1画面にログインボタンとログアウトボタンとカレントユーザをコンソールにプリントする3つのボタンを配置してるだけ。
```dart
import 'package:flutter/material.dart';
import 'package:firebase_auth/firebase_auth.dart';
import 'package:google_sign_in/google_sign_in.dart';
import 'dart:developer';
Future<void> main() async {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
// アプリ名
title: 'LoginDemo',
theme: ThemeData(
primarySwatch: Colors.blue,
),
home: LoginPage(),
);
}
}
// ログイン画面用Widget
class LoginPage extends StatelessWidget {
@override
Widget build(BuildContext context) {
return Scaffold(
body: Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
ElevatedButton(
child: Text('ログイン'),
onPressed: () => {signInWithGoogle()},
),
ElevatedButton(
child: Text('ログアウト'),
onPressed: () => {signOut()},
),
ElevatedButton(
child: Text('カレントユーザー'),
onPressed: () => {currentUser()},
),
],
),
),
);
}
// ログイン処理
Future<void> signInWithGoogle() async {
FirebaseUser user = await FirebaseAuth.instance.currentUser();
if (user != null) return user;
debugPrint("signInWithGoogle");
final GoogleSignInAccount googleUser = await GoogleSignIn().signIn();
final GoogleSignInAuthentication googleAuth =
await googleUser.authentication;
// Create a new credential
final AuthCredential credential = GoogleAuthProvider.getCredential(
accessToken: googleAuth.accessToken,
idToken: googleAuth.idToken,
);
//ログイン
return await FirebaseAuth.instance.signInWithCredential(credential);
}
// ログアウト
Future<void> signOut() async {
debugPrint("signOut");
await FirebaseAuth.instance.signOut();
}
// カレントユーザー
Future<void> currentUser() async {
debugPrint("currentUser");
FirebaseUser user = await FirebaseAuth.instance.currentUser();
inspect(user);
}
} //class
こんな感じ。1回認証すればとりあえずはcurrentUserが取れる。
アプリ全体としてデータの保存などにログイン必須なら、アプリの頭で判定する所を用意すれば良いか。
バックアップに使う程度なら...その時だけログインすればいいね。