This template shows you how to build a presence system (understanding which users are online / offline) in Firestore with some help from the Realtime Database. An explanation of why this is necessary, how it works, and what changes you need to implement in a client app can be found in the docs.
See file functions/index.js for the code.
The dependencies are listed in functions/package.json.
To install:
cd functions
npm installAs an example we'll be using a secure note structure:
/status
/UID_A
state: "online"
/UID_B
state: "offline"
Whenever a new note is created or modified a Function sends the content to be indexed to the Firestore instance.
The sample client app in public/index.html and public/index.js will anonymously log in the user, create status/UID_A with a last_changed and state in Realtime Database, then mirror that over to a UID_A document in the app's Firestore collection status.
To deploy the sample to your Firebase app,
- Run
npm installto install dependencies for the server-side functions as detailed above. - From this top-level sample directory, deploy the
Realtime Databasetrigger defined in functions toFirebase Functionsand the public directory app toFirebase Hosting.
Assumimg you've created a Firebase application called firebase-example-123 (make sure it's upgraded to the Spark plan and that Anonymous Authentication are enabled).
firebase use --add firebase-example-123
firebase deployThen visit https://firebase-example-123.web.app in your browser and you should see User <UID_A> is online written to the index file, as well as the associated data in Realtime Database and Firestore.