إرسال رسالة اختبار إلى تطبيق في الخلفية

للبدء باستخدام ميزة "المراسلة عبر السحابة الإلكترونية من Firebase"، أنشئ أبسط حالة استخدام: إرسال رسالة إشعار اختبارية من أداة إنشاء الإشعارات إلى جهاز تطوير عندما يكون التطبيق في الخلفية على الجهاز. وتسرد هذه الصفحة جميع الخطوات اللازمة لتحقيق ذلك، بدءًا من الإعداد إلى التحقّق، وقد تتضمّن الخطوات التي سبق لك إكمالها إذا سبق لك إعداد تطبيق Flutter لنظام "إشعارات Google من خادم Firebase".

تثبيت المكوّن الإضافي لـ FCM

  1. ثبِّت حِزم تطوير البرامج (SDK) لمنصّة Firebase لنظام التشغيل Flutter وفعِّلها إذا لم يسبق لك إجراء ذلك.

  2. من جذر مشروع Flutter، شغِّل الأمر التالي لتثبيت المكوّن الإضافي:

    flutter pub add firebase_messaging
    
  3. بعد الانتهاء، أعِد إنشاء تطبيق Flutter:

    flutter run
    

الوصول إلى الرمز المميّز للتسجيل

لإرسال رسالة إلى جهاز معيّن، عليك معرفة رمز تسجيل هذا الجهاز. بما أنّك ستحتاج إلى إدخال الرمز المميّز في حقل في وحدة تحكّم الإشعارات لإكمال هذا الدليل التعليمي، احرص على نسخ الرمز المميّز أو تخزينه بأمان بعد استرجاعه.

لاسترداد الرمز المميّز الحالي للتسجيل لمثيل تطبيق، اتصل بالرقم getToken(). إذا لم يتم منح إذن إرسال الإشعارات، ستؤدي هذه الطريقة إلى طلب أذونات إرسال الإشعارات من المستخدم. بخلاف ذلك، يتم عرض رمز مميّز أو رفض المستقبل بسبب خطأ.

final fcmToken = await FirebaseMessaging.instance.getToken();

إرسال رسالة إشعار اختباري

  1. ثبِّت التطبيق وشغِّله على الجهاز المستهدَف. على أجهزة Apple، عليك قبول طلب الإذن لتلقّي إشعارات عن بُعد.

  2. تأكَّد من أنّ التطبيق قيد التشغيل في الخلفية على الجهاز.

  3. في وحدة تحكّم Firebase، افتح صفحة "الرسائل".

  4. إذا كانت هذه هي رسالتك الأولى، اختَر إنشاء حملتك الأولى.

    1. اختَر رسائل إشعارات Firebase ثمّ إنشاء.
  5. بخلاف ذلك، في علامة التبويب الحملات، اختَر حملة جديدة ثم الإشعارات.

  6. أدخِل نص الرسالة. وجميع الحقول الأخرى اختيارية.

  7. اختَر إرسال رسالة اختبارية من اللوحة اليمنى.

  8. في الحقل إضافة رمز مميّز لتسجيل خدمة إدارة الموافقة (FCM)، أدخِل رمز تسجيل الذي حصلت عليه في قسم سابق من هذا الدليل.

  9. انقر على اختبار.

بعد اختيار اختبار، من المفترض أن يتلقّى جهاز العميل المستهدَف (الذي يعمل التطبيق عليه في الخلفية) الإشعار.

للحصول على إحصاءات عن إرسال الرسائل إلى تطبيقك، اطّلِع على لوحة بيانات إعداد تقارير "إرسال الرسائل إلى Firebase" التي تسجِّل عدد الرسائل المُرسَلة والمُفتحة على أجهزة Apple وAndroid، بالإضافة إلى بيانات "مرّات الظهور" (الإشعارات التي يراها المستخدمون) لتطبيقات Android.

معالجة التفاعل

عندما ينقر المستخدمون على إشعار، يكون الإجراء التلقائي على كلٍّ من Android وiOS هو فتح التطبيق. إذا تم إنهاء التطبيق، سيتم تشغيله، وإذا كان في الخلفية، سيتم إظهاره في المقدّمة.

استنادًا إلى محتوى الإشعار، قد تحتاج إلى معالجة تفاعل المستخدم عند فتح التطبيق. على سبيل المثال، إذا تم إرسال رسالة محادثة جديدة باستخدام إشعار واختارها المستخدم، قد تحتاج إلى فتح المحادثة المحدّدة عند فتح التطبيق.

توفّر حزمة firebase-messaging طريقتَين للتعامل مع هذا التفاعل:

  1. getInitialMessage(): في حال فتح التطبيق من حالة إنهاء، تعرض هذه الطريقة Future يحتوي على RemoteMessage. بعد استخدام القيمة، ستتم إزالتها.RemoteMessage
  2. 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 لبدء الإرسال إلى التطبيقات التي تعمل في المقدّمة.

الاستفادة من ميزات إضافية في الإشعارات

لإضافة سلوك آخر أكثر تقدمًا إلى تطبيقك، ستحتاج إلى تنفيذ على الخادم.

بعد ذلك، في برنامج تشغيل تطبيقك: