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

للبدء في استخدام FCM، قم ببناء أبسط حالة استخدام: إرسال رسالة إشعار اختبارية من مؤلف الإشعارات إلى جهاز تطوير عندما يكون التطبيق في الخلفية على الجهاز. تسرد هذه الصفحة جميع الخطوات اللازمة لتحقيق ذلك، بدءًا من الإعداد وحتى التحقق - وقد تغطي الخطوات التي أكملتها بالفعل إذا قمت بإعداد تطبيق Flutter لـ FCM.

قم بتثبيت البرنامج المساعد FCM

  1. قم بتثبيت وتهيئة Firebase SDKs for 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. حدد اختبار .

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

للحصول على معلومات حول تسليم الرسائل إلى تطبيقك، راجع لوحة معلومات تقارير FCM ، التي تسجل عدد الرسائل المرسلة والمفتوحة على أجهزة 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 لبدء الإرسال إلى التطبيقات الموجودة في المقدمة.

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

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

ثم، في عميل التطبيق الخاص بك: