फायरबेस क्लाउड मैसेजिंग का उपयोग करके फ़्लटर ऐप के लिए सूचनाएं भेजें और प्राप्त करें

1 परिचय

अंतिम अद्यतन : 2022-04-04

यह कोडलैब आपको फ़्लटर का उपयोग करके फायरबेस क्लाउड मैसेजिंग (FCM) के साथ एक मल्टी-प्लेटफ़ॉर्म ऐप विकसित करने की प्रक्रिया से परिचित कराता है। आप ऐप के कार्यान्वयन का एक टुकड़ा लिखेंगे, और फिर इसे तीन प्लेटफार्मों पर निर्बाध रूप से बनाएंगे और चलाएंगे: एंड्रॉइड, आईओएस और वेब। आप यह भी सीखेंगे कि फ़्लटर में एफसीएम को कैसे एकीकृत किया जाए और संदेश प्राप्त करने और भेजने के लिए कोड कैसे लिखा जाए। अंत में, कोडलैब FCM HTTP v1 API के प्लेटफ़ॉर्म-विशिष्ट ब्लॉक फ़ीचर का परिचय देता है, जो आपको एक संदेश भेजने की सुविधा देता है जिसका विभिन्न प्लेटफ़ॉर्म पर अलग-अलग व्यवहार होता है।

शर्त

स्पंदन की बुनियादी समझ.

आप क्या सीखेंगे

  • फ़्लटर ऐप कैसे सेट अप करें और बनाएं।
  • एफसीएम निर्भरताएँ कैसे जोड़ें।
  • अपने ऐप पर एकल एफसीएम संदेश कैसे भेजें।
  • अपने ऐप पर विषय FCM संदेश कैसे भेजें।

आपको किस चीज़ की ज़रूरत पड़ेगी

  • एंड्रॉइड स्टूडियो का नवीनतम स्थिर संस्करण डार्ट और फ़्लटर प्लगइन्स के साथ कॉन्फ़िगर किया गया है।

आप निम्न में से किसी भी डिवाइस का उपयोग करके कोडलैब चला सकते हैं:

वैकल्पिक रूप से, iOS प्लेटफ़ॉर्म का उपयोग करके कोडलैब चलाने के लिए, आपको एक iOS डिवाइस, एक Apple डेवलपर खाता और XCode स्थापित एक macOS डिवाइस की आवश्यकता होती है।

2. स्पंदन सेटअप

यदि आपके पास पहले से ही फ़्लटर विकास वातावरण स्थापित है, तो इस अनुभाग को छोड़ दें।

फ़्लटर विकास वातावरण स्थापित करने के लिए, इन चरणों का पालन करें:

  1. अपने ऑपरेटिंग सिस्टम के लिए फ़्लटर डाउनलोड और इंस्टॉल करें: इंस्टॉल करें | स्पंदन
  2. सुनिश्चित करें कि फ़्लटर टूल आपके पथ में जोड़ा गया है।
  3. फ़्लटर के लिए अपना संपादक सेट करें जैसा कि एक संपादक सेट अप करें | में दिखाया गया है फ़्लटर अपने संपादक के लिए फ़्लटर और डार्ट प्लगइन्स इंस्टॉल करना सुनिश्चित करें। शेष कोडलैब के लिए, आप एंड्रॉइड स्टूडियो का उपयोग करेंगे।
  4. कमांड लाइन से, flutter doctor चलाएं, जो आपके सेटअप के माध्यम से स्कैन करता है और किसी भी लापता निर्भरता को सूचीबद्ध करता है जिसे ठीक करने की आवश्यकता है। किसी भी महत्वपूर्ण छूटी हुई निर्भरता को ठीक करने के लिए निर्देशों का पालन करें। ध्यान दें कि कुछ निर्भरताएँ आवश्यक नहीं हो सकती हैं। उदाहरण के लिए, यदि आप iOS के लिए विकास नहीं करने जा रहे हैं, तो लापता CocoaPods निर्भरता कोई अवरुद्ध करने वाली समस्या नहीं होगी।
  5. fcmflutter निर्देशिका flutter create --org com.flutter.fcm --project-name fcmflutter fcmflutter में अपना फ़्लटर ऐप बनाने के लिए इस कमांड को चलाएँ, और फिर निर्देशिकाओं को fcmflutter में बदलें।
  1. एंड्रॉइड स्टूडियो में, फ़ाइल -> ओपन पर जाएं, अपने फ़्लटर ऐप का पथ ढूंढें और फिर एंड्रॉइड स्टूडियो में प्रोजेक्ट खोलने के लिए ओपन पर क्लिक करें। ऐप कोड lib/main.dart फ़ाइल में है।

एंड्रॉइड स्टूडियो टूलबार पर, एंड्रॉइड डिवाइस का चयन करने के लिए नीचे तीर पर क्लिक करें। यदि लक्ष्य चयनकर्ता खाली है, तो वर्चुअल एंड्रॉइड डिवाइस , या क्रोम ब्राउज़र या आईओएस सिम्युलेटर इंस्टॉल करें यदि आप वेब ब्राउज़र या आईओएस डिवाइस से ऐप लॉन्च करना पसंद करते हैं। लक्ष्य डिवाइस को ढूंढने के लिए आपको डिवाइस को मैन्युअल रूप से लॉन्च करने और सूची को रीफ्रेश करने की आवश्यकता हो सकती है।

बिल्ड लक्ष्य मेनू ड्रॉप डाउन तीर के साथ एक एंड्रॉइड स्टूडियो टूलबार हाइलाइट किया गया है।

चलाएँ पर क्लिक करें एंड्रॉइड स्टूडियो में रन बटन ऐप लॉन्च करने के लिए.

लॉन्च किए गए फ़्लटर डेमो ऐप का यूआई

बधाई हो! आपने फ़्लटर ऐप सफलतापूर्वक बना लिया है।

3. फायरबेस और फ़्लटरफ़ायर सेटअप

फ़्लटर का उपयोग करके फायरबेस क्लाउड मैसेजिंग के साथ एकीकृत होने वाला ऐप विकसित करने के लिए, आपको चाहिए:

  • एक फायरबेस परियोजना।
  • एक कार्यशील फायरबेस सीएलआई।
  • फ़्लटरफ़ायर की स्थापना.
  • flutterfire configure के साथ कॉन्फ़िगर और जेनरेट किया गया एक ऐप।

अपना फायरबेस प्रोजेक्ट बनाएं

यदि आपके पास पहले से ही फायरबेस प्रोजेक्ट है, तो आप इस चरण को छोड़ सकते हैं।

  1. यदि आपके पास Google खाता है, तो Firebase खोलें और अपने Google खाते से साइन इन करें, और फिर कंसोल पर जाएं पर क्लिक करें।
  2. फायरबेस कंसोल में, प्रोजेक्ट जोड़ें पर क्लिक करें। प्रोजेक्ट बनाने के लिए निर्देशों का पालन करें. इस प्रोजेक्ट के लिए Google Analytics सक्षम करें को चेक न करें क्योंकि आप इस प्रोजेक्ट में इसका उपयोग नहीं करेंगे।
  3. प्रोजेक्ट बनने के बाद, प्रोजेक्ट अवलोकन के आगे गियर आइकन पर क्लिक करके प्रोजेक्ट की प्रोजेक्ट सेटिंग्स पर जाएँ।

फायरबेस कंसोल का एक क्रॉप किया हुआ स्क्रीनशॉट, जो प्रोजेक्ट सेटिंग्स मेनू और के लिए आइकन को हाइलाइट करता है

प्रोजेक्ट आईडी का उपयोग प्रोजेक्ट को विशिष्ट रूप से पहचानने के लिए किया जाता है, और यह प्रोजेक्ट नाम से भिन्न हो सकता है। प्रोजेक्ट आईडी का उपयोग बाद में फ़्लटरफ़ायर स्थापित करने के लिए किया जाएगा।

प्रोजेक्ट आईडी को हाइलाइट करने वाला फायरबेस कंसोल का एक क्रॉप्ड स्क्रीनशॉट

बधाई हो! आपने सफलतापूर्वक एक फायरबेस प्रोजेक्ट बना लिया है।

फायरबेस सीएलआई सेट करें

यदि आपके पास फायरबेस सीएलआई सेटअप है, तो आप इस चरण को छोड़ सकते हैं।

फायरबेस सीएलआई को डाउनलोड और इंस्टॉल करने के लिए फायरबेस सीएलआई संदर्भ पर जाएं। निम्नलिखित आदेश के साथ अपने Google खाते से फायरबेस में लॉग इन करें:

firebase login

फ़्लटरफ़ायर सेट करें

  1. कमांड का उपयोग करके फ़्लटरफ़ायर प्लगइन स्थापित करें: flutter pub add firebase_core
  2. एफसीएम प्लगइन स्थापित करें: flutter pub add firebase_messaging
  3. फ़्लटरफ़ायर सीएलआई सेट करें: dart pub global activate flutterfire_cli
  4. फ़्लटर पर फ़ायरबेस प्रोजेक्ट कॉन्फ़िगर करें: flutterfire configure --project=fcm4flutter. प्लेटफ़ॉर्म का चयन करने के लिए तीर कुंजियों और स्थान का उपयोग करें या डिफ़ॉल्ट प्लेटफ़ॉर्म का उपयोग करने के लिए Enter दबाएँ।

यह कोडलैब डिफ़ॉल्ट प्लेटफ़ॉर्म (एंड्रॉइड, आईओएस और वेब) का उपयोग करता है, लेकिन आप केवल एक या दो प्लेटफ़ॉर्म का चयन कर सकते हैं। यदि iOS बंडल आईडी के लिए कहा जाए, तो [company domain name].[project name] के प्रारूप में com.flutter.fcm.fcmflutter या अपनी स्वयं की iOS बंडल आईडी दर्ज करें। कमांड पूरा होने के बाद, फायरबेस कंसोल पेज को रीफ्रेश करें। आप देखेंगे कि इसने फायरबेस प्रोजेक्ट के तहत चयनित प्लेटफार्मों के लिए ऐप्स बनाए हैं।

फ़ायरबेस कंसोल का एक क्रॉप किया हुआ स्क्रीनशॉट चयनित प्लेटफ़ॉर्म के लिए बनाए गए ऐप्स दिखा रहा है

यह कमांड lib निर्देशिका के अंतर्गत एक firebase_options.dart फ़ाइल बनाता है, जिसमें आरंभीकरण के लिए आवश्यक सभी विकल्प शामिल होते हैं।

iOS के लिए क्लाउड मैसेजिंग सेट करें

  1. Apple डेवलपर पृष्ठ पर जाएँ, और कुंजी टैब पर एक कुंजी बनाएँ पर क्लिक करें।

कुंजी निर्माण के लिए पेज घटकों को हाइलाइट करने वाले Apple डेवलपर पेज का एक क्रॉप्ड स्क्रीनशॉट

  1. कुंजी के लिए नाम दर्ज करें और ऐप्पल पुश नोटिफिकेशन सर्विसेज (एपीएन) की जांच करें। नए कुंजी नाम के लिए टेक्स्ट बॉक्स को हाइलाइट करने वाले Apple डेवलपर पेज का एक क्रॉप किया हुआ स्क्रीनशॉट
  2. कुंजी फ़ाइल डाउनलोड करें, जिसमें .p8 फ़ाइल एक्सटेंशन है। कुंजी डाउनलोड करने के लिए बटन को हाइलाइट करने वाले Apple डेवलपर पेज का एक क्रॉप किया हुआ स्क्रीनशॉट
  3. फायरबेस कंसोल में, प्रोजेक्ट की प्रोजेक्ट सेटिंग्स पर जाएँ और क्लाउड मैसेजिंग टैब चुनें।

अपडेट प्रोजेक्ट सेटिंग्स के लिए घटकों को हाइलाइट करने वाले फायरबेस कंसोल पेज का एक क्रॉप्ड स्क्रीनशॉट

क्लाउड मैसेजिंग टैब को हाइलाइट करने वाले फायरबेस कंसोल पेज का एक क्रॉप किया हुआ स्क्रीनशॉट

  1. क्लाउड मैसेजिंग टैब में iOS ऐप के लिए APNs कुंजी फ़ाइल अपलोड करें। क्लाउड मैसेजिंग टैब से एपीएन कुंजी आईडी और टीम आईडी दर्ज करें, जो ऐप्पल सदस्यता केंद्र में पाई जा सकती है। एपीएन प्रमाणीकरण कुंजी अपलोड करने के लिए बटनों को हाइलाइट करने वाले फायरबेस कंसोल पृष्ठ का एक छोटा स्क्रीनशॉट

4. एफसीएम तैयारी

इससे पहले कि कोई ऐप FCM से संदेश प्राप्त कर सके, उसे यह करना होगा:

  • फ़्लटरफ़ायर आरंभ करें।
  • अधिसूचना अनुमतियों का अनुरोध करें.
  • पंजीकरण टोकन प्राप्त करने के लिए एफसीएम के साथ पंजीकरण करें।

प्रारंभ

सेवा आरंभ करने के लिए, मुख्य फ़ंक्शन ( lib/main.dart ) को इस कोड से बदलें:

// core Flutter primitives
import 'package:flutter/foundation.dart';
// core FlutterFire dependency
import 'package:firebase_core/firebase_core.dart';
// generated by 
flutterfire configure
import 'firebase_options.dart';
// FlutterFire's Firebase Cloud Messaging plugin
import 'package:firebase_messaging/firebase_messaging.dart';

// TODO: Add stream controller
// TODO: Define the background message handler

Future<void> main() async {
 WidgetsFlutterBinding.ensureInitialized();
 await Firebase.initializeApp(
   options: DefaultFirebaseOptions.currentPlatform,
 );

 // TODO: Request permission
 // TODO: Register with FCM
 // TODO: Set up foreground message handler
 // TODO: Set up background message handler

 runApp(MyApp());
}

फिर सेट अप फ़्लटरफायर में जोड़े गए पैकेजों को लोड करने के लिए एंड्रॉइड स्टूडियो में टूल्स -> फ़्लटर -> फ़्लटर पब गेट चलाएं, और एंड्रॉइड स्टूडियो में उचित इंटेलिसेंस सेटिंग के साथ कोड प्रदर्शित करें।

यह वर्तमान प्लेटफ़ॉर्म DefaultFirebaseOptions.currentPlatform के लिए फ़्लटरफ़ायर को प्रारंभ करता है, जिसे जेनरेट की गई firebase_options.dart फ़ाइल से आयात किया जाता है। ध्यान दें कि initializeApp एक एसिंक्रोनस फ़ंक्शन है, और await कीवर्ड यह सुनिश्चित करता है कि एप्लिकेशन चलाने से पहले इनिशियलाइज़ेशन पूरा हो गया है।

