बैकग्राउंड में चल रहे ऐप्लिकेशन को टेस्ट मैसेज भेजें

FCM का इस्तेमाल शुरू करने के लिए, सबसे आसान इस्तेमाल का उदाहरण देखें: सूचना कंपोज़र से डेवलपमेंट डिवाइस पर टेस्ट सूचना वाला मैसेज भेजना. ऐसा तब करना है, जब डिवाइस पर ऐप्लिकेशन बैकग्राउंड में चल रहा हो. इस पेज पर, सेटअप से लेकर पुष्टि तक, इस सुविधा को पाने के सभी चरणों की सूची दी गई है. अगर आपने FCM के लिए Flutter ऐप्लिकेशन सेट अप किया है, तो हो सकता है कि इसमें वे चरण भी शामिल हों जिन्हें आपने पहले ही पूरा कर लिया हो.

FCM प्लगिन इंस्टॉल करना

  1. अगर आपने अब तक ऐसा नहीं किया है, तो Flutter के लिए Firebase SDK टूल इंस्टॉल करें और उन्हें शुरू करें.

  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 ऐप्लिकेशन में मैसेज पाना लेख पढ़ें.

सूचना वाले मैसेज से आगे बढ़ें

अपने ऐप्लिकेशन में अन्य, ज़्यादा बेहतर सुविधाएं जोड़ने के लिए, आपको सर्वर इंटिग्रेशन की ज़रूरत होगी.

इसके बाद, अपने ऐप्लिकेशन क्लाइंट में: