xerdi:push-notifications

v0.0.3Published last year

Meteor Push Notifications

Enable Push Notifications for Meteor Apps.

Installation

Add the package to your project:

meteor add xerdi:push-notifications

Usage

Every client which want to receive incoming push notifications must firstly register and after that subscribe to the PushNotifications service.

1import {PushNotifications} from 'meteor/xerdi:push-notifications';
2
3PushNotifications.registerAndSubscribe();
4
5// OR
6
7await PushNotifications.register();
8await PushNotifications.subscribe();

Then on the server every subscribed client can be notified like:

1import {VAPIDCredentials, PushNotifications} from 'meteor/xerdi:push-notifications';
2
3Meteor.startup(function () {
4    // Sets the credentials in any possible way
5    VAPIDCredentials.auto().init();
6    // VAPIDCredentials.fromSecrets().init();
7    // VAPIDCredentials.fromEnv().init();
8    // VAPIDCredentials.fromSettings().init();
9    
10    // Get the connection info of a users subscription (required)
11    const user = Meteor.users.findOne({});
12    const {subscriptions} = user.services.notifications;
13    for (let sub of subscriptions) {
14        PushNotifications.sendNotification(sub, {
15            title: 'Test notification',
16            opts: {
17                icon: '/icons/my-icon.png',
18                body: 'Hello World!'
19            }
20        });
21    }
22});

API

PushNotifications

The PushNotifications class has the following members and methods:

  • registration : ServiceWorkerRegistration The service worker registration.
  • subscription : PushSubscription The push subscription.
  • status Either uninitialized, unsupported, registered or subscribed.
  • notifications() Gets the notifications of the current registration.
  • registerAndSubscribe() Both registers and subscribes to push notifications.
  • register() Registers a service worker.
  • subscribe() Enables push notifications for the current user.
  • unsubscribe() Destroys both the registration and subscriptions. This method has to be called before Accounts#onLogout, since it has to be logged in for it to work.
  • sendNotification(sub, notification) Pushes a notification for the given subscription.
  • requestPermission() Requests browser permission for receiving push notifications.

VAPIDCredentials

The VAPIDCredentials class has the following static factory methods:

  • #auto() Tries all underlying methods in the exact same order.
  • #fromSecrets() Tries to get the values from Docker secrets under /run/secrets. Allowed keys are vapid-public-key, vapid-private-key and vapid-contact-uri.
  • #fromEnv() Tries to get the values from process.env. Allowed keys are VAPID_PUBLIC_KEY, VAPID_PRIVATE_KEY and VAPID_CONTACT_URI.
  • #fromSettings() Tries to get the values from Meteor.settings. Don't forget to add settings.json to your .gitignore.
  • #create() Generates credentials with webpush.generateVAPIDKeys.

Furthermore, the VAPIDCredentials has the following members and methods:

  • .isNewlyCreated : boolean Whether the credentials are newly created.
  • .contactUri : String The contact URI of this subscription.
  • .publicKey : String The public key.
  • .privateKey : String The private key.
  • .init() Sets the credentials for the webpush service.
  • .save() Stores the values in <project_dir>/settings.json.

Note: the build-plugin.js will store the credentials automatically if newly created.