अनुमति का अनुरोध करें

ऐप को सूचनाएं प्राप्त करने के लिए उपयोगकर्ता की अनुमति मांगनी होगी। firebase_messaging द्वारा प्रदान की गई requestPermission विधि एक संवाद या पॉपअप दिखाती है जो उपयोगकर्ता को अनुमति देने या अस्वीकार करने के लिए प्रेरित करती है।

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

final messaging = FirebaseMessaging.instance;

final settings = await messaging.requestPermission(
 alert: true,
 announcement: false,
 badge: true,
 carPlay: false,
 criticalAlert: false,
 provisional: false,
 sound: true,
);

 if (kDebugMode) {
   print('Permission granted: ${settings.authorizationStatus}');
 }

इसके बाद, एंड्रॉइड स्टूडियो टूलबार पर, लक्ष्य चयनकर्ता से Chrome (web) चयन करें और फिर ऐप को दोबारा चलाएं।

लक्ष्य चयनकर्ता और रन बटन के साथ एंड्रॉइड स्टूडियो टूलबार का एक क्रॉप किया हुआ स्क्रीनशॉट

फिर, अनुमति मांगने वाले पॉपअप के साथ एक क्रोम टैब लॉन्च होता है। यदि आप Allow क्लिक करते हैं, तो आपको एंड्रॉइड स्टूडियो कंसोल में एक लॉग दिखाई देगा: Permission granted: AuthorizationStatus.authorized । आपके द्वारा अनुमति अनुरोध को अनुमति देने या ब्लॉक करने के बाद, आपकी प्रतिक्रिया ब्राउज़र में आपके ऐप के साथ संग्रहीत हो जाती है, और पॉप-अप दोबारा नहीं दिखाया जाता है। ध्यान दें कि जब आप एंड्रॉइड स्टूडियो पर वेब ऐप दोबारा चलाते हैं, तो आपको फिर से अनुमति के लिए कहा जा सकता है। Chrome टैब का एक क्रॉप किया हुआ स्क्रीनशॉट जिसमें पॉपअप मांगा जा रहा है

पंजीकरण

इस कोड को टिप्पणी के नीचे मुख्य फ़ंक्शन में कॉपी करें TODO: Register with FCM पंजीकरण करने के लिए FCM के साथ पंजीकरण करें। getToken कॉल एक पंजीकरण टोकन लौटाता है जिसका उपयोग उपयोगकर्ताओं को संदेश भेजने के लिए ऐप सर्वर या विश्वसनीय सर्वर वातावरण द्वारा किया जा सकता है।

// It requests a registration token for sending messages to users from your App server or other trusted server environment.
String? token = await messaging.getToken();

if (kDebugMode) {
  print('Registration Token=$token');
}

एंड्रॉइड स्टूडियो टूलबार पर, एक एंड्रॉइड डिवाइस चुनें और ऐप चलाएं। एंड्रॉइड स्टूडियो कंसोल में, पंजीकरण टोकन इस तरह मुद्रित किया जाता है:

I/flutter ( 3717): Permission granted: AuthorizationStatus.authorized
I/flutter ( 3717): Registration Token=dch. . . D2P:APA9. . .kbb4

इसे टेक्स्ट एडिटर में कॉपी करें, क्योंकि आप इसका उपयोग बाद में संदेश भेजने के लिए करेंगे।

uses-sdk:minSdkVersion 16 cannot be smaller than version 19 declared in library [:firebase_messaging]

वेब पर संदेश प्राप्त करने के लिए अतिरिक्त कदम

वेब ऐप्स को पंजीकरण टोकन प्राप्त करने और आने वाले संदेशों को सुनने के लिए दो अतिरिक्त चरणों की आवश्यकता होती है। समर्थित वेब पुश सेवाओं के लिए अनुरोध भेजने को अधिकृत करने के लिए वेब को getToken के लिए एक VAPID कुंजी पास करने की आवश्यकता है।

सबसे पहले, फायरबेस कंसोल में फायरबेस प्रोजेक्ट के क्लाउड मैसेजिंग टैब को खोलें, मौजूदा कुंजी जोड़ी को खोजने के लिए वेब कॉन्फ़िगरेशन अनुभाग तक नीचे स्क्रॉल करें, या एक नई कुंजी जोड़ी उत्पन्न करें। कुंजी को कॉपी करने के लिए हाइलाइट किए गए बटन पर क्लिक करें ताकि इसे vapidKey के रूप में उपयोग किया जा सके।

वेब कॉन्फ़िगरेशन पृष्ठ के वेब पुश प्रमाणपत्र घटक का एक क्रॉप किया हुआ स्क्रीनशॉट जो कुंजी जोड़ी को हाइलाइट करता है

इसके बाद, पंजीकरण अनुभाग में पंजीकरण कोड को इस कोड से बदलें और फिर vapidKey को अपडेट करें:

// TODO: replace with your own VAPID key
 const vapidKey = "<YOUR_PUBLIC_VAPID_KEY_HERE>";

 // use the registration token to send messages to users from your trusted server environment
 String? token;

 if (DefaultFirebaseOptions.currentPlatform == DefaultFirebaseOptions.web) {
   token = await messaging.getToken(
     vapidKey: vapidKey,
   );
 } else {
   token = await messaging.getToken();
 }

 if (kDebugMode) {
   print('Registration Token=$token');
 }

फिर, अपने प्रोजेक्ट के रूट में web/ निर्देशिका के नीचे एक firebase-messaging-sw.js फ़ाइल बनाएं। वेब ऐप को onMessage इवेंट प्राप्त करने की अनुमति देने के लिए निम्नलिखित को firebase-messaging-sw.js पर कॉपी करें। अधिक जानकारी के लिए सेवा कर्मी में सेटिंग अधिसूचना विकल्प देखें।

importScripts("https://www.gstatic.com/firebasejs/9.6.10/firebase-app-compat.js");
importScripts("https://www.gstatic.com/firebasejs/9.6.10/firebase-messaging-compat.js");

// todo Copy/paste firebaseConfig from Firebase Console
const firebaseConfig = {
 apiKey: "...",
 authDomain: "...",
 databaseURL: "...",
 projectId: "...",
 storageBucket: "...",
 messagingSenderId: "...",
 appId: "...",
};

firebase.initializeApp(firebaseConfig);
const messaging = firebase.messaging();

// todo Set up background message handler

उसके बाद, प्रोजेक्ट सेटिंग्स -> जनरल टैब के तहत, नीचे स्क्रॉल करें और वेब ऐप ढूंढें, firebaseConfig कोड सेक्शन को कॉपी करें और इसे firebase-messaging-sw.js में पेस्ट करें। फायरबेस कॉन्फिग पेज के वेब ऐप घटक का एक क्रॉप किया हुआ स्क्रीनशॉट

अंत में, एंड्रॉइड स्टूडियो टूलबार पर, लक्ष्य चयनकर्ता में Chrome (web) चयन करें और ऐप चलाएं। एंड्रॉइड स्टूडियो कंसोल में, पंजीकरण टोकन इस तरह मुद्रित किया जाता है:

Debug service listening on ws://127.0.0.1:61538/BLQQ3Fg-h7I=/ws
Permission granted: AuthorizationStatus.authorized
Registration Token=fH. . .ue:APA91. . .qwt3chpv

पंजीकरण टोकन को टेक्स्ट एडिटर में कॉपी करें ताकि आप बाद में संदेश भेजने के लिए इसका उपयोग कर सकें।

iOS पर संदेश प्राप्त करने के लिए अतिरिक्त कदम

FCM से संदेश प्राप्त करने के लिए, iOS उपकरणों को Xcode पर पुश नोटिफिकेशन और बैकग्राउंड मोड सक्षम करने की आवश्यकता है:

  1. एंड्रॉइड स्टूडियो में, प्रोजेक्ट नाम पर राइट-क्लिक करें और फिर फ़्लटर -> एक्सकोड में आईओएस मॉड्यूल खोलें का चयन करें। का एक क्रॉप किया हुआ स्क्रीनशॉट
  2. Xcode लॉन्च होने के बाद, प्रोजेक्ट लक्ष्य के लिए हस्ताक्षर और क्षमताएं टैब में पुश नोटिफिकेशन और बैकग्राउंड मोड सक्षम करें। अधिक जानकारी के लिए अपना ऐप कॉन्फ़िगर करें देखें।
  3. एंड्रॉइड स्टूडियो टूलबार पर, लक्ष्य चयनकर्ता में एक iOS डिवाइस चुनें और ऐप चलाएं। अधिसूचना अनुमति दिए जाने के बाद, पंजीकरण टोकन एंड्रॉइड स्टूडियो कंसोल में मुद्रित होता है।

एक iOS ऐप का क्रॉप किया गया स्क्रीनशॉट जो सूचनाएं भेजने की अनुमति मांग रहा है

बधाई हो, आपने अपना ऐप FCM के साथ सफलतापूर्वक पंजीकृत कर लिया है। आप संदेश प्राप्त करने के लिए तैयार हैं, जैसा कि अगले भाग में बताया गया है।

5. एफसीएम से संदेश प्राप्त करें

संदेश हैंडलर सेट करें

जब ऐप फ़ोरग्राउंड मोड में हो तब संदेश आने पर ऐप को onMessage ईवेंट को संभालने की आवश्यकता होती है, और जब ऐप बैकग्राउंड में हो तो onBackgroundMessage ईवेंट को संभालने की आवश्यकता होती है।

अग्रभूमि संदेश हैंडलर

