Skip to content

celestifyhq/fcm-cloudflare-workers

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

61 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

fcm-cloudflare-workers

npm version

Send multicast notifications using the FCM HTTP v1 API. This project is a fork of fcm-http2 and has been modified to work with Cloudflare Workers.

Features supported by fcm-cloudflare-workers:

  • HTTP/2 session & stream concurrency
  • Token batching support
  • Uninstall detection
  • Retry mechanism
  • (Optional) Access token caching using KV
  • Zero dependencies

How to use?

First you need to install the library via npm:

npm i fcm-cloudflare-workers

Once the library has been installed you can start using it in this way:

import { FCM, FcmOptions, FcmMessage } from "fcm-cloudflare-workers";

// Init FCM with options (minimal example)
const fcmOptions = new FcmOptions(
    // Pass in your service account JSON private key file (https://console.firebase.google.com/u/0/project/_/settings/serviceaccounts/adminsdk)
    serviceAccount: JSON.parse(env.FIREBASE_SERVICE_ACCOUNT_JSON),
);

// Or, init FCM with access token caching using KV (optional but recommended for performance)
const fcmOptions = new FcmOptions(
    serviceAccount: JSON.parse(env.FIREBASE_SERVICE_ACCOUNT_JSON),
    // Specify a KV namespace
    kvStore: env.MY_KV_NAMESPACE,
    // Specify a key to use for caching the access token
    kvCacheKey: 'fcm_access_token',
);

const fcmClient = new FCM(fcmOptions);

// Recipient device tokens
const tokens = ["TOKEN_1", "TOKEN_N"];

// Message to send
const message = {
  notification: {
    title: "Test",
    body: "Hello from Cloudflare Workers",
  },
  data: {
    notification: "true",
  },
} satisfies FcmMessage;

try {
  const unregisteredTokens = await fcmClient.sendMulticast(message, tokens);

  // Sending successful
  console.log("Message sent successfully");

  // Remove unregistered tokens from your database
  if (unregisteredTokens.length > 0) {
    console.log(
      "Unregistered device token(s): ",
      unregisteredTokens.join(", ")
    );
  }
} catch (error) {
  console.log("Sending failed", error.message);
}

Contributions

This repo is based on previous work by kenble and eladnava.

Support

Please open an issue on this repo if you have any questions or need support.