للبدء في استخدام ميزة "المراسلة عبر السحابة الإلكترونية من Firebase"، عليك إنشاء أبسط حالة استخدام، وهي إرسال رسالة إشعار تجريبية من أداة إنشاء الإشعارات إلى جهاز تطوير عندما يكون التطبيق يعمل في الخلفية على الجهاز. تتضمّن هذه الصفحة جميع الخطوات اللازمة لتحقيق ذلك، بدءًا من عملية الإعداد إلى عملية إثبات الملكية، وقد تتضمّن خطوات سبق لك إكمالها إذا كنت قد أعددت تطبيق Flutter لاستخدام FCM.
تثبيت المكوّن الإضافي لخدمة FCM
ثبِّت حِزم تطوير البرامج (SDK) لمنصة Firebase الخاصة بإطار عمل Flutter وابدأ إعدادها إذا لم يسبق لك إجراء ذلك.
من جذر مشروع Flutter، شغِّل الأمر التالي لتثبيت المكوّن الإضافي:
flutter pub add firebase_messaging
بعد الانتهاء، أعِد إنشاء تطبيق Flutter باتّباع الخطوات التالية:
flutter run
الوصول إلى رمز التسجيل
لإرسال رسالة إلى جهاز معيّن، يجب معرفة رمز التسجيل الخاص بهذا الجهاز. بما أنّك ستحتاج إلى إدخال الرمز المميّز في حقل في "وحدة تحكّم الإشعارات" لإكمال هذا البرنامج التعليمي، احرص على نسخ الرمز المميّز أو تخزينه بشكل آمن بعد استرداده.
لاسترداد الرمز المميز الحالي للتسجيل الخاص بإحدى مثيلات التطبيق، استدعِ الدالة
getToken()
. إذا لم يتم منح إذن إرسال الإشعارات، ستطلب هذه الطريقة من المستخدم منح الإذن. بخلاف ذلك، يعرض رمزًا مميزًا أو يرفض التاريخ المستقبلي بسبب حدوث خطأ.
final fcmToken = await FirebaseMessaging.instance.getToken();
إرسال رسالة إشعار اختبار
ثبِّت التطبيق وشغِّله على الجهاز المستهدف. على أجهزة Apple، عليك قبول طلب الحصول على إذن بتلقّي إشعارات عن بُعد.
تأكَّد من تشغيل التطبيق في الخلفية على الجهاز.
في وحدة تحكّم Firebase، افتح صفحة "المراسلة".
إذا كانت هذه هي رسالتك الأولى، اختَر إنشاء حملتك الأولى.
- اختَر رسائل إشعارات Firebase، ثمّ انقر على إنشاء.
بخلاف ذلك، في علامة التبويب الحملات، انقر على حملة جديدة، ثمّ على الإشعارات.
أدخِل نص الرسالة. جميع الحقول الأخرى اختيارية.
اختَر إرسال رسالة اختبار من اللوحة اليمنى.
في الحقل الذي يحمل التصنيف إضافة رمز مميّز للتسجيل في FCM، أدخِل رمز التسجيل الذي حصلت عليه في قسم سابق من هذا الدليل.
انقر على اختبار.
بعد النقر على اختبار، من المفترض أن يتلقّى جهاز العميل المستهدَف (مع تشغيل التطبيق في الخلفية) الإشعار.
للحصول على إحصاءات حول وصول الرسائل إلى تطبيقك، اطّلِع على لوحة بيانات التقارير في FCM التي تسجّل عدد الرسائل المرسَلة والمفتوحة على أجهزة Apple وAndroid، بالإضافة إلى بيانات "مرات الظهور" (الإشعارات التي يراها المستخدمون) لتطبيقات Android.
التعامل مع التفاعل
عندما ينقر المستخدمون على إشعار، يكون السلوك التلقائي على كلّ من Android وiOS هو فتح التطبيق. إذا تم إنهاء التطبيق، سيتم تشغيله، وإذا كان يعمل في الخلفية، سيتم نقله إلى المقدّمة.
استنادًا إلى محتوى الإشعار، قد تحتاج إلى التعامل مع تفاعل المستخدم عند فتح التطبيق. على سبيل المثال، إذا تم إرسال رسالة محادثة جديدة باستخدام إشعار واختارها المستخدم، قد تحتاج إلى فتح المحادثة المحدّدة عند فتح التطبيق.
تقدّم حزمة firebase-messaging
طريقتَين للتعامل مع هذا التفاعل:
-
getInitialMessage()
: إذا تم فتح التطبيق من حالة إنهاء، تعرض هذه الطريقةFuture
تحتوي علىRemoteMessage
. بعد استخدامRemoteMessage
، ستتم إزالته. onMessageOpenedApp
:Stream
ينشرRemoteMessage
عند فتح التطبيق من حالة في الخلفية.
لضمان توفير تجربة سلسة للمستخدمين، عليك التعامل مع كلتا الحالتين. يوضّح مثال الرمز البرمجي أدناه كيفية تحقيق ذلك:
class Application extends StatefulWidget {
@override
State<StatefulWidget> createState() => _Application();
}
class _Application extends State<Application> {
// In this example, suppose that all messages contain a data field with the key 'type'.
Future<void> setupInteractedMessage() async {
// Get any messages which caused the application to open from
// a terminated state.
RemoteMessage? initialMessage =
await FirebaseMessaging.instance.getInitialMessage();
// If the message also contains a data property with a "type" of "chat",
// navigate to a chat screen
if (initialMessage != null) {
_handleMessage(initialMessage);
}
// Also handle any interaction when the app is in the background via a
// Stream listener
FirebaseMessaging.onMessageOpenedApp.listen(_handleMessage);
}
void _handleMessage(RemoteMessage message) {
if (message.data['type'] == 'chat') {
Navigator.pushNamed(context, '/chat',
arguments: ChatArguments(message),
);
}
}
@override
void initState() {
super.initState();
// Run code required to handle interacted messages in an async function
// as initState() must not be async
setupInteractedMessage();
}
@override
Widget build(BuildContext context) {
return Text("...");
}
}
تعتمد طريقة التعامل مع التفاعل على إعدادات تطبيقك. يعرض المثال أعلاه
مثالاً أساسيًا على استخدام StatefulWidget
.
الخطوات التالية
إرسال رسائل إلى التطبيقات التي تعمل في المقدّمة
بعد إرسال رسائل الإشعارات بنجاح أثناء تشغيل تطبيقك في الخلفية، اطّلِع على تلقّي الرسائل في تطبيق Flutter للبدء في إرسال الرسائل إلى التطبيقات التي يتم تشغيلها في المقدّمة.
تجاوز رسائل الإشعارات
لإضافة سلوكيات أخرى أكثر تقدّمًا إلى تطبيقك، ستحتاج إلى تنفيذ على الخادم.
بعد ذلك، في برنامج تطبيقك: