Skip to content

Matt-Jensen/ember-service-worker-emberfire-messaging

Repository files navigation

Build Status Ember Observer Score Ember Version

ember-service-worker-emberfire-messaging

A push notification Ember Service Worker plugin for Firebase Cloud Messaging using Emberfire.

Installation

ember install ember-service-worker-emberfire-messaging

Configuration

Step 1: basic setup is done in the config/environment.js file:

// Ensure Emberfire is correctly configured
var ENV = {
  firebase: {
    appId: 'abc',
    apiKey: 'xyz',
    authDomain: 'YOUR-FIREBASE-APP.firebaseapp.com',
    databaseURL: 'https://YOUR-FIREBASE-APP.firebaseio.com',
    storageBucket: 'YOUR-FIREBASE-APP.appspot.com',
    projectId: 'my-firebase-app', // optional
    messagingSenderId: "123456789012" // Required!
  }
};

Message sender Id can be found in your firebase console > project settings > add app button > Add Firebase to your web app.

Set GCM Sender ID

Step 2: gcm_sender_id must be configured in your manifest.json file. For this purpose I recommend using Ember Web App where in your config/manifest.js you should add the following:

module.exports = function() {
  return {
    // ...
    // gcm_sender_id: '103953800507'
  };
}

This Google Cloud Sender ID is not the same as your message sender ID. You can simply copy the value 103953800507 into your manifest.json!

Request User Permission

Step 3: Use the Firebase Message Service to request the user's permission and subscribe to new message events.

import Route from '@ember/routing/route';
import { inject as service } from '@ember/service';

export default Route.extend({
  firebaseMessage: service(),

  actions: {
    requestUserPermission() {
      /*
       Before you can receive any messages you need to request the users'
       permission to get push notifications
       */
      this.get('firebaseMessage').initialize()
      .then((token) => { // FCM registration token
        // Homework: persist this token to your server!
      });
    }
  },

  init() {
    this._super(...arguments);

    /*
     React to Firebase message when app is being viewed by user
     */
    this.get('firebaseMessage').subscribe((message) => {
      console.log('FCM JSON', message);
    });
  }
});

Misc Options:

Customize this addon by adding any of the following to the config/environment.js file:

var ENV = {
  'esw-emberfire-messaging': {
    firebaseVersion: '7.15.0', // default (Firebase version used by SW)
    defaultBackgroundMessageTitle: 'New Message', // default (fallback title for background message)
    notification: { vibrate: [200, 100, 200] } // optional global notification settings
  }
};

Possible global notification options will be overwritten by any individual FCM notification options. Browser support of various notification options may vary.

Triggering a Firebase Message

To test your app's Firebase Messaging try the following in the terminal:

curl -X POST -H "Authorization: key=<YOUR_SERVER_KEY>" -H "Content-Type: application/json" -d '{
  "data": {
    "title": "Portugal vs. Denmark",
    "body": "5 to 1",
    "icon": "firebase-logo.png",
    "click_action": "http://localhost:4200"
  },
  "to": "<DEVICE_REGISTRATION_TOKEN>"
}' "https://fcm.googleapis.com/fcm/send"

YOUR_SERVER_KEY can be found in the firebase console under Project Settings > Cloud Messaging > Server key. DEVICE_REGISTRATION_TOKEN is the token you requested via this addon's firebase-message service.

Please refer to the Firebase docs for more information

Contributing

  • git clone <repository-url> this repository
  • cd ember-service-worker-emberfire-messaging
  • yarn

Installation

ember install ember-service-worker-emberfire-messaging

Usage

[Longer description of how to use the addon in apps.]

Contributing

See the Contributing guide for details.

License

This project is licensed under the MIT License.