Flutterの記事を整理し本にしました
- 本稿の記事を含む様々な記事を体系的に整理し本にまとめました
- 今後はこちらを最新化するため、最新情報はこちらをご確認ください
- 10万文字を超える超大作になっています(笑)
はじめに
- flutterのandroidアプリに認証機能を作りたくなったので、firebaseを使って実装しました
- 今回は一番シンプルなEmail/Passwordによる認証だけです
- Androidだけを対象にしており、iOSは省略しています
- GoogleAuthはフィンガープリントだけで比較的実装しやすいようですが、その他(Twitterなど)はAPIを払い出すなどが先に必要です。
手順
Firebase側
- Firebaseでプロジェクトを作成する
- androidのアイコンをクリックし、アプリ登録をする
- IDはandroid/app/build.gradleにあるdefaultConfig内にあるapplicationIDを使う
- google-services.jsonをandroid/appにコピーする
- Authentication → Sign-inmethod →メール/パスワードを有効にする
Flutter側
- 依存関係に以下を追加
- firebase_core: ^0.5.0
- firebase_auth: ^0.18.0
- トップレベルの方のbuild.gradleのdependenciesに以下を追加
- classpath 'com.google.gms:google-services:4.2.0'
- appの下のbuild.gradleのdependenciesに以下を追加
- apply plugin: 'com.google.gms.google-services'
sample.dart
testEmailAuth() async {
await Firebase.initializeApp();
// 登録
try {
//1回目はOK.2回目以降は重複エラー
final User user =
(await FirebaseAuth.instance.createUserWithEmailAndPassword(
email: "test1@email.com",
password: "password",
))
.user;
print("登録OK ${user.uid}");
} catch (e) {
print("登録NG $e");
}
// 認証
try {
//登録済のためOK
final User user = (await FirebaseAuth.instance.signInWithEmailAndPassword(
email: "test1@email.com",
password: "password",
))
.user;
print("登録OK ${user.uid}");
} catch (e) {
print("登録NG $e");
}
try {
//登録していないためNG
final User user = (await FirebaseAuth.instance.signInWithEmailAndPassword(
email: "test2@email.com",
password: "password",
))
.user;
print("登録OK ${user.uid}");
} catch (e) {
print("登録NG $e");
}
}
- ユーザtest1の登録(登録がないときは成功、登録済のときは失敗を期待)
- ユーザtest1の認証(成功を期待)
- ユーザtest2の認証(失敗を期待)