概要
ウェブアプリだとクライアント側の時刻ズレを考慮して、サーバ側の時刻を取得して使用する事が多いと思います。
Firebaseでこのような方法を実現する場合の方法の紹介になります。
方法
残念ながら調べた限りでは、直接API等で時刻を取得する方法は無いようです。
しかしながら、Firestoreの機能でドキュメント内にサーバ時刻を書き込む機能があるのでそれを利用する事で実現します。
具体的には下記のようになります。
sample.js
// 略 firebase.initializeApp等を実施
export default {
async getServerTime() {
// ダミーのコレクションにサーバー時刻を書き込む
const ref = await firebase
.firestore()
.collection('dummy_for_time_get') // 任意のダミーコレクション名
.doc('time')
await ref.set({
timestamp: firebase.firestore.FieldValue.serverTimestamp()
})
return new Promise((resolve, reject) => {
try {
// 書き込みが終わったらデータを取得して返す
ref.onSnapshot(snapshot => {
const timestamp = snapshot.data().timestamp
resolve(timestamp.toDate())
})
} catch (err) {
reject(err)
}
})
}
}
上記のコードでは下記のような処理を実施します。
- Firestoreのダミーコレクションにサーバ時刻(firebase.firestore.FieldValue.serverTimestamp())を書き込む
- 書き込んだデータを変更通知で取得
ちょっと手が込みますが、無事取得できました。