firebaseでボタン押したらカウントアップするのを作っていたのだけど、realtimedatabaseを使う場合に
書き込みができるようになってるのは、避けた方が良さそうで、書き込みの権限をオープンにするのも問題があるので、まずルールを
{
"rules": {
".read": true,".write": false
}
}
これで書き込めなくなった。
取得方法はいくつもあるので割愛を
書き込み方法はfirebaseのfunctionsを利用しようと思う。
const helloWorld = httpsCallable(functions, 'hello');
helloWorld();
こんな感じにhelloという関数を呼びたいとする。
(functions自体、データベースのアクセスをキーにできたりもするけど、今回は普通に通信を使う。)
exports.hello = functions.https.onRequest((request, response) => {
response.set('Access-Control-Allow-Origin', '*');
const postsRef = admin.database().ref('count/no01');
postsRef.set(admin.database.ServerValue.increment(1));
});
こんな感じで登録するのだけど、動かない。みたいな事がある。
その場合は、上部に
const functions = require("firebase-functions");
const admin = require('firebase-admin')
admin.initializeApp()
を記載すると、動作する。
ServerValue.increment
が便利だけど、簡単なカウントアップ用のデータベースが完成した。
====追記
ここまでやって、連続で実行をすると、タイムアウトが発生する。しかも完了まで、結構時間がかかる。
onRequestで返し値を送らないといけないみたいだが、送らなくても勝手に返してくれてる時もあって、結構不便だった。
const param = request.query.param;
res.status(200).send(param)
この戻り値で200を送ると、タイムアウトしないで、追える。
exports.hello = functions.https.onRequest((request, response) => {
response.set('Access-Control-Allow-Origin', '*');
const postsRef = admin.database().ref('count/no01');
postsRef.set(admin.database.ServerValue.increment(1));
const param = request.query.param;
res.status(200).send(param)
});
これで、今まで、数百ミリ秒処理が終わるのにかかっていたのが治った。10ミリ秒もなく処理が終わる