1- مقدمة
تاريخ التعديل الأخير: 04-04-2022
يرشدك هذا الدرس التطبيقي خلال عملية تطوير تطبيق متعدد الأنظمة الأساسية باستخدام "المراسلة عبر السحابة الإلكترونية من Firebase" (FCM) باستخدام Flutter. ستكتب جزءًا واحدًا من تنفيذ التطبيق، ثم تنشئه وتشغله بسلاسة على ثلاث أنظمة أساسية: Android وiOS والويب. وستتعرّف أيضًا على كيفية دمج ميزة "المراسلة عبر السحابة الإلكترونية من Firebase" في Flutter وكيفية كتابة الرموز البرمجية لتلقّي الرسائل وإرسالها. وأخيرًا، يقدِّم الدرس التطبيقي حول الترميز ميزة الحظر الخاصة بالنظام الأساسي لواجهة برمجة التطبيقات FCM HTTP v1 API، والتي تتيح لك إرسال رسالة لها سلوكيات مختلفة على أنظمة أساسية مختلفة.
شرط أساسي
فهم أساسيات Flutter
المعلومات التي ستطّلع عليها
- كيفية إعداد تطبيق Flutter وإنشاؤه
- كيفية إضافة تبعيات "المراسلة عبر السحابة الإلكترونية من Firebase"
- كيفية إرسال رسائل واحدة عبر خدمة "المراسلة عبر السحابة الإلكترونية من Firebase" إلى تطبيقك.
- كيفية إرسال رسائل "المراسلة عبر السحابة الإلكترونية من Firebase" للموضوع إلى تطبيقك.
المتطلبات
- أحدث إصدار ثابت من Android Studio تم ضبطه باستخدام المكوّنَين الإضافيَين Dart وFlutter
يمكنك تنفيذ الدرس التطبيقي حول الترميز باستخدام أي من الأجهزة التالية:
- جهاز Android فعلي متصل بجهاز الكمبيوتر.
- محاكي Android (اطّلِع على تشغيل التطبيقات على محاكي Android).
- متصفّح من اختيارك، مثل Chrome
اختياريًا، لتشغيل الدرس التطبيقي حول الترميز باستخدام نظام iOS الأساسي، ستحتاج إلى جهاز iOS وحساب مطوِّر من Apple وجهاز macOS مع تثبيت XCode.
2- إعداد Flutter
إذا سبق لك إعداد بيئة تطوير Flutter، يمكنك تخطّي هذا القسم.
لإعداد بيئة تطوير Flutter، يُرجى اتّباع الخطوات التالية:
- تنزيل برنامج Flutter وتثبيته لنظام التشغيل: تثبيت | مرفرفة
- تأكَّد من إضافة أداة Flutter إلى مسارك.
- إعداد المحرِّر لتطبيق Flutter كما هو موضَّح في إعداد محرِّر | Flutter تأكَّد من تثبيت المكوّنَين الإضافيَين Flutter وDart في المحرِّر. ستستخدم استوديو Android في بقية الدرس التطبيقي حول الترميز.
- من سطر الأوامر، شغِّل
flutter doctor
، الذي يفحص عملية الإعداد ويسرد أي تبعيات مفقودة يجب إصلاحها. اتبع التعليمات لإصلاح أي تبعيات مفقودة مهمة. لاحظ أن بعض التبعيات قد لا تكون ضرورية. على سبيل المثال، إذا كنت لا تريد التطوير لنظام التشغيل iOS، لن يكون عدم وجود تبعية CocoaPods مشكلة في الحظر. - نفِّذ هذا الأمر لإنشاء تطبيق Flutter في دليل
fcmflutter
(flutter create --org com.flutter.fcm --project-name fcmflutter fcmflutter
)، ثم غيِّر الأدلة إلىfcmflutter
.
- في "استوديو Android"، انتقِل إلى ملف -> افتح وابحث عن مسار تطبيق Flutter ثم انقر على فتح لفتح المشروع في "استوديو Android". يتوفّر رمز التطبيق في ملف
lib/main.dart
.
في شريط أدوات "استوديو Android"، انقر على السهم المتّجه للأسفل لاختيار جهاز Android. إذا كانت أداة اختيار الاستهداف فارغة، يمكنك تثبيت أجهزة Android افتراضية أو متصفِّح Chrome أو محاكي iOS إذا كنت تفضِّل تشغيل التطبيق من متصفِّح ويب أو جهاز iOS. قد تحتاج إلى تشغيل الجهاز يدويًا وإعادة تحميل القائمة للعثور على الجهاز المستهدَف.
انقر على تشغيل لتشغيل التطبيق.
تهانينا لقد أنشأت تطبيق Flutter بنجاح.
3- إعداد Firebase وFlutterFire
لتطوير تطبيق يتكامل مع "المراسلة عبر السحابة الإلكترونية من Firebase" باستخدام Flutter، يجب توفّر ما يلي:
- مشروع على Firebase
- واجهة سطر الأوامر (CLI) في Firebase صالحة
- تثبيت FlutterFire
- تطبيق تم إعداده وإنشاؤه باستخدام "
flutterfire configure
".
إنشاء مشروعك على Firebase
إذا كان لديك مشروع على Firebase من قبل، يمكنك تخطّي هذه الخطوة.
- إذا كان لديك حساب على Google، افتح Firebase وسجِّل الدخول باستخدام حسابك على Google، ثم انقر على الانتقال إلى وحدة التحكّم.
- في "وحدة تحكُّم Firebase"، انقر على إضافة مشروع. اتّبِع التعليمات لإنشاء مشروع. لا تضع علامة في المربّع تفعيل "إحصاءات Google" لهذا المشروع لأنّك لن تستخدمه فيه.
- بعد إنشاء المشروع، انتقِل إلى إعدادات المشروع الخاصة به من خلال النقر على رمز الترس بجانب نظرة عامة على المشروع.
يتم استخدام رقم تعريف المشروع لتعريف المشروع بشكلٍ فريد، وقد يختلف عن اسم المشروع. سيتم استخدام رقم تعريف المشروع لإعداد FlutterFire لاحقًا.
تهانينا لقد أنشأت مشروع Firebase بنجاح.
إعداد واجهة سطر الأوامر في Firebase
في حال إعداد واجهة سطر الأوامر في Firebase، يمكنك تخطّي هذه الخطوة.
انتقِل إلى مرجع واجهة سطر الأوامر في Firebase لتنزيل واجهة سطر الأوامر في Firebase وتثبيتها. سجِّل الدخول إلى Firebase باستخدام حسابك على Google باستخدام الأمر التالي:
firebase login
إعداد FlutterFire
- ثبِّت المكوّن الإضافي FlutterFire باستخدام الأمر:
flutter pub add firebase_core
- تثبيت المكوّن الإضافي لخدمة "المراسلة عبر السحابة الإلكترونية من Firebase":
flutter pub add firebase_messaging
- إعداد واجهة سطر الأوامر FlutterFire:
dart pub global activate flutterfire_cli
- ضبط مشروع Firebase على Flutter:
flutterfire configure --project=fcm4flutter.
استخدِم مفاتيح الأسهم والمسافة لاختيار الأنظمة الأساسية، أو اضغط على Enter لاستخدام المنصات التلقائية.
يستخدم هذا الدرس التطبيقي حول الترميز الأنظمة الأساسية التلقائية (Android وiOS والويب)، ولكن يمكنك اختيار نظام أساسي واحد أو نظامَين أساسيَين. إذا طُلب منك إدخال معرّف حزمة iOS، أدخِل com.flutter.fcm.fcmflutter
أو معرّف حزمة iOS بالتنسيق [company domain name].[project name]
. بعد اكتمال الأمر، أعِد تحميل صفحة "وحدة تحكُّم Firebase". وستلاحظ أنه أنشأ تطبيقات للأنظمة الأساسية المحددة ضمن مشروع Firebase.
ينشئ هذا الأمر ملف firebase_options.dart
ضمن الدليل lib
، والذي يحتوي على جميع الخيارات المطلوبة للتهيئة.
إعداد خدمة "المراسلة عبر السحابة الإلكترونية" لنظام التشغيل iOS
- انتقِل إلى صفحة مطوّر البرامج من Apple، وانقر على إنشاء مفتاح في علامة التبويب المفاتيح.
- أدخِل اسم المفتاح وحدِّد خدمات الإشعارات الفورية في Apple (APN).
- نزِّل ملف المفتاح الذي يحتوي على امتداد الملف
.p8
. - في وحدة تحكُّم Firebase، انتقِل إلى إعدادات المشروع للمشروع واختَر علامة التبويب المراسلة عبر السحابة الإلكترونية.
- حمِّل ملف مفتاح أسماء نقاط الوصول (APNs) لتطبيق iOS في علامة التبويب المراسلة عبر السحابة الإلكترونية. أدخِل معرّف مفتاح أسماء نقاط الوصول (APN) من علامة التبويب المراسلة في السحابة الإلكترونية ورقم تعريف الفريق الذي يمكن العثور عليه في مركز اشتراك Apple.
4. التحضير لخدمة "المراسلة عبر السحابة الإلكترونية من Firebase"
قبل أن يتلقى التطبيق الرسائل من ميزة "المراسلة عبر السحابة الإلكترونية من Firebase"، يجب:
- إعداد FlutterFire
- اطلب أذونات إرسال الإشعارات.
- سجِّل من خلال خدمة "المراسلة عبر السحابة الإلكترونية من Firebase" للحصول على الرمز المميّز للتسجيل.
الإعداد
لإعداد الخدمة، استبدل الدالة الرئيسية (lib/main.dart
) بهذا الرمز:
// core Flutter primitives
import 'package:flutter/foundation.dart';
// core FlutterFire dependency
import 'package:firebase_core/firebase_core.dart';
// generated by
flutterfire configure
import 'firebase_options.dart';
// FlutterFire's Firebase Cloud Messaging plugin
import 'package:firebase_messaging/firebase_messaging.dart';
// TODO: Add stream controller
// TODO: Define the background message handler
Future<void> main() async {
WidgetsFlutterBinding.ensureInitialized();
await Firebase.initializeApp(
options: DefaultFirebaseOptions.currentPlatform,
);
// TODO: Request permission
// TODO: Register with FCM
// TODO: Set up foreground message handler
// TODO: Set up background message handler
runApp(MyApp());
}
شغّل الأدوات -> Flutter -> يمكنك الحصول على Flutter Pub في "استوديو Android" لتحميل الحِزم التي تمت إضافتها في إعداد FlutterFire، وعرض الرمز باستخدام إعداد Intellisense المناسب في "استوديو Android".
يؤدي ذلك إلى إعداد FlutterFire للنظام الأساسي الحالي "DefaultFirebaseOptions.currentPlatform
"، والذي يتم استيراده من ملف firebase_options.dart
الذي تم إنشاؤه. تجدر الإشارة إلى أن initializeApp
هي دالة غير متزامنة، وتضمن الكلمة الرئيسية await
اكتمال الإعداد قبل تشغيل التطبيق.
طلب الإذن
يجب أن يطلب التطبيق إذن المستخدم لتلقّي الإشعارات. تعرض طريقة requestPermission
التي يوفّرها firebase_messaging
مربّع حوار أو نافذة منبثقة تطلب من المستخدم السماح بالإذن أو رفضه.
أولاً، انسخ هذا الرمز إلى الدالة الرئيسية ضمن التعليق TODO: Request permission
. توضّح لك رسالة settings
المعروضة ما إذا كان المستخدم قد منح الإذن. ننصح بطلب الإذن فقط عندما يحتاج المستخدم إلى استخدام ميزة تتطلّب الوصول (على سبيل المثال، عندما يفعّل المستخدم الإشعارات في إعدادات التطبيق). في هذا الدرس التطبيقي حول الترميز، نطلب الحصول على إذن عند بدء تشغيل التطبيق لتبسيط الأمر.
final messaging = FirebaseMessaging.instance;
final settings = await messaging.requestPermission(
alert: true,
announcement: false,
badge: true,
carPlay: false,
criticalAlert: false,
provisional: false,
sound: true,
);
if (kDebugMode) {
print('Permission granted: ${settings.authorizationStatus}');
}
بعد ذلك، في شريط أدوات "استوديو Android"، اختَر Chrome (web)
من أداة اختيار الاستهداف، ثم شغِّل التطبيق مرة أخرى.
بعد ذلك، يتم تشغيل علامة تبويب Chrome مع نافذة منبثقة تطلب الإذن. إذا نقرت على Allow
، سيظهر سجلّ في وحدة تحكّم "استوديو Android": Permission granted: AuthorizationStatus.authorized
. بعد السماح بطلب الإذن أو حظره، يتم تخزين ردّك مع تطبيقك في المتصفّح، ولن تظهر النافذة المنبثقة مرة أخرى. تجدر الإشارة إلى أنّه عند إعادة تشغيل تطبيق الويب في "استوديو Android"، قد يُطلب منك منح الإذن مرة أخرى.
التسجيل
انسخ هذا الرمز إلى الوظيفة الرئيسية أسفل التعليق TODO: Register with FCM
للتسجيل في خدمة FCM. يعرض الاستدعاء getToken
رمزًا مميَّزًا للتسجيل يمكن أن يستخدمه خادم التطبيق أو بيئة الخادم الموثوق بها لإرسال رسائل إلى المستخدمين.
// It requests a registration token for sending messages to users from your App server or other trusted server environment.
String? token = await messaging.getToken();
if (kDebugMode) {
print('Registration Token=$token');
}
في شريط أدوات "استوديو Android"، اختَر جهاز Android وشغِّل التطبيق. في وحدة تحكّم "استوديو Android"، تتم طباعة الرمز المميّز للتسجيل كما يلي:
I/flutter ( 3717): Permission granted: AuthorizationStatus.authorized I/flutter ( 3717): Registration Token=dch. . . D2P:APA9. . .kbb4
انسخه إلى محرر نصوص، لأنك ستستخدمه لإرسال الرسائل لاحقًا.
uses-sdk:minSdkVersion 16 cannot be smaller than version 19 declared in library [:firebase_messaging]
خطوات إضافية لتلقّي الرسائل على الويب
تحتاج تطبيقات الويب إلى خطوتَين إضافيتَين للحصول على الرمز المميّز للتسجيل والاستماع إلى الرسائل الواردة. يحتاج الويب إلى تمرير مفتاح VAPID إلى getToken
من أجل السماح بطلبات الإرسال إلى خدمات Web Push المتوافقة.
أولاً، افتح علامة التبويب المراسلة عبر السحابة الإلكترونية لمشروع Firebase في "وحدة تحكُّم Firebase"، ثم مرِّر للأسفل إلى القسم ضبط الويب للعثور على مفتاحَي التشفير الحاليين أو أنشئ مفتاحَي تشفير جديدَين. انقر على الزر المميّز لنسخ المفتاح حتى يمكن استخدامه كمفتاح vapid.
بعد ذلك، استبدِل رمز التسجيل في قسم التسجيل بهذا الرمز، ثم عدِّل vapidKey:
// TODO: replace with your own VAPID key
const vapidKey = "<YOUR_PUBLIC_VAPID_KEY_HERE>";
// use the registration token to send messages to users from your trusted server environment
String? token;
if (DefaultFirebaseOptions.currentPlatform == DefaultFirebaseOptions.web) {
token = await messaging.getToken(
vapidKey: vapidKey,
);
} else {
token = await messaging.getToken();
}
if (kDebugMode) {
print('Registration Token=$token');
}
بعد ذلك، أنشِئ ملف firebase-messaging-sw.js
أسفل الدليل web/
في جذر مشروعك. انسخ ما يلي إلى firebase-messaging-sw.js
للسماح لتطبيق الويب بتلقّي حدثَين (onMessage
). راجِع إعدادات خيارات الإشعارات في مشغّل الخدمات للحصول على مزيد من المعلومات.
importScripts("https://www.gstatic.com/firebasejs/9.6.10/firebase-app-compat.js");
importScripts("https://www.gstatic.com/firebasejs/9.6.10/firebase-messaging-compat.js");
// todo Copy/paste firebaseConfig from Firebase Console
const firebaseConfig = {
apiKey: "...",
authDomain: "...",
databaseURL: "...",
projectId: "...",
storageBucket: "...",
messagingSenderId: "...",
appId: "...",
};
firebase.initializeApp(firebaseConfig);
const messaging = firebase.messaging();
// todo Set up background message handler
بعد ذلك، ضمن إعدادات المشروع -> عام، انتقِل للأسفل واعثر على تطبيق الويب، ثم انسخ قسم رمز firebaseConfig
والصقه في "firebase-messaging-sw.js
".
وأخيرًا، في شريط أدوات "استوديو Android"، اختَر Chrome (web)
في أداة اختيار الهدف وشغِّل التطبيق. في وحدة تحكّم "استوديو Android"، تتم طباعة الرمز المميّز للتسجيل كما يلي:
Debug service listening on ws://127.0.0.1:61538/BLQQ3Fg-h7I=/ws Permission granted: AuthorizationStatus.authorized Registration Token=fH. . .ue:APA91. . .qwt3chpv
انسخ الرمز المميّز للتسجيل إلى محرِّر نصوص كي تتمكّن من استخدامه لإرسال الرسائل لاحقًا.
خطوات إضافية لتلقّي الرسائل على iOS
لتلقّي الرسائل من خدمة "المراسلة عبر السحابة الإلكترونية من Firebase"، يجب تفعيل الإشعارات الفورية وأوضاع الخلفية على Xcode على أجهزة iOS:
- في "استوديو Android"، انقر بزر الماوس الأيمن على اسم المشروع ثم اختَر Flutter -> افتح وحدة iOS في Xcode.
- بعد تشغيل Xcode، فعِّل الإشعارات الفورية وأوضاع الخلفية في التوقيع علامة التبويب "الإمكانات" لهدف المشروع. راجع إعداد تطبيقك للحصول على مزيد من المعلومات.
- في شريط أدوات "استوديو Android"، اختَر جهاز iOS في أداة الاختيار المستهدَفة وشغِّل التطبيق. بعد منح إذن إرسال الإشعارات، تتم طباعة الرمز المميّز للتسجيل في وحدة تحكّم "استوديو Android".
تهانينا، لقد سجّلت تطبيقك بنجاح من خلال خدمة "المراسلة عبر السحابة الإلكترونية من Firebase". ستكون جاهزًا لتلقي الرسائل، كما هو موضح في القسم التالي.
5- تلقي رسائل من خدمة "المراسلة عبر السحابة الإلكترونية من Firebase"
إعداد معالِجات الرسائل
يحتاج التطبيق إلى معالجة أحداث onMessage
عند وصول رسائل أثناء تشغيل التطبيق في وضع المقدّمة، ومعالجة أحداث onBackgroundMessage
عندما يكون التطبيق في الخلفية.
معالج الرسائل التي تعمل في المقدّمة
أولاً، عليك إضافة وحدة تحكّم بالبث بعد التعليق TODO: Add stream controller
في الملف main.dart
لنقل الرسائل من معالج الحدث إلى واجهة المستخدم.
import 'package:rxdart/rxdart.dart';
// used to pass messages from event handler to the UI
final _messageStreamController = BehaviorSubject<RemoteMessage>();
لإضافة التبعية rxdart، عليك تنفيذ الأمر التالي من دليل المشروع: flutter pub add rxdart
.
بعد ذلك، شغِّل الأدوات -> Flutter -> الحصول على Flutter Pub في "استوديو Android" لتحميل حزمة rxdart.dart
وعرض الرمز باستخدام إعدادات Intellisense المناسبة في "استوديو Android".
بعد ذلك، يمكنك إضافة معالج أحداث للاستماع إلى الرسائل التي تعمل في المقدّمة بعد التعليق TODO: Set up foreground message handler
. تطبع السجلّات وتنشر الرسالة إلى وحدة التحكّم بالبث.
FirebaseMessaging.onMessage.listen((RemoteMessage message) {
if (kDebugMode) {
print('Handling a foreground message: ${message.messageId}');
print('Message data: ${message.data}');
print('Message notification: ${message.notification?.title}');
print('Message notification: ${message.notification?.body}');
}
_messageStreamController.sink.add(message);
});
بعد ذلك، استبدِل تطبيق "الولاية" المصغّر الأصلي في الملف main.dart
بهذا الرمز، ما يؤدي إلى إضافة مشترك إلى وحدة التحكّم بالبث في تطبيق "الولاية" المصغّر، ثم عرض الرسالة الأخيرة على التطبيق المصغّر.
class _MyHomePageState extends State<MyHomePage> {
String _lastMessage = "";
_MyHomePageState() {
_messageStreamController.listen((message) {
setState(() {
if (message.notification != null) {
_lastMessage = 'Received a notification message:'
'\nTitle=${message.notification?.title},'
'\nBody=${message.notification?.body},'
'\nData=${message.data}';
} else {
_lastMessage = 'Received a data message: ${message.data}';
}
});
});
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text(widget.title),
),
body: Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
Text('Last message from Firebase Messaging:',
style: Theme.of(context).textTheme.titleLarge),
Text(_lastMessage, style: Theme.of(context).textTheme.bodyLarge),
],
),
),
);
}
}
معالج الرسائل في الخلفية لنظام التشغيل Android أو iOS
يعالج معالج onBackgroundMessage
الرسائل عندما يكون التطبيق في الخلفية. يجب أن يكون المعالج دالة من المستوى الأعلى. يمكن تحديث واجهة المستخدم عند عرض التطبيق في المقدّمة من خلال معالجة الرسائل (راجِع التعامل مع التفاعل) أو المزامنة مع خادم التطبيق.
يمكنك إنشاء دالة المعالج بعد التعليق TODO: Define the background message handler
خارج الدالة الرئيسية واستدعائها في الدالة الرئيسية بعد التعليق TODO: Set up background message handler
.
// TODO: Define the background message handler
Future<void> _firebaseMessagingBackgroundHandler(RemoteMessage message) async {
await Firebase.initializeApp();
if (kDebugMode) {
print("Handling a background message: ${message.messageId}");
print('Message data: ${message.data}');
print('Message notification: ${message.notification?.title}');
print('Message notification: ${message.notification?.body}');
}
}
void main() {
...
// TODO: Set up background message handler
FirebaseMessaging.onBackgroundMessage(_firebaseMessagingBackgroundHandler);
runApp(MyApp());
}
معالج الرسائل في الخلفية للويب
بدايةً من الإصدار 11.2.8 من FlutterFire firebase_messaging، أصبح التعامل مع الرسائل في الخلفية على الأنظمة الأساسية المستنِدة إلى الويب يتطلب مسارًا مختلفًا. لذا، يجب إضافة معالج رسائل منفصل في عامل الخدمة web/firebase-messaging-sw.js
.
messaging.onBackgroundMessage((message) => {
console.log("onBackgroundMessage", message);
});
إعداد خادم التطبيق
- يمكنك استيراد رمز خادم إجراء التفعيل من خلال فتح مشروع https://github.com/FirebaseExtended/firebase_fcm_flutter/tree/main/server في "استوديو Android". والخادم عبارة عن مشروع Java مستند إلى Gradle، ويعتمد على حزمة SDK firebase-admin، التي توفر وظيفة إرسال الرسائل عبر خدمة FCM.
- عليك إعداد حساب خدمة Firebase يسمح لحزمة تطوير البرامج (SDK) لمشرف Firebase بمنح الإذن باستدعاء واجهات برمجة تطبيقات المراسلة عبر السحابة الإلكترونية من Firebase. افتح إعدادات المشروع في وحدة تحكُّم Firebase واختَر علامة التبويب حسابات الخدمة. اختيار "Java" وانقر على
Generate new private key
لتنزيل مقتطف الإعدادات. - أعِد تسمية الملف إلى
service-account.json
وانسخه إلى مسارsrc/main/resources
في مشروع الخادم.
إرسال رسالة اختبار
في ملف FcmSender.java
، ينشئ تطبيق sendMessageToFcmRegistrationToken
رسالة إشعار تحتوي على حمولة بيانات. يستهدف الرمز المميز للتسجيل مثيل التطبيق الذي تم إرسال الرسالة إليه.
private static void sendMessageToFcmRegistrationToken() throws Exception {
String registrationToken = "REPLACE_WITH_FCM_REGISTRATION_TOKEN";
Message message =
Message.builder()
.putData("FCM", "https://firebase.google.com/docs/cloud-messaging")
.putData("flutter", "https://flutter.dev/")
.setNotification(
Notification.builder()
.setTitle("Try this new app")
.setBody("Learn how FCM works with Flutter")
.build())
.setToken(registrationToken)
.build();
FirebaseMessaging.getInstance().send(message);
System.out.println("Message to FCM Registration Token sent successfully!!");
}
- انسخ الرمز المميّز لتسجيل Android الذي تم نسخه من قسم "التسجيل"، والصقه في قيمة المتغيّر
registrationToken
. - انقر على تشغيل لتشغيل الدالة الرئيسية وإرسال الرسالة إلى المستخدم من خلال خدمة "المراسلة عبر السحابة الإلكترونية من Firebase".
عندما يكون تطبيق Android في الخلفية، تظهر الرسالة في حاوية الإشعارات.
عندما يكون تطبيق Android في المقدّمة، سيظهر لك سجلّ في وحدة تحكّم "استوديو Android" بعنوان "التعامل مع الرسالة التي تعمل في المقدّمة". ويظهر محتوى الرسالة أيضًا في واجهة المستخدم لأنّ واجهة المستخدم مشتركة في وحدة التحكّم بالبث للرسائل الجديدة.
في حال لصق الرمز المميّز للتسجيل وأرسلت الرسالة من خادم التطبيق أو بيئة خادم أخرى موثوق بها، سيظهر لك سلوك مشابه:
- عندما يكون تطبيق الويب في الخلفية (على سبيل المثال، عندما يكون مخفيًا بواسطة نافذة أخرى أو علامة تبويب أخرى في وضع النشاط)، سيظهر لك إشعار ويب.
- عندما يكون تطبيق الويب في المقدّمة، يمكنك عرض السجلّ في وحدة تحكّم Chrome من خلال النقر بزر الماوس الأيمن على الويب واختيار
Inspect
. ويتم عرض محتوى الرسالة أيضًا في واجهة المستخدم.
6- إرسال رسالة حول الموضوع
تتيح ميزة إلغاء النظام الأساسي لواجهة برمجة التطبيقات FCM HTTP v1 API لطلب إرسال الرسالة أن يكون له سلوكيات مختلفة على الأنظمة الأساسية المختلفة. وتتمثّل إحدى حالات استخدام هذه الميزة في عرض محتوى رسالة إشعار مختلف استنادًا إلى النظام الأساسي. ويتم استخدام هذه الميزة بشكل كامل عند استهداف أجهزة متعدّدة (التي قد تشمل أنظمة أساسية متعدّدة) من خلال المراسلة التي تتناول مواضيع معيّنة. يرشدك هذا القسم خلال الخطوات اللازمة لجعل تطبيقك يتلقّى رسالة موضوعية مخصّصة لكل نظام أساسي.
الاشتراك في موضوع من العميل
للاشتراك في موضوع، يمكنك استدعاء الإجراء messaging.subscribeToTopic
في نهاية الوظيفة الرئيسية في ملف main.dart
لتطبيق Flutter.
// subscribe to a topic.
const topic = 'app_promotion';
await messaging.subscribeToTopic(topic);
[اختياري] الاشتراك في موضوع من الخادم للويب
يمكنك تخطّي هذا القسم إذا لم تكن تطوّر المحتوى على منصة الويب.
لا يمكن حاليًا استخدام "حزمة تطوير البرامج (SDK) JavaScript لخدمة "المراسلة عبر السحابة الإلكترونية من Firebase" (FCM) مع الاشتراك في المواضيع من جهة العميل. بدلاً من ذلك، يمكنك الاشتراك باستخدام واجهة برمجة تطبيقات إدارة المواضيع من جهة الخادم في "SDK للمشرف". يوضِّح هذا الرمز البرمجي الاشتراك في الموضوع من جهة الخادم باستخدام حزمة تطوير البرامج (SDK) لمشرف Java.
private static void subscribeFcmRegistrationTokensToTopic() throws Exception {
List<String> registrationTokens =
Arrays.asList(
"REPLACE_WITH_FCM_REGISTRATION_TOKEN"); // TODO: add FCM Registration Tokens to
// subscribe
String topicName = "app_promotion";
TopicManagementResponse response = FirebaseMessaging.getInstance().subscribeToTopic(registrationTokens, topicName);
System.out.printf("Num tokens successfully subscribed %d", response.getSuccessCount());
}
افتح خادم التطبيق وانقر على تشغيل لتشغيل الدالة الرئيسية في ملف FcmSubscriptionManager.java
:
إرسال رسالة تتضمّن عمليات تجاوز النظام الأساسيإلى موضوع
أصبحت الآن جاهزًا لإرسال رسالة بتجاوز النظام الأساسي للموضوع. في مقتطف الرمز التالي:
- تُنشئ طلب إرسال مع رسالة أساسية وعنوان "
A new app is available
". - تنشئ الرسالة إشعارًا لعرض الرسالة بعنوان "
A new app is available
". على iOS وأنظمة الويب الأساسية. - تنشئ الرسالة إشعارًا بعرض الرسالة بعنوان "
A new Android app is available
". على أجهزة Android.
private static void sendMessageToFcmTopic() throws Exception {
String topicName = "app_promotion";
Message message =
Message.builder()
.setNotification(
Notification.builder()
.setTitle("A new app is available")
.setBody("Check out our latest app in the app store.")
.build())
.setAndroidConfig(
AndroidConfig.builder()
.setNotification(
AndroidNotification.builder()
.setTitle("A new Android app is available")
.setBody("Our latest app is available on Google Play store")
.build())
.build())
.setTopic("app_promotion")
.build();
FirebaseMessaging.getInstance().send(message);
System.out.println("Message to topic sent successfully!!");
}
في الوظيفة الرئيسية للملف FcmSender.java
، ألغِ التعليق sendMessageToFcmTopic();
. انقر على تشغيل لإرسال رسالة الموضوع.
7- الملخّص والخطوات التالية
للتلخيص، تعرّفت على كيفية تطوير التطبيقات المتعدّدة الأنظمة الأساسية باستخدام Flutter وFCM، والتي تتضمّن عملية إعداد البيئة ودمج التبعية وتلقّي الرسائل وإرسالها. لمزيد من التفاصيل، يمكنك الاطّلاع على المواد التالية:
دروس تطبيقية حول الترميز
- يمكنك الاطّلاع على مقالة التعرّف على طريقة عمل Flutter مع منتجات Firebase الأخرى، بما في ذلك مصادقة المستخدم وبيانات المزامنة،.
- للمزيد من المعلومات حول "المراسلة عبر السحابة الإلكترونية من Firebase"، بما في ذلك المراسلات داخل التطبيق والمواضيع: استخدام "المراسلة عبر السحابة الإلكترونية من Firebase" و"إدارة الهوية وإمكانية الوصول" لإرسال رسائل إلى المستخدمين وأول رسالة فورية لإرسالها عبر بث متعدد باستخدام مواضيع "المراسلة عبر السحابة الإلكترونية من Firebase"