はじめに
今年は仕事が忙しくて(みんなそう)という言い訳のもと全然外へのアウトプットをしていなかったので、
アドベントカレンダーくらいは参加しようと思い書くに至りました。
...とどうでも良い前置きは後にして、新しい知識というよりは今年やったFlutter×Firebaseの備忘録的な内容になります。
知っている人からすると当たり前かもしれませんが、実際の使い方とか含めて載せれればと思います。
Authentication
自分のプロジェクトでは匿名ログインを行い、そのユーザーに対してFireStoreの情報を紐づけています。
アプリをキルするまで生き残っているRootのWidgetを作成し、そこのinitStateで初回起動のユーザーに対して
匿名ユーザー作成を行いました。
ユーザー作成はCloudFunctionsです。
雑ですがコードは以下。
Future<String> getAuthId() async {
await FirebaseAuth.instance.signOut();
final UserCredential userCredential = await FirebaseAuth.instance.signInAnonymously();
if (userCredential.user != null) {
return Future.value(userCredential.user?.uid.toString());
} else {
return Future.value("");
}
}
iOSの場合アプリアンインストールをしてもキーチェーンにユーザー情報が保存されてしまうので、サインアウト処理を行って新規で払い出してもらいました。
もしかしたらやり方が悪いだけかもしれません。
FireStore
ユーザーのデータはFireStoreに保存して利用していました。
またまた雑コードはこちら。
Future<void> updateHoge(String id, String hogeId) async {
await _fireStore.collection('id').doc(id).update({"hogeId": hogeId});
}
Future<void> setHoge(String id, List<Map<String, dynamic>>
hoges) async {
await
_fireStore.collection('histories').doc(id).set({"hoges":
hoges});
}
Future<List<Hoge>> getHoge(String id) async {
final hoge = await
_fireStore.collection('hoge').doc()).get();
final data = ).data();
if (data == null) {
return [];
}
}
Analytics
昨今アプリ開発でやってないことはないんじゃないかという分析系。
Adjustとかも入れてるんですが、今回はFirebase Analyticsの実装を。
void sendAnalytics(Events event, Map<String, Object?>? param) {
final FirebaseAnalytics analytics = FirebaseAnalytics();
final String name = event.value;
print("[Firebase]\n\nEvent: ${event.value}\n\nParam: ${param.toString()}");
analytics.logEvent(name: name, parameters: param);
}
publicな関数を定義してどこからでも送信できるようにしています。
Widegetの拡張として、みたいにした方がよくわからずいろんな階層に書かれる心配はないと思いますが、
今回の場合は特に指定せず。
CloudMessaging
正直iOS時代からRemote Pushは苦手意識というか新しい案件で一回作る時期が出て、思い出しながらやるから
慣れたもののめんどくさいなーという感じです。
ただ、FlutterでのFirebase SDKではかなり楽になっている印象でした。
それ以外のハンドリングだったり、Xcodeやgradleの設定が面倒ではあるんですが、通知のコード自体は結構スッキリしているなと。
大変参考にさせていただいたのは以下です。
https://zuma-lab.com/posts/flutter-fcm-push-notify-settings
設定から実装まで細かく書いていてとても助かりました。。。!
最後に
正直書くと決めて当日までやってなかったので付け焼き刃感がありますが、
少しでも盛り上がれば&何かのきっかけになれば幸いです。
配信はFirebase Distributionを使って両OS配信していたのでそちらも次の機会にかければなと思います。