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

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

تثبيت المكوّن الإضافي لخدمة "المراسلة عبر السحابة الإلكترونية من Firebase"

  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. في الحقل المُسمَّى إضافة الرمز المميّز للتسجيل في خدمة "المراسلة عبر السحابة الإلكترونية من Firebase"، أدخِل الرمز المميّز للتسجيل الذي حصلت عليه في قسم سابق من هذا الدليل.

  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 لبدء الإرسال إلى التطبيقات التي تعمل في المقدّمة.

تجاوز رسائل الإشعارات

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

بعد ذلك، ضِمن برنامج تطبيقك: