Remarques sur l'utilisation de FCM avec Ruby on Rails

Refléter click_action

Il semble que vous devriez ajouter l'événement notificationclick en haut ** de firebase-messaging-sw.js.

public/firebase-messaging-sw.js


// Notification click
self.addEventListener('notificationclick', function(event) {
  let url = event.notification.data.FCM_MSG.data.url;

  event.notification.close(); // Android needs explicit close.
  event.waitUntil(
    clients.matchAll({ includeUncontrolled: true, type: 'window' }).then( windowClients => {
      // Check if there is already a window/tab open with the target URL
      for (let i = 0; i < windowClients.length; i++) {
        let client = windowClients[i];
        // If so, just focus it.
        if (client.url === url && 'focus' in client) {
          return client.focus();
        }
      }
      // If not, then open the target URL in a new window/tab.
      if (clients.openWindow) {
        return clients.openWindow(url);
      }
    })
  );
});

Recevez des notifications Web push même sur les onglets ouverts (onglets de travail)

Lorsque je travaille avec des onglets normalement ouverts, je ne reçois pas de notifications push Web.

Vous pouvez définir la fonction onMessage dans firebase.js comme suit.

firebase.js


  // Handle incoming messages while focusing
  messaging.onMessage(function(payload) {
    const { title, body, icon } = payload.notification
    const url = payload.data.url
    navigator.serviceWorker.getRegistration('/firebase-cloud-messaging-push-scope').then(registration => {
      registration.showNotification(
        title,
        {
          body,
          icon,
          data: {
            FCM_MSG: {
              data: {
                url
              }
            }
          }
        }
      )
    });
  });

Avoir ActiveJob traiter les push web

Les paramètres qui peuvent être passés sont: title: Titre de la notification body: contenu de la notification icône: icône d'affichage click_action: URL qui transite avec un événement de clic (HTTPS uniquement)

app/jobs/push_notification_job.rb


class PushNotificationJob < ApplicationJob
  queue_as :default

  DEFAULT_ICON = 'https://hogehoge.ico'

  def perform(token, options = {})
    fcm = FCM.new(ENV['FIREBASE_SERVER_KEY'])

    options = {
      priority: 'high',
      notification: {
        title: options[:title],
        body: options[:body],
        icon: options[:icon] || DEFAULT_ICON,
      },
      data: {
        url: options[:url] || '/'
      }
    }

    registration_ids = [token]

    fcm.send(registration_ids, options) if registration_ids.any?
  end
end

Je ne sais toujours pas si priority: 'high' est utile, mais ...

Recommended Posts

Remarques sur l'utilisation de FCM avec Ruby on Rails
[Ruby on Rails] Afficher le test avec RSpec
[Ruby on Rails] Vérification du code à l'aide de Rubocop-airbnb
[Ruby on Rails] Test du contrôleur avec RSpec
[Ruby on Rails] Diaporama d'images utilisant Skippr
[Ruby on Rails] Test de modèle avec RSpec
Ruby on Rails élémentaire
Principes de base de Ruby on Rails
Association Ruby On Rails
Présentation de Rspec avec Ruby on Rails x Docker
Publiez l'application avec ruby on rails
[Rails] Procédure de liaison de bases de données avec Ruby On Rails
Déterminez la page actuelle avec Ruby on Rails
[Ruby on Rails] Téléversement de plusieurs images avec refile
J'ai fait un portfolio avec Ruby On Rails
Record d'apprentissage de Ruby on rails -2020.10.03
Création de portfolio Ruby on Rails
[Ruby on Rails] Supprimer les images s3 avec Active Strage
[Ruby on Rails] Debuck (binding.pry)
Record d'apprentissage de Ruby on rails -2020.10.05
Exécutez des tests Ruby on Rails RSpec avec des actions GitHub
Record d'apprentissage de Ruby on rails -2020.10.09
Japaneseize en utilisant i18n avec Rails
Erreur rencontrée avec les notes lors du déploiement de docker sur des rails
Record d'apprentissage Ruby on rails-2020.10.07 ②
[Ruby on Rails] Traitement commun entre les contrôleurs (à l'aide de concerts)
Record d'apprentissage Ruby on rails-2020.10.07 ①
Annuler la migration de Ruby on Rails
[Ruby] Notes sur la méthode gets
Record d'apprentissage de Ruby on rails -2020.10.06
Tutoriel Ruby on Rails Remarques gênantes lors de l'exécution sous Windows
Résumé de la validation Ruby on Rails
Création d'un plan de site au format RSS / Atom avec Ruby on Rails
Mémorandum de base Ruby on Rails
Essayez d'utiliser l'attribut de requête Ruby on Rails
Ruby on Rails Paramètre de la fonction d'envoi automatique des e-mails (avec Gmail)
[Ruby on Rails] Ajouter une colonne avec des contraintes de clé externe
[Ruby on Rails] Animation de défilement facile de javascript (en utilisant ScrollReveal.js)
[Ruby on Rails] Implémenter la fonction de connexion par add_token_to_users avec l'API
[Ruby on Rails] Défilement infini à l'aide de gem kaminari et jscroll
Installez Ruby sur MSYS2 avec pacman
[Ruby on Rails] Read try (: [] ,: key)
Variables Ruby on Rails, résumé constant
Installation de Ruby + Rails sur Ubuntu 18.04 (rbenv)
[Ruby on Rails] Introduction de la fonction de pagination
Connaissance de base de Ruby on Rails
Progatez Ruby on Rails
Installez Ruby 2.5 sur CentOS 7 en utilisant SCL
Comment utiliser Ruby on Rails