この記事は?
EC2+Firebaseで作ったWebサイトで使用するメディアファイルをFirebaseにアップロードする機能が必要になったのでC#で作ることにした。
その中で使用したFirebase関連の処理を備忘を兼ねて記事にした。
使用するパッケージ
Firebaseを使用するためのパッケージはいくつかあるようだが、今回はFirebaseXXX.netを使う事にした。
使用例
メディアファイルをStorageにアップロードして、そのファイルに関する情報をReal Time Databaseに登録する処理を例にする。
認証用のトークンを取得する
StorageとReal Time Databaseを使うにあたってFirebaseの認証を通してトークンを発行する必要がある。
using Firebase.Auth;
// 途中省略
var auth = new FirebaseAuthProvider(new FirebaseConfig("APIキー"));
var token = await auth.SignInWithEmailAndPasswordAsync("メールアドレス", "パスワード");
APIキーはFirebaseのプロジェクトの設定ページに表示されている「ウェブ API キー」を指定します。
トークンの発行方法はいくつか種類があるようですが、ここではメールアドレスとパスワードを使った一番単純なものを使いました。
Storageにメディアファイルを登録する
取得したトークンで認証を通してStorageにファイルをアップロードする。
using Firebase.Storage;
// 途中省略
using (var fp = File.Open("ファイルのパス", FileMode.Open)){
// ファイル登録
var task = new FirebaseStorage("Storageのフォルダパス", new FirebaseStorageOptions
{
AuthTokenAsyncFactory = () => Task.FromResult(token.FirebaseToken)
}).Child("ファイル名").PutAsync(fp);
// アップロードの進捗が変わった時のイベント
task.Progress.ProgressChanged += (s, e) =>
{
Console.WriteLine($"{e.Percentage}%");
};
// アップロードが終わるとダウンロードURLが発行される
var downloadUrl = await task;
}
StorageのフォルダパスはStorageの管理画面に表示されている「gs://」で始まる部分から「gs://」を除いた部分。
Realtime Databaseにファイル情報を登録する
取得したトークンで認証を通してRealtime Databaseにファイルの情報を登録します。
using Firebase.Database;
// 途中省略
var firebaseDB = new FirebaseClient(
"Realtime DatabaseのURL",
new FirebaseOptions
{
AuthTokenAsyncFactory = () => Task.FromResult(token.FirebaseToken)
}
);
await firebaseDB.Child("データ名" + "/" + "キー").PutAsync(
"{\"datetime\":\"" + time.ToString("yyyy/MM/dd HH:mm") + "\",\"title\":\"" + title + "\"}"
);
Realtime DatabaseのURLはRealtime Databaseの管理画面に表示されているURLです。