يختلف سلوك الرسائل اعتمادًا على ما إذا كانت الصفحة في المقدمة (مُركزة) ، أو في الخلفية ، مخفية خلف علامات تبويب أخرى ، أو مغلقة تمامًا. في جميع الحالات ، يجب أن تتعامل الصفحة مع رد الاتصال onMessage
، ولكن في حالات الخلفية ، قد تحتاج أيضًا إلى التعامل مع onBackgroundMessage
أو تكوين إشعار العرض للسماح للمستخدم بإحضار تطبيق الويب الخاص بك إلى المقدمة.
حالة التطبيق | إشعار | بيانات | كلاهما |
---|---|---|---|
المقدمة | onMessage | onMessage | onMessage |
الخلفية (عامل الخدمة) | onBackgroundMessage (عرض الإخطار يظهر تلقائيًا) | onBackgroundMessage | onBackgroundMessage (عرض الإخطار يظهر تلقائيًا) |
يوضح نموذج JavaScript quickstart كل التعليمات البرمجية المطلوبة لتلقي الرسائل.
تعامل مع الرسائل عندما يكون تطبيق الويب الخاص بك في المقدمة
لتلقي حدث onMessage
، يجب أن يحدد تطبيقك عامل خدمة مراسلة Firebase في firebase-messaging-sw.js
. بدلاً من ذلك ، يمكنك توفير عامل خدمة موجود لـ SDK من خلال getToken(): Promise<string>
.
Web modular API
import { initializeApp } from "firebase/app"; import { getMessaging } from "firebase/messaging/sw"; // Initialize the Firebase app in the service worker by passing in // your app's Firebase config object. // https://firebase.google.com/docs/web/setup#config-object const firebaseApp = initializeApp({ apiKey: 'api-key', authDomain: 'project-id.firebaseapp.com', databaseURL: 'https://project-id.firebaseio.com', projectId: 'project-id', storageBucket: 'project-id.appspot.com', messagingSenderId: 'sender-id', appId: 'app-id', measurementId: 'G-measurement-id', }); // Retrieve an instance of Firebase Messaging so that it can handle background // messages. const messaging = getMessaging(firebaseApp);
Web namespaced API
// Give the service worker access to Firebase Messaging. // Note that you can only use Firebase Messaging here. Other Firebase libraries // are not available in the service worker. importScripts('https://www.gstatic.com/firebasejs/8.10.1/firebase-app.js'); importScripts('https://www.gstatic.com/firebasejs/8.10.1/firebase-messaging.js'); // Initialize the Firebase app in the service worker by passing in // your app's Firebase config object. // https://firebase.google.com/docs/web/setup#config-object firebase.initializeApp({ apiKey: 'api-key', authDomain: 'project-id.firebaseapp.com', databaseURL: 'https://project-id.firebaseio.com', projectId: 'project-id', storageBucket: 'project-id.appspot.com', messagingSenderId: 'sender-id', appId: 'app-id', measurementId: 'G-measurement-id', }); // Retrieve an instance of Firebase Messaging so that it can handle background // messages. const messaging = firebase.messaging();
عندما يكون تطبيقك في المقدمة (يقوم المستخدم حاليًا بعرض صفحة الويب الخاصة بك) ، يمكنك تلقي البيانات وحمولات الإشعارات مباشرة في الصفحة.
Web modular API
// Handle incoming messages. Called when: // - a message is received while the app has focus // - the user clicks on an app notification created by a service worker // `messaging.onBackgroundMessage` handler. import { getMessaging, onMessage } from "firebase/messaging"; const messaging = getMessaging(); onMessage(messaging, (payload) => { console.log('Message received. ', payload); // ... });
Web namespaced API
// Handle incoming messages. Called when: // - a message is received while the app has focus // - the user clicks on an app notification created by a service worker // `messaging.onBackgroundMessage` handler. messaging.onMessage((payload) => { console.log('Message received. ', payload); // ... });
تعامل مع الرسائل عندما يكون تطبيق الويب الخاص بك في الخلفية
جميع الرسائل المستلمة أثناء وجود التطبيق في الخلفية تؤدي إلى عرض إشعار في المتصفح. يمكنك تحديد خيارات هذا الإشعار ، مثل العنوان أو النقر فوق الإجراء ، إما في طلب الإرسال من خادم التطبيق الخاص بك ، أو باستخدام منطق عامل الخدمة على العميل.
ضبط خيارات الإخطار في طلب الإرسال
بالنسبة إلى رسائل الإشعارات المرسلة من خادم التطبيق ، تدعم FCM JavaScript API مفتاح fcm_options.link
. عادةً ما يتم تعيين هذا على صفحة في تطبيق الويب الخاص بك:
https://fcm.googleapis.com//v1/projects/<YOUR-PROJECT-ID>/messages:send
Content-Type: application/json
Authorization: bearer <YOUR-ACCESS-TOKEN>
{
"message": {
"token": "eEz-Q2sG8nQ:APA91bHJQRT0JJ...",
"notification": {
"title": "Background Message Title",
"body": "Background message body"
},
"webpush": {
"fcm_options": {
"link": "https://dummypage.com"
}
}
}
}
إذا كانت قيمة الارتباط تشير إلى صفحة مفتوحة بالفعل في علامة تبويب المتصفح ، فإن النقر فوق الإشعار يؤدي إلى ظهور علامة التبويب هذه في المقدمة. إذا لم تكن الصفحة مفتوحة بالفعل ، فإن النقر فوق إشعار يفتح الصفحة في علامة تبويب جديدة.
نظرًا لأن رسائل البيانات لا تدعم fcm_options.link
، يوصى بإضافة حمولة إعلام إلى جميع رسائل البيانات. بدلاً من ذلك ، يمكنك التعامل مع الإشعارات باستخدام عامل الخدمة.
للحصول على شرح للاختلاف بين رسائل الإعلام والبيانات ، راجع أنواع الرسائل .
تحديد خيارات الإخطار في عامل الخدمة
بالنسبة لرسائل البيانات ، يمكنك تعيين خيارات الإخطار في عامل الخدمة. أولاً ، قم بتهيئة التطبيق الخاص بك في عامل الخدمة:
Web modular API
import { initializeApp } from "firebase/app"; import { getMessaging } from "firebase/messaging/sw"; // Initialize the Firebase app in the service worker by passing in // your app's Firebase config object. // https://firebase.google.com/docs/web/setup#config-object const firebaseApp = initializeApp({ apiKey: 'api-key', authDomain: 'project-id.firebaseapp.com', databaseURL: 'https://project-id.firebaseio.com', projectId: 'project-id', storageBucket: 'project-id.appspot.com', messagingSenderId: 'sender-id', appId: 'app-id', measurementId: 'G-measurement-id', }); // Retrieve an instance of Firebase Messaging so that it can handle background // messages. const messaging = getMessaging(firebaseApp);
Web namespaced API
// Give the service worker access to Firebase Messaging. // Note that you can only use Firebase Messaging here. Other Firebase libraries // are not available in the service worker. importScripts('https://www.gstatic.com/firebasejs/8.10.1/firebase-app.js'); importScripts('https://www.gstatic.com/firebasejs/8.10.1/firebase-messaging.js'); // Initialize the Firebase app in the service worker by passing in // your app's Firebase config object. // https://firebase.google.com/docs/web/setup#config-object firebase.initializeApp({ apiKey: 'api-key', authDomain: 'project-id.firebaseapp.com', databaseURL: 'https://project-id.firebaseio.com', projectId: 'project-id', storageBucket: 'project-id.appspot.com', messagingSenderId: 'sender-id', appId: 'app-id', measurementId: 'G-measurement-id', }); // Retrieve an instance of Firebase Messaging so that it can handle background // messages. const messaging = firebase.messaging();
لتعيين الخيارات ، اتصل بـ onBackgroundMessage
في firebase-messaging-sw.js
. في هذا المثال ، نقوم بإنشاء إشعار به حقول العنوان والجسم والأيقونة.
Web modular API
import { getMessaging } from "firebase/messaging/sw"; import { onBackgroundMessage } from "firebase/messaging/sw"; const messaging = getMessaging(); onBackgroundMessage(messaging, (payload) => { console.log('[firebase-messaging-sw.js] Received background message ', payload); // Customize notification here const notificationTitle = 'Background Message Title'; const notificationOptions = { body: 'Background Message body.', icon: '/firebase-logo.png' }; self.registration.showNotification(notificationTitle, notificationOptions); });
Web namespaced API
messaging.onBackgroundMessage((payload) => { console.log( '[firebase-messaging-sw.js] Received background message ', payload ); // Customize notification here const notificationTitle = 'Background Message Title'; const notificationOptions = { body: 'Background Message body.', icon: '/firebase-logo.png' }; self.registration.showNotification(notificationTitle, notificationOptions); });
أفضل الممارسات للإخطارات
إذا كنت على دراية بالرسائل الفورية للويب ، فربما تكون قد قرأت بالفعل الإرشادات العامة لما يجعل الإخطار جيدًا . بالنسبة للمطورين الذين يرسلون إشعارات عبر FCM للويب ، فإن أهم الاعتبارات هي الدقة والأهمية. فيما يلي بعض التوصيات المحددة للحفاظ على دقة الإخطارات الخاصة بك وملاءمتها:
- استخدم حقل الرمز لإرسال صورة ذات معنى. بالنسبة للعديد من حالات الاستخدام ، يجب أن يكون هذا شعار شركة أو تطبيقًا يتعرف عليه المستخدمون على الفور. أو ، بالنسبة لتطبيق الدردشة ، قد تكون صورة الملف الشخصي للمستخدم المرسل.
- استخدم حقل العنوان للتعبير عن الطبيعة الدقيقة للرسالة. على سبيل المثال ، تنقل عبارة "رد جيمي" معلومات أكثر دقة من "رسالة جديدة". لا تستخدم هذه المساحة القيمة لشركتك أو اسم التطبيق - استخدم الرمز لهذا الغرض.
- لا تستخدم عنوان الإشعار أو نصه لعرض اسم موقع الويب أو المجال الخاص بك ؛ تحتوي الإخطارات بالفعل على اسم المجال الخاص بك.
- أضف
fcm_options.link
، عادةً لربط المستخدم مرة أخرى بتطبيق الويب الخاص بك وجعله في موضع التركيز في المتصفح. في حالات نادرة حيث يمكن أن تتناسب جميع المعلومات التي تحتاج إلى نقلها مع الإشعار ، قد لا تحتاج إلى رابط.