Привлекайте и развивайте свое веб-приложение с помощью push-уведомлений (Firebase Cloud Messaging) и React

Основы ФКМ

✔️FCM — это бесплатный сервис, который позволяет вам отправлять сообщения на устройства ваших пользователей, чтобы они могли открыть ваше приложение.

✔️Они должны дать согласие на получение сообщений.

✔️Сообщения можно отправлять на отдельные устройства, группы устройств или устройства, «подписанные» на темы.

Вы можете проверить мое введение в FCM с React с помощью этого видеоурока, который я создал.

Вводные шаги

1️⃣Зарегистрируйте экземпляр пользовательского приложения на серверах Firebase Cloud Messaging Server.

2️⃣Зарегистрируйте на своем сервере устройства по: id, группе или теме.

✔️95% сообщений доставляются, открываемость высокая, менее чем за 250 мс.

Первые шаги

1️⃣ Создайте проект Firebase.

2️⃣Включите Cloud Messaging API (Legacy) и Firebase Cloud Messaging API (V1) в настройках проекта -> Cloud Messaging. Вам нужно будет включить облачный обмен сообщениями в Google Cloud Console.

3. Создайте сертификат Web Push. Вам понадобится это как VAPID_KEY позже в коде реакции.

firebase.js

Добавьте свой объект конфигурации firebase.

Здесь вы должны экспортировать объект приложения, чтобы использовать его в своем App.js.

// Import the functions you need from the SDKs you need
import { initializeApp } from "firebase/app";

// TODO: Add SDKs for Firebase products that you want to use
// https://firebase.google.com/docs/web/setup#available-libraries

// Your web app's Firebase configuration
// For Firebase JS SDK v7.20.0 and later, measurementId is optional
const firebaseConfig = {

};

// Initialize Firebase
const app = initializeApp(firebaseConfig);

export default app;

App.js

Вы должны использовать функцию signInAnonymous, чтобы зарегистрировать пользователя и запросить разрешение на подписку на службу push-уведомлений вашего приложения, используя правильный транспортный уровень.

Мы используем react-toastify, чтобы стиль уведомлений выглядел красиво.

import './App.css';
import { getAnalytics } from "firebase/analytics";
import { getMessaging, getToken, onMessage } from "firebase/messaging";
import {getAuth, signInAnonymously} from "firebase/auth"
import {ToastContainer, toast} from 'react-toastify'
import app from './firebase'; 
import "react-toastify/dist/ReactToastify.css"
import React from 'react';
const analytics = getAnalytics(app);
function App() {
  const singUpAnonymously= ()=>{
    signInAnonymously(getAuth(app)).then(user=> console.log(user));
  }
 
const messaging = getMessaging(app);
const activateMessages = async() => {
  const token = await getToken(messaging, {
    vapidKey: "YOUR_VAPID_KEY"
  }).catch(error => console.log("error generatin token"))

  if (token) console.log("token", token);
  if (!token) console.log("no token")

}
//We only run once using react hook useEffect
React.useEffect(()=>{
  singUpAnonymously();
  activateMessages();
  onMessage(messaging, message=>{
    console.log("your message: ", message)
   
    toast(message.notification.title)
   // console.log("payload.data.url"+message.data.url)
//window.location.replace("http://localhost:3000/"+message.data.url)
  })


})




  return (
    <div>
    <h1>Firebase Cloud Messages</h1>
    <ToastContainer/>
    <button onClick={singUpAnonymously}>Log In</button>
    <button onClick={activateMessages}>Generate Token</button>
    </div>
  );
}

export default App;

общедоступный/firebase-сообщения-sw.js

Работник службы может получать событие onMessage, приложение должно определить этого работника службы обмена сообщениями Firebase.

importScripts("https://www.gstatic.com/firebasejs/9.17.1/firebase-app-compat.js")
importScripts("https://www.gstatic.com/firebasejs/9.17.1/firebase-messaging-compat.js")
importScripts("https://www.gstatic.com/firebasejs/9.17.1/firebase-auth-compat.js")


// https://firebase.google.com/docs/web/setup#available-libraries

// Your web app's Firebase configuration
// For Firebase JS SDK v7.20.0 and later, measurementId is optional
const firebaseConfig = {
  
};

// Initialize Firebase
const app =firebase.initializeApp(firebaseConfig);
const messaging = firebase.messaging(app);
messaging.onBackgroundMessage(payload =>{
    console.log("you received a message when you haven't the app active");
    console.log(payload)

    const notificationTitle = payload.notification.title;
    const notificationOptions = {
        body: payload.notification.body,
        icon: "/logo192.png"
    }

    //added for auth for writing to database that message was delivered
  /*  const singUpAnonymously= ()=>{
        firebase.auth(app).signInAnonymously().then(user=> console.log("us"+firebase.auth().currentUser.uid));
      }
singUpAnonymously();*/

    return self.registration.showNotification(
        notificationTitle,
        notificationOptions
    )
})

Полный код этого приложения React, которое регистрируется в FCM и получает сообщение, можно найти на моем GitHub.

Заключение

Взаимодействие с пользовательской базой имеет важное значение для вашего бизнеса, а FCM — один из самых мощных инструментов для привлечения большего количества посетителей и заработка, поэтому важно освоить этот инструмент.

Дополнительные материалы на PlainEnglish.io.

Подпишитесь на нашу бесплатную еженедельную рассылку новостей. Подпишитесь на нас в Twitter, LinkedIn, YouTube и Discord .

Заинтересованы в масштабировании запуска вашего программного обеспечения? Ознакомьтесь с разделом Схема.