Firebase क्लाउड से मैसेज भेजने की सुविधा का इस्तेमाल शुरू करना


इस क्विकस्टार्ट में, मोबाइल और वेब क्लाइंट ऐप्लिकेशन में Firebase Cloud Messaging सेट अप करने का तरीका बताया गया है, ताकि आपको मैसेज भेजने में कोई परेशानी न हो. सर्वर एनवायरमेंट के लिए, आपका सर्वर एनवायरमेंट और FCM देखें.

Flutter पर Firebase Cloud Messaging क्लाइंट ऐप्लिकेशन सेट अप करना

जिस प्लैटफ़ॉर्म को टारगेट किया जा रहा है उसके हिसाब से, सेटअप के कुछ और ज़रूरी चरण पूरे करने होंगे.

iOS+

मेथड स्विज़लिंग

Apple डिवाइसों पर FCM Flutter प्लगिन का इस्तेमाल करने के लिए, मेथड स्विज़लिंग ज़रूरी है. इसके बिना, Firebase की मुख्य सुविधाएं ठीक से काम नहीं करेंगी. जैसे, FCM टोकन हैंडलिंग.

Android

Google Play सेवाएं

FCM क्लाइंट के लिए, Android 4.4 या इसके बाद के वर्शन वाले ऐसे डिवाइस ज़रूरी हैं जिन पर Google Play services इंस्टॉल हो. इसके अलावा, Android 4.4 पर चलने वाला ऐसा एम्युलेटर भी इस्तेमाल किया जा सकता है जिसमें Google API मौजूद हों. ध्यान दें कि Android ऐप्लिकेशन को सिर्फ़ Google Play Store के ज़रिए डिप्लॉय नहीं किया जा सकता.

Play services SDK पर निर्भर रहने वाले ऐप्लिकेशन को, Google Play services की सुविधाओं को ऐक्सेस करने से पहले, हमेशा यह जांच करनी चाहिए कि डिवाइस में Google Play services का सही APK मौजूद है या नहीं. हमारा सुझाव है कि ऐसा दो जगहों पर करें: मुख्य गतिविधि के onCreate() तरीके में और इसके onResume() तरीके में. onCreate() में की गई जांच से यह पक्का होता है कि जांच पूरी होने से पहले, ऐप्लिकेशन का इस्तेमाल नहीं किया जा सकता. चेक इन onResume() यह पक्का करता है कि अगर उपयोगकर्ता किसी अन्य तरीके से, जैसे कि 'वापस जाएं' बटन के ज़रिए, चल रहे ऐप्लिकेशन पर वापस आता है, तो भी जांच की जाती है.

अगर डिवाइस पर Google Play services का सही वर्शन नहीं है, तो आपका ऐप्लिकेशन GoogleApiAvailability.makeGooglePlayServicesAvailable() को कॉल कर सकता है. इससे लोगों को Play Store से Google Play services डाउनलोड करने की अनुमति मिलेगी.

वेब

FCM की मदद से वेब क्रेडेंशियल कॉन्फ़िगर करना

FCM वेब इंटरफ़ेस, वेब क्रेडेंशियल का इस्तेमाल करता है. इन्हें वॉलंटरी ऐप्लिकेशन सर्वर आइडेंटिफ़िकेशन या "VAPID" कुंजियां कहा जाता है. इनका इस्तेमाल, वेब पुश नोटिफ़िकेशन की सुविधा देने वाली सेवाओं को सूचनाएं भेजने के अनुरोधों को अनुमति देने के लिए किया जाता है. अपने ऐप्लिकेशन को पुश नोटिफ़िकेशन पाने के लिए रजिस्टर करने के लिए, आपको अपने Firebase प्रोजेक्ट के साथ कुंजियों का एक जोड़ा जोड़ना होगा. Firebase कंसोल के ज़रिए, नया कुंजी जोड़ा जनरेट किया जा सकता है या मौजूदा कुंजी जोड़ा इंपोर्ट किया जा सकता है.

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

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

  2. प्लगिन इंस्टॉल करने के लिए, अपने Flutter प्रोजेक्ट के रूट से यह कमांड चलाएं:

    flutter pub add firebase_messaging
    
  3. अपडेट हो जाने के बाद, अपने Flutter ऐप्लिकेशन को फिर से बनाएं:

    flutter run
    