सबसे पहले, टिप्पणी के बाद एक स्ट्रीम नियंत्रक जोड़ें कार्य: इवेंट हैंडलर से यूआई तक संदेश भेजने के लिए फ़ाइल main.dart में TODO: Add stream controller

import 'package:rxdart/rxdart.dart';
// used to pass messages from event handler to the UI
final _messageStreamController = BehaviorSubject<RemoteMessage>();

निर्भरता rxdart जोड़ने के लिए, प्रोजेक्ट निर्देशिका से यह कमांड चलाएँ: flutter pub add rxdart

इसके बाद, rxdart.dart पैकेज को लोड करने के लिए एंड्रॉइड स्टूडियो में टूल्स -> फ़्लटर -> फ़्लटर पब गेट चलाएं और एंड्रॉइड स्टूडियो में उपयुक्त इंटेलिसेंस सेटिंग्स के साथ कोड प्रदर्शित करें।

फिर, टिप्पणी के बाद अग्रभूमि संदेशों को सुनने के लिए एक ईवेंट हैंडलर जोड़ें TODO: Set up foreground message handler । यह लॉग प्रिंट करता है और स्ट्रीम नियंत्रक को संदेश प्रकाशित करता है।

 FirebaseMessaging.onMessage.listen((RemoteMessage message) {
   if (kDebugMode) {
     print('Handling a foreground message: ${message.messageId}');
     print('Message data: ${message.data}');
     print('Message notification: ${message.notification?.title}');
     print('Message notification: ${message.notification?.body}');
   }

   _messageStreamController.sink.add(message);
 });

उसके बाद, फ़ाइल main.dart में मूल स्टेट विजेट को इस कोड से बदलें, जो स्टेट विजेट में स्ट्रीम कंट्रोलर में एक सब्सक्राइबर जोड़ता है और विजेट पर अंतिम संदेश प्रदर्शित करता है।

class _MyHomePageState extends State<MyHomePage> {
 String _lastMessage = "";

 _MyHomePageState() {
   _messageStreamController.listen((message) {
     setState(() {
       if (message.notification != null) {
         _lastMessage = 'Received a notification message:'
             '\nTitle=${message.notification?.title},'
             '\nBody=${message.notification?.body},'
             '\nData=${message.data}';
       } else {
         _lastMessage = 'Received a data message: ${message.data}';
       }
     });
   });
 }

 @override
 Widget build(BuildContext context) {
   return Scaffold(
     appBar: AppBar(
       title: Text(widget.title),
     ),
     body: Center(
       child: Column(
         mainAxisAlignment: MainAxisAlignment.center,
         children: <Widget>[
           Text('Last message from Firebase Messaging:',
               style: Theme.of(context).textTheme.titleLarge),
           Text(_lastMessage, style: Theme.of(context).textTheme.bodyLarge),
         ],
       ),
     ),
   );
 }
}

एंड्रॉइड/आईओएस के लिए पृष्ठभूमि संदेश हैंडलर

जब ऐप बैकग्राउंड में हो तो संदेशों को onBackgroundMessage हैंडलर द्वारा नियंत्रित किया जाता है। हैंडलर एक शीर्ष-स्तरीय फ़ंक्शन होना चाहिए। यूआई को तब अपडेट किया जा सकता है जब ऐप को संदेशों को संभालकर ( हैंडलिंग इंटरेक्शन देखें) या ऐप सर्वर के साथ सिंक करके अग्रभूमि में लाया जाता है।

टिप्पणी के बाद हैंडलर फ़ंक्शन बनाएं कार्य TODO: Define the background message handler और टिप्पणी के बाद इसे मुख्य फ़ंक्शन में कॉल करें TODO: Set up background message handler

// TODO: Define the background message handler
Future<void> _firebaseMessagingBackgroundHandler(RemoteMessage message) async {
 await Firebase.initializeApp();

 if (kDebugMode) {
   print("Handling a background message: ${message.messageId}");
   print('Message data: ${message.data}');
   print('Message notification: ${message.notification?.title}');
   print('Message notification: ${message.notification?.body}');
 }
}

void main() {
 ...

 // TODO: Set up background message handler
 FirebaseMessaging.onBackgroundMessage(_firebaseMessagingBackgroundHandler);

 runApp(MyApp());
}

वेब के लिए पृष्ठभूमि संदेश हैंडलर

फ़्लटरफ़ायर फ़ायरबेस_मैसेजिंग संस्करण 11.2.8 के अनुसार, वेब-आधारित प्लेटफ़ॉर्म पर पृष्ठभूमि संदेशों को संभालने के लिए एक अलग प्रवाह की आवश्यकता होती है। इसलिए, आपको सर्विस वर्कर web/firebase-messaging-sw.js में एक अलग संदेश हैंडलर जोड़ने की आवश्यकता है।

messaging.onBackgroundMessage((message) => {
 console.log("onBackgroundMessage", message);
});

