@bg-dev/nuxt-fcm
Nuxt FCM
A Nuxt 3 module for integrating Firebase Cloud messaging. This module is based on Firebase JS SDK on the client side and Firebase Admin SDK on the server side.
Features
- ✔️ Listen to messages via
useFcmcomposable - ✔️ Send, subscribe & unsubscribe from topics via
useFcmTopiccomposable
Quick Setup
- Add dependencies to your project
# Using npm
npm install --save-dev @bg-dev/nuxt-fcm
# Using yarn
yarn add --dev @bg-dev/nuxt-fcm
- Add
@bg-dev/nuxt-fcmto themodulessection ofnuxt.config.ts
export default defineNuxtConfig({
modules: ["@bg-dev/nuxt-fcm"],
});
- Set
fcmconfig object
firebaseConfigFirebase project configuration.vapidKeyPublic server key provided to push services docs.serviceAccountFirebase admin credentials docs. You can ignore this property in case the app server is not needed.
- If you are using an app server, make sure to enable
Cloud messaging APIdocs.
That's it! You can now use Nuxt FCM in your Nuxt app ✨
Usage
Authorization
By default all the topic's related features are inaccessible. Add a server-side middleware to check the user's role and set the permissions accordingly.
// server/middleware/fcm.ts
import { setPermissions } from "#fcm";
export default defineEventHandler((event) => {
setPermissions(event, {
topic: {
send: true,
subscribe: true,
unsubscribe: true,
},
});
});
Listen to messages
In the foreground, when a message is received it's passed to the page and the onMessage event is dispatched with the payload.
const { onMessage } = useFcm();
onMessage(console.log);
In the background, notifications are automatically shown when a message is received. To add custom logic, the service worker can be extended via the serviceWorkerScript config option (source).
// nuxt.config.ts
fcm: {
serviceWorkerScript: `
messaging.onBackgroundMessage((payload) => {
console.log("Received background message ", payload);
})
function onNotificationClick(event) {
console.log('[firebase-messaging-sw.js] Notification clicked', event)
event.notification.close();
}
`,
},
Add other Firebase services
You can integrate other Firebase services such as Google Analytics to provide insights into user behavior and engagement stats.
// nuxt.config.ts
// Exclude package from vite optimization
vite: {
optimizeDeps: {
exclude: ["firebase/analytics"],
},
},
// plugins/analytics.client.ts
// Define a client-side plugin to expose the service's instance
import { getAnalytics } from "firebase/analytics";
export default defineNuxtPlugin(() => {
const analytics = getAnalytics();
return {
provide: {
analytics,
},
};
});
Appendix
Development
# Install dependencies
npm install
# Generate type stubs
npm run dev:prepare
# Develop with the playground
npm run dev
# Build the playground
npm run dev:build
# Run ESLint
npm run lint
# Run Vitest
npm run test
npm run test:watch
# Release new version
npm run release
Related Packages
One utility function for module authors to define compiler constants for all bui...
Version History
| Version | Released | Vue | License |
|---|---|---|---|
| 0.2.14 | MIT | ||
| 0.2.13 | MIT | ||
| 0.2.12 | ^3.0 | MIT | |
| 0.2.11 | ^3.0 | MIT | |
| 0.2.10 | ^3.0 | MIT | |
| 0.2.9 | ^3.0 | MIT | |
| 0.2.8 | ^3.0 | MIT | |
| 0.2.7 | ^3.0 | MIT | |
| 0.2.6 | ^3.0 | MIT | |
| 0.2.5 | ^3.0 | MIT | |
| 0.2.4 | ^3.0 | MIT | |
| 0.2.3 | ^3.0 | MIT | |
| 0.2.2 | ^3.0 | MIT | |
| 0.2.1 | ^3.0 | MIT | |
| 0.2.0 | ^3.0 | MIT | |
| 0.1.4 | ^3.0 | MIT | |
| 0.1.3 | ^3.0 | MIT | |
| 0.1.2 | ^3.0 | MIT | |
| 0.1.1 | ^3.0 | MIT |