रजिस्ट्रेशन टोकन ऐक्सेस करना

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

// You may set the permission requests to "provisional" which allows the user to choose what type
// of notifications they would like to receive once the user receives a notification.
final notificationSettings = await FirebaseMessaging.instance.requestPermission(provisional: true);

// For apple platforms, make sure the APNS token is available before making any FCM plugin API calls
final apnsToken = await FirebaseMessaging.instance.getAPNSToken();
if (apnsToken != null) {
 // APNS token is available, make FCM plugin API requests...
}

वेब प्लैटफ़ॉर्म पर, अपनी VAPID सार्वजनिक पासकोड को getToken() पर पास करें:

final fcmToken = await FirebaseMessaging.instance.getToken(vapidKey: "BKagOny0KF_2pCJQ3m....moL0ewzQ8rZu");

जब भी टोकन अपडेट हो, तब सूचना पाने के लिए, onTokenRefresh स्ट्रीम की सदस्यता लें:

FirebaseMessaging.instance.onTokenRefresh
    .listen((fcmToken) {
      // TODO: If necessary send token to application server.

      // Note: This callback is fired at each app startup and whenever a new
      // token is generated.
    })
    .onError((err) {
      // Error getting token.
    });

अपने-आप शुरू होने की सुविधा को रोकना

जब FCM रजिस्ट्रेशन टोकन जनरेट होता है, तो लाइब्रेरी आइडेंटिफ़ायर और कॉन्फ़िगरेशन डेटा को Firebase पर अपलोड करती है. अगर आपको टोकन अपने-आप जनरेट होने से रोकना है, तो बिल्ड के समय अपने-आप शुरू होने की सुविधा बंद करें.

iOS

iOS पर, अपने Info.plist में मेटाडेटा वैल्यू जोड़ें:

FirebaseMessagingAutoInitEnabled = NO

Android

Android पर, Analytics कलेक्शन और FCM के अपने-आप शुरू होने की सुविधा बंद करें. इसके लिए, आपको AndroidManifest.xml में मेटाडेटा की ये वैल्यू जोड़नी होंगी. आपको दोनों सुविधाएं बंद करनी होंगी:

<meta-data
    android:name="firebase_messaging_auto_init_enabled"
    android:value="false" />
<meta-data
    android:name="firebase_analytics_collection_enabled"
    android:value="false" />

रनटाइम के दौरान FCM के अपने-आप शुरू होने की सुविधा को फिर से चालू करना

किसी ऐप्लिकेशन इंस्टेंस के लिए, अपने-आप शुरू होने की सुविधा चालू करने के लिए, setAutoInitEnabled() को कॉल करें:

await FirebaseMessaging.instance.setAutoInitEnabled(true);

एक बार सेट होने के बाद, ऐप्लिकेशन को रीस्टार्ट करने पर भी यह वैल्यू बनी रहती है.

टेस्ट के तौर पर सूचना वाला मैसेज भेजना

  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: AStream, जो बैकग्राउंड में चल रहे ऐप्लिकेशन को खोलने पर RemoteMessage पोस्ट करता है.

उपयोगकर्ताओं को बेहतर अनुभव देने के लिए, आपको दोनों स्थितियों को मैनेज करना चाहिए. यहां दिए गए कोड के उदाहरण में बताया गया है कि ऐसा कैसे किया जा सकता है:

class Application extends StatefulWidget {
  @override
  State createState() => _Application();
}

class _Application extends State {
  // In this example, suppose that all messages contain a data field with the key 'type'.
  Future 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 using 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 के लिए FCM का इस्तेमाल करने के लिए यहां कुछ विकल्प दिए गए हैं: