Authenticate via OAuth 2 access tokenという公式チュートリアルを参考に、導入からデータベース書き込みまでを行います。
Google Apps ScriptにFirebaseのライブラリを追加する
FirebaseにアクセスしたいGoogle Apps Scriptを開きます。
「リソース」->「ライブラリ...」といきます。
図書館(?)というウィンドウが出てくるので、
MYeP8ZEEt1ylVDxS7uyg9plDOcoke7-2l
というキーを入れてあげて、ライブラリ追加します。バージョンの選択は最新のものにしてください(2018年10月現在、バージョン29)。
最後に保存を押して確定させます。
マニフェストファイルにスコープを追加する
「表示」->「マニフェストファイルを表示」といきます。
横のタブにappscript.jsonが出てくるので、このファイルの最後に
"oauthScopes":["https://www.googleapis.com/auth/userinfo.email","https://www.googleapis.com/auth/firebase.database","https://www.googleapis.com/auth/script.external_request"]
を追加します。これでFirebaseの認証や書き込みが可能な状態となります。
コードの認証&実行
メインのコードに戻って、
function updateData() {
var token = ScriptApp.getOAuthToken();
var fb = FirebaseApp.getDatabaseByUrl("https://my_db.firebaseio.com/", token);
fb.setData("testPath/hoge", "huga");
}
のような関数を用意します。
my_db....の部分は、アクセスしたいデータベースのものに置き換えてください。基本的に以下のようなURLになると思います
https://プロジェクトID.firebadeio.com/
(テスト用のデータベースで試してください。大事なデータに上書きしないようにご注意!!)
上で用意した関数を実行すると、以下のようなウィンドウがでます。
ここはパーミッションが要求されてるので、データベースの書き込み権限があるアカウントで認証してあげてください。(書き込み権限については次節)
認証ができると、コードが実行できるようになります。
コードの実行後にFirebaseのRealtime Databに書き込みができていれば成功です!
以上で、Google Apps ScriptからFirebase Databaseにアクセスできるようになりました。
参考:データベースの権限を確認する
プロジェクトの横の歯車から「ユーザーと権限」に飛びます。
「編集者」あるいは「オーナー」の権限がついているアカウントで前節のGoogle Apps Acount実行の認証を行います。
編集権限がないアカウントで実行しても書き込みできません。その場合は別の方法ならできるらしいのですが、割愛。
参考: Secret keyを用いた方法
Google Apps ScriptからFirebaseに書き込むためには、Secret Keyを用いて認証する方法もあります。
ただこの方法はSecret Keyをコードに直書きする必要があり、deprecatedのようです。
[参考]
https://qiita.com/BearsSoft/items/728da4636203421292ee
https://qiita.com/maeda_88/items/9ff25772f1c910df6c06
公式リファレンス
ライブラリの追加について
https://sites.google.com/site/scriptsexamples/new-connectors-to-google-services/firebase
メソッド等のリファレンス
https://sites.google.com/site/scriptsexamples/new-connectors-to-google-services/firebase/reference
さいごに
シークレットキーを直書きすることなくFirebaseへのアクセスができるようになりました。
別にCloud Functions使えばいいじゃんという意見が聞こえてきそうですが、index.jsが肥大化しそうなので今回はあえてGoogle Apps ScriptにてDatabaseへの書き込みというのをやってみました。
Google Apps Scriptは実行時刻の設定も楽ですし。
一方で、Cloud Firestoreへの書き込み方法はまだ不明です。誰か教えてくり〜