ऐप सर्वर सेट करें

  1. एंड्रॉइड स्टूडियो में https://github.com/FirebaseExdependent/firebase_fcm_flutter/tree/main/server प्रोजेक्ट खोलकर स्टार्टर सर्वर कोड आयात करें। सर्वर एक ग्रैडल-आधारित जावा प्रोजेक्ट है जो फायरबेस-एडमिन एसडीके पर निर्भरता के साथ है, जो एफसीएम संदेश भेजने की कार्यक्षमता प्रदान करता है।
  2. एक फायरबेस सेवा खाता सेट करें जो फायरबेस एडमिन एसडीके को एफसीएम एपीआई पर कॉल को अधिकृत करने देता है। फायरबेस कंसोल में प्रोजेक्ट सेटिंग्स खोलें और सेवा खाता टैब चुनें। 'जावा' चुनें और कॉन्फ़िगरेशन स्निपेट डाउनलोड करने के लिए Generate new private key पर क्लिक करें। प्रोजेक्ट सेटिंग पेज के सेवा खाते घटक के एडमिन एसडीके कॉन्फ़िगरेशन स्निपेट को हाइलाइट करने वाला एक क्रॉप किया हुआ स्क्रीनशॉट
  3. फ़ाइल का नाम बदलकर service-account.json रखें और इसे सर्वर प्रोजेक्ट के src/main/resources पथ पर कॉपी करें।

एक परीक्षण संदेश भेजें

FcmSender.java फ़ाइल में, sendMessageToFcmRegistrationToken डेटा पेलोड के साथ एक अधिसूचना संदेश बनाता है। पंजीकरण टोकन उस ऐप इंस्टेंस को लक्षित करता है जिस पर संदेश भेजा गया है।

private static void sendMessageToFcmRegistrationToken() throws Exception {
   String registrationToken = "REPLACE_WITH_FCM_REGISTRATION_TOKEN";
   Message message =
       Message.builder()
           .putData("FCM", "https://firebase.google.com/docs/cloud-messaging")
           .putData("flutter", "https://flutter.dev/")
           .setNotification(
               Notification.builder()
                   .setTitle("Try this new app")
                   .setBody("Learn how FCM works with Flutter")
                   .build())
           .setToken(registrationToken)
           .build();

   FirebaseMessaging.getInstance().send(message);

   System.out.println("Message to FCM Registration Token sent successfully!!");
 }
  1. पंजीकरण अनुभाग से कॉपी किए गए एंड्रॉइड पंजीकरण टोकन को कॉपी करें, और इसे वेरिएबल registrationToken के मान पर पेस्ट करें।
  2. चलाएँ पर क्लिक करें एंड्रॉइड स्टूडियो में रन बटन मुख्य फ़ंक्शन को चलाने और FCM के माध्यम से उपयोगकर्ता को संदेश भेजने के लिए। एंड्रॉइड स्टूडियो में FcmSender.java मुख्य फ़ंक्शन के बगल में रन आइकन का एक क्रॉप्ड स्क्रीनशॉट दिखाया गया है

जब एंड्रॉइड ऐप बैकग्राउंड में होता है, तो संदेश नोटिफिकेशन ट्रे में दिखाई देता है।

एंड्रॉइड अधिसूचना ट्रे में दिखाई देने वाले संदेश का एक छोटा स्क्रीनशॉट

जब एंड्रॉइड ऐप अग्रभूमि में होगा, तो आपको एंड्रॉइड स्टूडियो कंसोल में एक लॉग दिखाई देगा: "एक अग्रभूमि संदेश को संभालना"। संदेश सामग्री यूआई में भी प्रदर्शित होती है क्योंकि यूआई नए संदेशों के लिए स्ट्रीम नियंत्रक की सदस्यता लेता है।

एंड्रॉइड ऐप में प्रदर्शित संदेश सामग्री का एक क्रॉप्ड स्क्रीनशॉट

यदि आप पंजीकरण टोकन पेस्ट करते हैं और ऐप सर्वर या अन्य विश्वसनीय सर्वर वातावरण से संदेश भेजते हैं, तो आपको एक समान व्यवहार दिखाई देगा:

  • जब वेब ऐप पृष्ठभूमि में होता है (यानी, जब यह किसी अन्य विंडो द्वारा छिपा हुआ होता है या कोई अन्य टैब सक्रिय होता है), तो आपको एक वेब अधिसूचना दिखाई देगी।

क्रोम ब्राउज़र में दिखाए गए वेब नोटिफिकेशन का क्रॉप किया हुआ स्क्रीनशॉट

  • जब वेब ऐप अग्रभूमि में हो, तो आप वेब पर राइट-क्लिक करके और Inspect चयन करके क्रोम कंसोल में लॉग देख सकते हैं। संदेश सामग्री यूआई में भी प्रदर्शित होती है। डिबग लॉग के साथ क्रोम कंसोल का एक क्रॉप किया हुआ स्क्रीनशॉट

6. एक विषय संदेश भेजें

एफसीएम HTTP v1 एपीआई का प्लेटफॉर्म ओवरराइड फीचर एक संदेश भेजने के अनुरोध को विभिन्न प्लेटफॉर्म पर अलग-अलग व्यवहार करने में सक्षम बनाता है। इस सुविधा का एक उपयोग प्लेटफ़ॉर्म के आधार पर विभिन्न अधिसूचना संदेश सामग्री प्रदर्शित करना है। विषय संदेश के साथ कई उपकरणों (जो कई प्लेटफार्मों तक फैल सकते हैं) को लक्षित करते समय इस सुविधा का पूरी तरह से उपयोग किया जाता है। यह अनुभाग आपके ऐप को प्रत्येक प्लेटफ़ॉर्म के लिए अनुकूलित विषय संदेश प्राप्त करने के चरणों के बारे में बताता है।

क्लाइंट से किसी विषय की सदस्यता लें

किसी विषय की सदस्यता लेने के लिए, फ़्लटर ऐप की main.dart फ़ाइल में मुख्य फ़ंक्शन के अंत में messaging.subscribeToTopic विधि को कॉल करें।

// subscribe to a topic.
const topic = 'app_promotion';
await messaging.subscribeToTopic(topic);

[वैकल्पिक] वेब के लिए सर्वर से किसी विषय की सदस्यता लें

यदि आप वेब प्लेटफ़ॉर्म पर विकास नहीं कर रहे हैं तो आप इस अनुभाग को छोड़ सकते हैं।

एफसीएम जेएस एसडीके वर्तमान में क्लाइंट-साइड विषय सदस्यता का समर्थन नहीं करता है। इसके बजाय, आप एडमिन एसडीके के सर्वर-साइड विषय प्रबंधन एपीआई का उपयोग करके सदस्यता ले सकते हैं। यह कोड जावा एडमिन एसडीके के साथ सर्वर-साइड विषय सदस्यता को दर्शाता है।

 private static void subscribeFcmRegistrationTokensToTopic() throws Exception {
   List<String> registrationTokens =
       Arrays.asList(
           "REPLACE_WITH_FCM_REGISTRATION_TOKEN"); // TODO: add FCM Registration Tokens to
   // subscribe
   String topicName = "app_promotion";

   TopicManagementResponse response =     FirebaseMessaging.getInstance().subscribeToTopic(registrationTokens, topicName);
   System.out.printf("Num tokens successfully subscribed %d", response.getSuccessCount());
 }

ऐप सर्वर खोलें और रन पर क्लिक करें एंड्रॉइड स्टूडियो में रन बटन FcmSubscriptionManager.java फ़ाइल में मुख्य फ़ंक्शन चलाने के लिए:

एंड्रॉइड स्टूडियो में FcmSubscriptionManager.java मुख्य फ़ंक्शन के बगल में दिखाए गए रन आइकन का एक क्रॉप्ड स्क्रीनशॉट

किसी विषय पर प्लेटफ़ॉर्म ओवरराइड के साथ एक संदेश भेजें

अब आप विषय प्लेटफ़ॉर्म ओवरराइड संदेश भेजने के लिए तैयार हैं। निम्नलिखित कोड स्निपेट में:

  • आप एक आधार संदेश और शीर्षक " A new app is available " के साथ एक भेजने का अनुरोध बनाते हैं।
  • संदेश आईओएस और वेब प्लेटफ़ॉर्म पर " A new app is available " शीर्षक के साथ एक डिस्प्ले अधिसूचना उत्पन्न करता है।
  • संदेश एंड्रॉइड डिवाइस पर " A new Android app is available " शीर्षक के साथ एक डिस्प्ले अधिसूचना उत्पन्न करता है।
private static void sendMessageToFcmTopic() throws Exception {
   String topicName = "app_promotion";

   Message message =
       Message.builder()
           .setNotification(
               Notification.builder()
                   .setTitle("A new app is available")
                   .setBody("Check out our latest app in the app store.")
                   .build())
           .setAndroidConfig(
               AndroidConfig.builder()
                   .setNotification(
                       AndroidNotification.builder()
                           .setTitle("A new Android app is available")
                           .setBody("Our latest app is available on Google Play store")
                           .build())
                   .build())
           .setTopic("app_promotion")
           .build();

   FirebaseMessaging.getInstance().send(message);

   System.out.println("Message to topic sent successfully!!");
 }

FcmSender.java फ़ाइल के मुख्य फ़ंक्शन में, sendMessageToFcmTopic(); . चलाएँ पर क्लिक करें एंड्रॉइड स्टूडियो में रन बटन विषय संदेश भेजने के लिए.

7. सारांश और आगे क्या है

संक्षेप में, आपने फ़्लटर और एफसीएम का उपयोग करके बहु-प्लेटफ़ॉर्म ऐप विकास को शामिल करने के बारे में सीखा है, जिसमें पर्यावरण सेटअप, निर्भरता एकीकरण और संदेश प्राप्त करना और भेजना शामिल है। गहराई से जानने के लिए, निम्नलिखित सामग्री देखें:

कोडेलैब्स

संदर्भ