Firebaseの認証機能を使った簡単なflutterアプリを作成します。
前提条件
あらかじめ flutter をインストールしておいてください。(Flutter入門(1) 開発環境構築)
Firebaseにプロジェクトを追加
Firebase にプロジェクトを追加します。
「プロジェクトを追加」で作成画面に移り、プロジェクト名「Myfire」で「続行」
Googleアナリティクスは「無効」にして「プロジェクトを作成」
しばらくすると「新しいプロジェクトの準備ができました」になるので、「続行」します。
これでFirebaseプロジェクトの追加ができました。
FirebaseプロジェクトのAuthentication利用を開始
以下の「始める」ボタンでFirebaseプロジェクトのAuthentication利用を開始します。
Authenticationの「Sign-in method」タブで「メール/パスワード」を選択し、「有効にする」を選択して「保存」します。
Authenticationの「Users」タブでテスト用にユーザーを追加します。
Firebaseプロジェクトにwebアプリケーションを追加
Firebaseプロジェクト「Myfire」にwebアプリケーションを追加します。
アプリのニックネーム(例:jp.a12345.myfire)を入力して、「アプリを登録」ボタンを実行します。
そのまま「コンソールに進む」ボタンを実行します。
flutterプロジェクトを作成
flutter のプロジェクト「myfire」を作成します。
今回はfirebaseとflutterのパッケージ名を合わせるため「jp.a12345」を指定します。
$ flutter create --org jp.a12345 myfire
flutterプロジェクトにfirebaseパッケージを追加
VSCodeでflutterプロジェクト「myfire」を開き、pubspec.lockファイルがある場合はあらかじめ削除しておきます。pubspec.yaml に以下のfirebaseパッケージを追加して保存します。(自動でfirebaseパッケージがプロジェクトに追加されます。)
dependencies: flutter: sdk: flutter ・ ・ firebase_core: ^1.0.1 firebase_auth: ^1.0.1
flutterプロジェクトのWebアプリにFirebase利用設定
VSCodeのflutterプロジェクトでファイルweb/index.htmlを開きbody部を以下のように書き換えます。
firebaseConfigの各項目の値は、Firebaseのプロジェクトの設定を開き、「ウェブアプリ」の「SDKの設定と構成」からコピペして設定します。
<body> <script src="https://www.gstatic.com/firebasejs/8.10.0/firebase-app.js"></script> <script src="https://www.gstatic.com/firebasejs/8.10.0/firebase-auth.js"></script> <script> var firebaseConfig = { apiKey: "AIzaSyDEzUnuJHTINwKYaZVI6eCL9TLVy5AF8OM", authDomain: "myfire-33df7.firebaseapp.com", databaseURL: "...", projectId: "myfire-33df7", storageBucket: "myfire-33df7.appspot.com", messagingSenderId: "774545558408", appId: "1:774545558408:web:e7e08a53cbdc2d0522083d" }; firebase.initializeApp(firebaseConfig); </script> <script src="main.dart.js" type="application/javascript"></script> </body>
flutterプロジェクトのmain.dartを編集
つぎに、main.dart を以下のように書き換えます。
import 'package:firebase_auth/firebase_auth.dart'; import 'package:firebase_core/firebase_core.dart'; import 'package:flutter/material.dart'; Future<void> main() async { // Firebase初期化 await Firebase.initializeApp(); runApp(MyApp()); } class MyApp extends StatelessWidget { // This widget is the root of your application. @override Widget build(BuildContext context) { return MaterialApp( title: 'Flutter Demo', theme: ThemeData( primarySwatch: Colors.blue, ), home: MyAuthPage(), ); } } class MyAuthPage extends StatefulWidget { @override _MyAuthPageState createState() => _MyAuthPageState(); } class _MyAuthPageState extends State<MyAuthPage> { String newUserEmail = ""; String newUserPassword = ""; String loginUserEmail = ""; String loginUserPassword = ""; String infoText = ""; @override Widget build(BuildContext context) { return Scaffold( body: Center( child: Container( padding: EdgeInsets.all(32), child: Column( children: <Widget>[ const SizedBox(height: 64), TextFormField( decoration: InputDecoration(labelText: "メールアドレス"), onChanged: (String value) { setState(() { loginUserEmail = value; }); }, ), TextFormField( decoration: InputDecoration(labelText: "パスワード"), obscureText: true, onChanged: (String value) { setState(() { loginUserPassword = value; }); }, ), const SizedBox(height: 16), ElevatedButton( onPressed: () async { try { // メール/パスワードでログイン final FirebaseAuth auth = FirebaseAuth.instance; final UserCredential result = await auth.signInWithEmailAndPassword( email: loginUserEmail, password: loginUserPassword, ); // ログインに成功した場合 final User user = result.user!; setState(() { infoText = "ログインOK:${user.email}"; }); } catch (e) { // ログインに失敗した場合 setState(() { infoText = "ログインNG:${e.toString()}"; }); } }, child: Text("ログイン"), ), const SizedBox(height: 8), Text(infoText), ], ), ), ), ); } }
Webアプリのテスト
VSCodeのデバイス選択を「Chrome web」にして、実行してみます。
FirebaseプロジェクトのAuthenticationでテスト用に登録した、メールアドレスとパスワードでログインしてみます。
以上でwebアプリ編は終了です。
次回は「Flutter入門(4) Firebaseを使ってみる(android/ios編)」の予定です。
コメント