| प्लैटफ़ॉर्म चुनें: | iOS+ Android वेब Flutter Unity C++ |
इस गाइड में, Firebase Cloud Messaging का इस्तेमाल शुरू करने का तरीका बताया गया है. इससे, आपके Flutter क्लाइंट ऐप्लिकेशन से, भरोसेमंद तरीके से मैसेज भेजे जा सकते हैं.
आपके टारगेट प्लैटफ़ॉर्म के हिसाब से, सेटअप के लिए कुछ अतिरिक्त ज़रूरी चरण हैं. इन्हें पूरा करना होगा.
iOS+
मेथड स्विज़लिंग
Apple डिवाइसों पर FCM Flutter प्लग-इन का इस्तेमाल करने के लिए, मेथड स्विज़लिंग ज़रूरी है. इसके बिना, Firebase की अहम सुविधाएं ठीक से काम नहीं करेंगी. जैसे, FCM टोकन को मैनेज करना .
Android
Google Play सेवाएं
FCM क्लाइंट के लिए, Android 4.4 या इसके बाद वाले वर्शन पर चलने वाले डिवाइसों की ज़रूरत होती है. साथ ही, इन डिवाइसों पर Google Play सेवाएं इंस्टॉल होनी चाहिए. इसके अलावा, Android 4.4 पर चलने वाले ऐसे एम्युलेटर का इस्तेमाल किया जा सकता है जिनमें Google API मौजूद हों. ध्यान दें कि Android ऐप्लिकेशन को सिर्फ़ Google Play Store के ज़रिए डिप्लॉय करने की कोई पाबंदी नहीं है.
Play Services SDK पर निर्भर करने वाले ऐप्लिकेशन को, Google Play सेवाओं की सुविधाओं को ऐक्सेस करने से पहले, डिवाइस पर Google Play सेवाओं का ऐसा APK देखना चाहिए जो उसके साथ काम करता हो. हमारा सुझाव है कि यह काम दो जगहों पर किया जाए: मुख्य गतिविधि के onCreate() तरीके में और उसके onResume() तरीके में. onCreate() में की गई जांच से यह पक्का होता है कि जांच में पास हुए बिना, ऐप्लिकेशन का इस्तेमाल न किया जा सके. onResume() में की गई जांच से यह पक्का होता है कि अगर उपयोगकर्ता किसी अन्य तरीके से, जैसे कि बैक बटन के ज़रिए, चल रहे ऐप्लिकेशन पर वापस आता है, तब भी जांच की जाती है.
अगर डिवाइस पर Google Play सेवाओं का ऐसा वर्शन नहीं है जो आपके
ऐप्लिकेशन के साथ काम करता है, तो आपका
ऐप्लिकेशनGoogleApiAvailability.makeGooglePlayServicesAvailable()
को कॉल कर सकता है. इससे, उपयोगकर्ता Play Store से Google Play सेवाएं डाउनलोड कर सकेंगे.
वेब
FCM के साथ वेब क्रेडेंशियल कॉन्फ़िगर करना
FCM वेब इंटरफ़ेस, वेब क्रेडेंशियल का इस्तेमाल करता है. इन्हें Voluntary Application Server Identification या "VAPID" पासकोड कहा जाता है. इनकी मदद से, वेब पुश सेवाओं को अनुरोध भेजने की अनुमति दी जाती है. अपने ऐप्लिकेशन को पुश नोटिफ़िकेशन की सदस्यता दिलाने के लिए, आपको अपने Firebase प्रोजेक्ट के साथ पासकोड का एक जोड़ा जोड़ना होगा. आपके पास पासकोड का नया जोड़ा जनरेट करने या पासकोड के मौजूदा जोड़े को इंपोर्ट करने का विकल्प होता है Firebase console के ज़रिए.
FCM प्लग-इन इंस्टॉल करना
अगर आपने अब तक ऐसा नहीं किया है, तो Flutter के लिए Firebase प्लग-इन इंस्टॉल करें और उन्हें शुरू करें.
प्लस-इन इंस्टॉल करने के लिए, अपने Flutter प्रोजेक्ट के रूट से यह कमांड चलाएं:
flutter pub add firebase_messagingयह प्रोसेस पूरी होने के बाद, अपने 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 पर, अपने AndroidManifest.xml में ये मेटाडेटा वैल्यू जोड़कर, Analytics कलेक्शन और FCM के अपने-आप शुरू होने की सुविधा बंद करें. आपको ये दोनों सुविधाएं बंद करनी होंगी:
<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);
यह वैल्यू सेट होने के बाद, ऐप्लिकेशन रीस्टार्ट होने पर भी बनी रहती है.
टेस्ट के तौर पर सूचना वाला मैसेज भेजना
टारगेट डिवाइस पर ऐप्लिकेशन इंस्टॉल करें और उसे चलाएं. Apple डिवाइसों पर, आपको रिमोट नोटिफ़िकेशन पाने की अनुमति के अनुरोध को स्वीकार करना होगा.
पक्का करें कि डिवाइस पर ऐप्लिकेशन बैकग्राउंड में चल रहा हो.
Firebase console में, DevOps और उपयोगकर्ता जुड़ाव > मैसेजिंग पर जाएं.
कोई कैंपेन बनाएं.
अगर यह आपका पहला मैसेज है, तो:
अपना पहला कैंपेन बनाएं को चुनें.
Firebase सूचना वाले मैसेज को चुनें. इसके बाद, बनाएं को चुनें.
अगर आपने पहले कैंपेन बनाए हैं, तो:
कैंपेन टैब पर, नया कैंपेन को चुनें.
सूचनाएं पर क्लिक करें.
मैसेज का टेक्स्ट डालें.
दाएं पैनल से, टेस्ट मैसेज भेजें को चुनें.
रजिस्ट्रेशन टोकन जोड़ें लेबल वाले फ़ील्ड में, अपना रजिस्ट्रेशन टोकन डालें.FCM
टेस्ट को चुनें.
टेस्ट को चुनने के बाद, टारगेट किए गए क्लाइंट डिवाइस को सूचना मिलनी चाहिए. इस दौरान, ऐप्लिकेशन बैकग्राउंड में चल रहा होना चाहिए.
अपने ऐप्लिकेशन पर मैसेज की डिलीवरी के बारे में जानकारी पाने के लिए, DevOps और उपयोगकर्ता जुड़ाव > मैसेजिंग > रिपोर्ट डैशबोर्ड Firebase console में जाएं. इस डैशबोर्ड में, Apple और Android डिवाइसों पर भेजे गए और खोले गए मैसेज की संख्या रिकॉर्ड की जाती है. साथ ही, Android ऐप्लिकेशन के लिए "इंप्रेशन" (उपयोगकर्ताओं को दिखने वाली सूचनाएं) का डेटा भी रिकॉर्ड किया जाता है.
इंटरैक्शन को मैनेज करना
Android और iOS, दोनों पर उपयोगकर्ता किसी सूचना पर टैप करते हैं, तो डिफ़ॉल्ट रूप से ऐप्लिकेशन खुल जाता है. अगर ऐप्लिकेशन बंद है, तो वह शुरू हो जाएगा. अगर वह बैकग्राउंड में चल रहा है, तो वह फ़ोरग्राउंड पर आ जाएगा.
सूचना के कॉन्टेंट के आधार पर, हो सकता है कि ऐप्लिकेशन खुलने पर, आपको उपयोगकर्ता के इंटरैक्शन को मैनेज करना पड़े. उदाहरण के लिए, अगर सूचना का इस्तेमाल करके नया चैट मैसेज भेजा जाता है और उपयोगकर्ता उसे चुनता है, तो हो सकता है कि ऐप्लिकेशन खुलने पर, आपको वह बातचीत खोलनी पड़े.
firebase-messaging पैकेज, इस इंटरैक्शन को मैनेज करने के दो तरीके उपलब्ध कराता है:
getInitialMessage():अगर ऐप्लिकेशन बंद होने के बाद खोला जाता है, तो यह तरीका वालाFutureदिखाता है जिसमेंRemoteMessageशामिल है. इस्तेमाल होने के बाद,RemoteMessageहटा दिया जाएगा.onMessageOpenedApp: एकStreamजो ऐप्लिकेशन के बैकग्राउंड में होने पर उसे खोलने परRemoteMessageपोस्ट करता है.
यह पक्का करने के लिए कि आपके उपयोगकर्ताओं को अच्छा अनुभव मिले, आपको दोनों स्थितियों को मैनेज करना चाहिए. यहां दिए गए कोड के उदाहरण में बताया गया है कि यह काम कैसे किया जा सकता है:
class Application extends StatefulWidget { @override StatecreateState() => _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 का इस्तेमाल जारी रखने के कुछ विकल्प यहां दिए गए हैं: