FCM विषयों का इस्तेमाल करके, आपका पहला मल्टीकास्ट पुश मैसेज

1. शुरुआती जानकारी

लक्ष्य

इस कोडलैब में, आपको अपने मल्टी-प्लैटफ़ॉर्म ऐप्लिकेशन को इंस्ट्रुमेंट करने का तरीका बताया जाएगा. इससे, FCM विषयों का इस्तेमाल करके, अपने ऐप्लिकेशन इंस्टेंस के अलग-अलग सबग्रुप को पुश मैसेज मल्टीकास्ट किए जा सकेंगे.

यह प्रोसेस पूरी होने के बाद, इन सब-ग्रुप को मैनेज करने के लिए, FCM के इन्फ़्रास्ट्रक्चर का इस्तेमाल किया जा सकेगा. साथ ही, इन सब-ग्रुप पर पुश मैसेज ब्रॉडकास्ट किए जा सकेंगे.

विषयों की खास जानकारी

विषय, FCM इन्फ़्रास्ट्रक्चर की मदद से, आपके ऐप्लिकेशन इंस्टेंस के सबग्रुप तक मैसेज पहुंचाने का एक तरीका है.

FCM, मैसेज भेजने के लिए एपीआई उपलब्ध कराता है. साथ ही, इन विषयों की सदस्यताएं बनाए रखने के लिए भी एपीआई उपलब्ध कराता है. किसी ऐप्लिकेशन इंस्टेंस को विषय से जोड़ने और हटाने की प्रोसेस को क्रमशः सदस्यता लेना और सदस्यता छोड़ना कहा जाता है

विषयों का इस्तेमाल, सार्वजनिक तौर पर उपलब्ध कॉन्टेंट के लिए किया जाना चाहिए. उदाहरण के लिए, मौसम की जानकारी से जुड़े मैसेज. अगर आपको उपयोगकर्ता की निजी जानकारी वाले मैसेज भेजने हैं, तो एक साथ कई डिवाइसों पर मैसेज भेजने के लिए, Firebase Admin SDK टूल का इस्तेमाल करें.

विषयों के हिसाब से मल्टीकास्ट करने की सुविधा को थ्रूपुट के लिए ऑप्टिमाइज़ किया जाता है.

आपको क्या सीखने को मिलेगा

  • मोबाइल ऐप्लिकेशन से, उपयोगकर्ताओं को विषयों की सदस्यता लेने (और छोड़ने) का तरीका.
  • विषयों का इस्तेमाल करके, मल्टीकास्ट पुश मैसेज भेजने का तरीका.
  • विषय की शर्तों का इस्तेमाल करके, विषयों के कॉम्बिनेशन को मैसेज भेजने का तरीका.
  • सर्वर साइड पर विषय की सदस्यताओं को मैनेज करने का तरीका. साथ ही, एक साथ कई सदस्यों को सदस्यता देने और सदस्यता हटाने का तरीका.

आपको क्या बनाने को मिलेगा

  • Android ऐप्लिकेशन, विषयों की सदस्यता लेता है/छोड़ता है. साथ ही, विषयों पर भेजे गए मैसेज पाता है.
  • Firebase Admin SDK का इस्तेमाल करके सर्वर साइड इंटिग्रेशन. इसका इस्तेमाल, FCM API के ज़रिए विषय से जुड़े मैसेज भेजने के लिए किया जाएगा.

आपको इन चीज़ों की ज़रूरत होगी

  • अपनी पसंद का ब्राउज़र, जैसे कि Chrome.
  • Java ऐप्लिकेशन डेवलप करने के लिए, IntelliJ IDEA आईडीई.
    • इंस्टॉल करते समय, Gradle के लिए सहायता पाने का विकल्प चुनना न भूलें.
  • Android ऐप्लिकेशन डेवलप करने के लिए Android Studio आईडीई.
  • Android ऐप्लिकेशन चलाने के लिए कोई डिवाइस. इनमें से कोई एक:
    • Android एम्युलेटर. (इसके लिए, Android Studio में सेटअप करना ज़रूरी है).
    • आपके कंप्यूटर से कनेक्ट किया गया कोई Android डिवाइस, जिस पर डेवलपर मोड चालू हो.
  • Firebase प्रोजेक्ट बनाने और उसे मैनेज करने के लिए, Google खाता.

2. सेट अप करना

कोड पाएं

कमांड लाइन से GitHub रिपॉज़िटरी को क्लोन करें:

git clone https://github.com/firebase/quickstart-android.git fcm-codelab

सैंपल कोड को fcm-codelab डायरेक्ट्री में क्लोन किया जाएगा.

cd fcm-codelab

इस कोडलैब के लिए स्टार्टर ऐप्लिकेशन, fcm-topics-codelab ब्रांच की messaging डायरेक्ट्री में है. स्टार्टर कोड पर पहुंचने के लिए, यह तरीका अपनाएं. इसमें दो डायरेक्ट्री StockNewsApp और StockNewsServer शामिल हैं. पहले में Android ऐप्लिकेशन का स्टार्टर कोड और दूसरे में सर्वर साइड का स्टार्टर कोड शामिल है.

git checkout fcm-topics-codelab
cd messaging/fcm-topics-codelab/starter

इस कोडलैब का पूरा वर्शन, messaging/fcm-topics-codelab/completed डायरेक्ट्री में रखा गया है.

Firebase प्रोजेक्ट बनाना

  1. अपने Google खाते का इस्तेमाल करके, Firebase कंसोल में साइन इन करें.
  2. नया प्रोजेक्ट बनाने के लिए, बटन पर क्लिक करें. इसके बाद, प्रोजेक्ट का नाम डालें. उदाहरण के लिए, StockNews.
  3. जारी रखें पर क्लिक करें.
  4. अगर आपसे कहा जाए, तो Firebase की शर्तें पढ़ें और स्वीकार करें. इसके बाद, जारी रखें पर क्लिक करें.
  5. (ज़रूरी नहीं) Firebase कंसोल में एआई की मदद पाने की सुविधा चालू करें. इसे "Firebase में Gemini" कहा जाता है.
  6. इस कोडलैब के लिए, आपको Google Analytics की ज़रूरत नहीं है. इसलिए, Google Analytics के विकल्प को टॉगल करके बंद करें.
  7. प्रोजेक्ट बनाएं पर क्लिक करें. इसके बाद, प्रोजेक्ट के प्रोविज़न होने का इंतज़ार करें. इसके बाद, जारी रखें पर क्लिक करें.

बधाई हो! आपने अभी-अभी अपना Firebase प्रोजेक्ट बनाया है.

3. प्लैटफ़ॉर्म के हिसाब से Firebase ऐप्लिकेशन का कॉन्फ़िगरेशन

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

  • Firebase प्रोजेक्ट पर, अपने हिसाब से प्लैटफ़ॉर्म रजिस्टर करना
  • प्लेटफ़ॉर्म के हिसाब से कॉन्फ़िगरेशन फ़ाइल डाउनलोड करें और उसे कोड में जोड़ें.

इस कोडलैब के लिए, हम Android Firebase ऐप्लिकेशन जोड़ेंगे.

84e0b3199bef6d8a.pngAndroid को कॉन्फ़िगर करना

  1. Firebase कंसोल में, सेटिंग कॉग में सबसे ऊपर मौजूद बाईं ओर के नेविगेशन बार में, प्रोजेक्ट सेटिंग चुनें. इसके बाद, सामान्य पेज पर, आपके ऐप्लिकेशन में जाकर, Android आइकॉन पर क्लिक करें.

आपको यह डायलॉग बॉक्स दिखेगा : 8254fc299e82f528.png

  1. आपको Android पैकेज का नाम डालना होगा. इसे com.ticker.stocknews पर सेट करें.
    1. यहां दिया गया पैकेज का नाम, आपके स्टार्टर StockNewsApp कोड के AndroidManifest.xml में दिए गए नाम से मेल खाना चाहिए. अगर आपको इसे ढूंढना है या इसमें बदलाव करना है, तो यह तरीका अपनाएं:
      1. StockNewsApp डायरेक्ट्री में जाकर, app/src/main/AndroidManifest.xml फ़ाइल खोलें.
      2. manifest एलिमेंट में, package एट्रिब्यूट की स्ट्रिंग वैल्यू ढूंढें. यह वैल्यू, Android पैकेज का नाम है.
  1. Firebase डायलॉग में, कॉपी किए गए पैकेज के नाम को Android पैकेज का नाम फ़ील्ड में चिपकाएं.
  2. इस कोडलैब के लिए, आपको डीबग साइनिंग सर्टिफ़िकेट SHA-1 की ज़रूरत नहीं है. ऐसा इसलिए, क्योंकि इस ऐप्लिकेशन को रिलीज़ नहीं किया जाएगा. इसे खाली छोड़ दें.
  3. ऐप्लिकेशन रजिस्टर करें पर क्लिक करें.
  4. Firebase कंसोल में जाकर, कॉन्फ़िगरेशन फ़ाइल google-services.json डाउनलोड करने के लिए दिए गए निर्देशों का पालन करें.
  5. सेटअप के बाकी चरणों को छोड़ा जा सकता है, क्योंकि स्टार्टर ऐप्लिकेशन कोड में बाकी सब कुछ पहले से ही कॉन्फ़िगर किया गया है. आपको Firebase कंसोल के मुख्य पेज पर, अपना ऐप्लिकेशन दिखेगा.
  6. अभी डाउनलोड की गई google-services.json फ़ाइल को messaging/fcm-topics-codelab/starter/StockNewsApp/app डायरेक्ट्री में कॉपी करें.

4. ऐप्लिकेशन बनाना और उसे चलाना

अब आप अपने ऐप्लिकेशन पर काम शुरू करने के लिए तैयार हैं! सबसे पहले, ऐप्लिकेशन बनाएं और उसे चलाएं.

स्टार्टर ऐप्लिकेशन इंपोर्ट करना

Android Studio शुरू करें और स्टार्टर कोड डायरेक्ट्री से messaging/fcm-topics-codelab/starter/StockNewsApp इंपोर्ट करें.

प्रोजेक्ट लोड होने के बाद, आपको यह सूचना भी दिख सकती है कि Git आपके सभी लोकल बदलावों को ट्रैक नहीं कर रहा है. इसके लिए, ऊपर दाईं ओर मौजूद "अनदेखा करें" या "X" पर क्लिक करें. (Git repo में कोई भी बदलाव वापस नहीं भेजा जाएगा.)

अगर आप Android व्यू में हैं, तो आपको प्रोजेक्ट विंडो के ऊपरी-बाएं कोने में, नीचे दी गई इमेज जैसा कुछ दिखेगा. (अगर आप प्रोजेक्ट व्यू में हैं, तो आपको प्रोजेक्ट को बड़ा करके देखना होगा)

b574ea0089ee87c6.png

कृपया ध्यान दें कि Android Studio को पहली बार बैकग्राउंड में प्रोजेक्ट को कंपाइल करने में कुछ सेकंड लग सकते हैं. इस दौरान, आपको Android Studio में सबसे नीचे मौजूद स्टेटस बार में एक स्पिनर दिखेगा:

4bc64eb3b99eb0ae.png

हमारा सुझाव है कि कोड में बदलाव करने से पहले, इस प्रोसेस के पूरा होने का इंतज़ार करें. इससे Android Studio को सभी ज़रूरी कॉम्पोनेंट डाउनलोड करने की अनुमति मिल जाएगी.

इसके अलावा, अगर आपको "भाषा बदलने के लिए, क्या आपको पेज को फिर से लोड करना है?" या इससे मिलता-जुलता कोई प्रॉम्प्ट मिलता है, तो "हाँ" को चुनें.

एम्युलेटर सेटअप करना

अगर आपको Android एम्युलेटर सेट अप करने में मदद चाहिए, तो अपना ऐप्लिकेशन चलाएं लेख पढ़ें.

Android ऐप्लिकेशन के स्टार्टर कोड के बारे में जानकारी

  • स्टार्टर कोड, कम साइज़ का Android ऐप्लिकेशन होता है. इसमें कम से कम फ़ंक्शन और यूज़र इंटरफ़ेस (यूआई) होता है.
  • app/build.gradle फ़ाइल में, firebase-messaging SDK की डिपेंडेंसी पहले से ही जोड़ी गई है.

f04ff8f48d186dff.png

  • AndroidManifest.xml में, MESSAGING_EVENT कॉलबैक हैंडलर पहले से ही जोड़ा गया है.
    • यह हैंडलर, StockNewsMessagingService.java FirebaseMessagingService क्लास को बढ़ाता है. यह Firebase क्लाउड से मैसेज भेजने से जुड़ी कई सुविधाएं देता है. ज़्यादा जानने के लिए, FirebaseMessagingService से जुड़ा दस्तावेज़ देखें. b843c4d33ee53166.png
    88fad1960f4a6ff5.png
    • FCM रजिस्ट्रेशन टोकन बनने या रीफ़्रेश होने पर, onNewToken फ़ंक्शन को कॉल किया जाता है. ज़्यादा जानकारी के लिए, टोकन जनरेट होने की प्रोसेस पर नज़र रखना लेख पढ़ें.
    • जब कोई मैसेज मिलता है और ऐप्लिकेशन फ़ोरग्राउंड में होता है, तब onMessageReceived फ़ंक्शन को कॉल किया जाता है. फ़िलहाल, यह सिर्फ़ मिले हुए मैसेज को लॉग करता है.
      • बैकग्राउंड और फ़ोरग्राउंड में मैसेज डिलीवर होने और उन्हें मैनेज करने के बीच के अंतर के बारे में ज़्यादा जानने के लिए, Android ऐप्लिकेशन में मैसेज पाना लेख पढ़ें.
  • इसके अलावा, AndroidManifest.xml में StockNewsApplication नाम की Android Application क्लास भी दी गई है. a4982a8731492dfc.pngccde692f7f68dc5a.png
    • ऐप्लिकेशन शुरू होने पर, इस क्लास को सबसे पहले इंस्टैंशिएट किया जाएगा.
    • StockNewsApplication क्लास के onCreate फ़ंक्शन में, FCM रजिस्ट्रेशन टोकन बनाने का कॉल जोड़ा गया है. यह एक मान्य FCM रजिस्ट्रेशन टोकन जनरेट करेगा और उसे लॉग करेगा.
  • MainActivity.java से RecyclerView जुड़ जाता है. इससे स्टॉक कैटगरी के विकल्प दिखते हैं.
  • SubscriptionAdapter.java, RecyclerView.Adapter को लागू करता है. इससे स्टॉक कैटगरी चुनने की स्क्रीन दिखती है.
    • हर स्टॉक कैटगरी का एक नाम होता है. इसके बगल में, सदस्यता लेने या छोड़ने का टॉगल होता है.
    • टॉगल बदलने पर, FCM विषय की सदस्यता लेने / छोड़ने का अनुरोध किया जाना चाहिए.
    • आने वाले सेक्शन में, इन कॉल को लागू किया जाएगा.
  • model/StockCategories.java क्लास में, सभी स्टॉक कैटगरी और उनसे जुड़े विषयों के नामों की सूची होती है.

b32663ec4e865a18.png

स्टार्टर ऐप्लिकेशन चलाना

  1. अपने Android डिवाइस को कंप्यूटर से कनेक्ट करें या एम्युलेटर शुरू करें.
  2. सबसे ऊपर मौजूद टूलबार में, अपना टारगेट Android डिवाइस या एम्युलेटर चुनें. इसके बाद, 'चलाएं' बटन दबाएं.

5b27fc5b237e06b9.png

  1. ऐप्लिकेशन का यूज़र इंटरफ़ेस (यूआई) इस तरह दिखेगा:

ff5b1a1c53231c54.png

  1. ऐप्लिकेशन, FCM रजिस्ट्रेशन टोकन बनाएगा और उसे लॉग करेगा. हालांकि, ऐप्लिकेशन के यूज़र इंटरफ़ेस (यूआई) में कोई बदलाव नहीं होगा.
    1. FCM रजिस्ट्रेशन टोकन को कॉपी करके सेव करें, क्योंकि इसका इस्तेमाल अगले चरणों में किया जाएगा.

927eb66bc909f36b.png

5. टेस्ट मैसेज भेजना

अब आपके पास, ऐप्लिकेशन के उस इंस्टेंस पर टेस्ट मैसेज भेजने का विकल्प है जिसे आपने पिछले चरण में सेट अप किया था.

स्टार्टर सर्वर कोड इंपोर्ट करना

IntelliJ IDEA शुरू करें और messaging/fcm-topics-codelab/starter/StockNewsServer प्रोजेक्ट खोलें.

आपके बाएं नेविगेशन बार में मौजूद प्रोजेक्ट व्यू कुछ ऐसा दिखना चाहिए:

da20711f6527dff6.png

ध्यान दें कि IntelliJ IDEA को आपके प्रोजेक्ट को बनाने में कुछ मिनट लग सकते हैं. इसमें ज़रूरी डिपेंडेंसी को पुल करना भी शामिल है.

सर्वर के स्टार्टर कोड के बारे में जानकारी

  • सर्वर का स्टार्टर कोड, Gradle पर आधारित Java प्रोजेक्ट है.
  • build.gradle फ़ाइल में, firebase-admin SDK की डिपेंडेंसी पहले से ही जोड़ी गई है. यह SDK, FCM मैसेज भेजने की अलग-अलग सुविधाओं को ऐक्सेस करने की सुविधा देता है.

650fc733298588f8.png

  • आखिर में, दो क्लास हैं:
    • FcmSender.java: इस क्लास में नोट बनाने के ये तरीके शामिल हैं:
      • initFirebaseSDK: firebase-admin SDK को चालू करता है.
      • sendMessageToFcmRegistrationToken: FCM रजिस्ट्रेशन टोकन को मैसेज भेजें.
      • sendMessageToFcmTopic: FCM विषय पर मैसेज भेजें.
      • sendMessageToFcmTopicCondition: FCM विषय की शर्त के हिसाब से मैसेज भेजें.
    • FcmSubscriptionManager.java: इस क्लास में ऐसे तरीके शामिल होते हैं जिनकी मदद से, सर्वर साइड से विषय की सदस्यताएं मैनेज की जा सकती हैं.
      • initFirebaseSDK: firebase-admin SDK को चालू करता है.
      • subscribeFcmRegistrationTokensToTopic: FCM रजिस्ट्रेशन टोकन को किसी FCM विषय की सदस्यता लें.
      • unsubscribeFcmRegistrationTokensFromTopic: FCM के किसी विषय से, FCM रजिस्ट्रेशन टोकन की सदस्यता छोड़ें.

सर्वर कोड सेट अप करना

  1. सबसे पहले, हमें एक Firebase सेवा खाता सेट अप करना होगा. इससे firebase-admin SDK, FCM API को कॉल करने की अनुमति दे पाएगा.
    1. Firebase कंसोल पर जाएं. इसके बाद, बाईं ओर मौजूद नेविगेशन बार में, प्रोजेक्ट की खास जानकारी के बगल में मौजूद गियर आइकॉन पर क्लिक करें. इसके बाद, प्रोजेक्ट की सेटिंग चुनें. 8c2108d4d7c915e9.png
    2. सेटिंग पेज पर, सेवा खाते को चुनें. इसके बाद, सेवा खाता बनाएं पर क्लिक करें. 84b128cc5dac0a85.png
    3. अब नई निजी कुंजी जनरेट करें बटन पर क्लिक करें. इसके बाद, आपकी कुंजी फ़ाइल अपने-आप डाउनलोड होने लगेगी.
    4. कुंजी वाली फ़ाइल का नाम बदलकर service-account.json करें और इसे messaging/fcm-topics-codelab/starter/StockNewsServer/src/main/resources फ़ोल्डर में कॉपी करें.
    5. FcmSender.java और FcmSubscriptionManager.java, दोनों ही इस कोड का इस्तेमाल करके क्लासपाथ से service-account.json फ़ाइल लोड करते हैं. 8dffbee658e0bdd.png
  2. इस समय, सर्वर कोड तैयार है. सबसे ऊपर मौजूद मेन्यू बार से, Build -> Build Project को चुनें.

टेस्ट मैसेज भेजना

  1. FcmSender.java में sendMessageToFcmRegistrationToken फ़ंक्शन ढूंढें. इसके बाद, स्टार्टर ऐप्लिकेशन चलाएं सेक्शन से कॉपी किए गए FCM रजिस्ट्रेशन टोकन को registrationToken फ़ील्ड में डालें.
  2. main फ़ंक्शन में, सिर्फ़ sendMessageToFcmRegistrationToken फ़ंक्शन से कमेंट हटाएं. इसके बाद, कोड को चलाने के लिए 'चलाएं' पर क्लिक करें.
    1. देखें कि message ऑब्जेक्ट के Token फ़ील्ड में FCM रजिस्ट्रेशन टोकन कैसे सेट किया जाता है.
    2. इसके अलावा, ध्यान दें कि हमने FirebaseMessaging इंटरफ़ेस के send एपीआई का इस्तेमाल कैसे किया है.

52e4a3ec3f816473.png

  1. इससे, ऐप्लिकेशन के उस इंस्टेंस को एक मैसेज भेजा जाएगा जिसे आपने पिछले चरण में सेट अप किया था.
  2. ऐप्लिकेशन इंस्टेंस के फ़ोरग्राउंड में होने पर, आपको मैसेज का कॉन्टेंट लॉग किया हुआ दिखना चाहिए.

d3540ec1089f97dd.png

  1. इसके अलावा, जब ऐप्लिकेशन बैकग्राउंड में चल रहा होगा, तब आपको सूचना ट्रे में मैसेज दिखेगा.

31203deca59c03fe.png

बहुत बढ़िया, आपने ऐप्लिकेशन इंस्टेंस को मैसेज भेजने के लिए Firebase Admin SDK टूल का इस्तेमाल किया. अपने सर्वर में Firebase Admin SDK टूल इस्तेमाल करने के बारे में ज़्यादा जानें.

6. विषय की सदस्यता लेने / छोड़ने की सुविधा लागू करना

इस चरण में, आपको Android ऐप्लिकेशन के स्टॉक कैटगरी टॉगल पर, विषय की सदस्यता लेने और सदस्यता छोड़ने की कार्रवाइयां लागू करनी होंगी.

जब ऐप्लिकेशन का कोई उपयोगकर्ता, किसी स्टॉक कैटगरी के लिए स्विच को टॉगल करता है, तो विषय की सदस्यता लेने या सदस्यता छोड़ने का अनुरोध किया जाएगा.

समीक्षा कोड

  • Android ऐप्लिकेशन कोड में मौजूद SubscriptionAdapter.java क्लास पर जाएं और RecyclerViewViewHolder क्लास ढूंढें.

6c0614199e684f6.png

  • क्लास कंस्ट्रक्टर, setOnCheckedChangeListener का इस्तेमाल करके सदस्यता टॉगल के लिए लिसनर सेट अप करता है.
  • स्विच टॉगल के आधार पर, सदस्यता लेने और छोड़ने की कार्रवाइयां की जाती हैं. इसके लिए, क्रमशः subscribeToStockCategory और unsubscribeFromStockCategory तरीकों को कॉल किया जाता है.
  • setData तरीके को RecyclerView Adapter के onBindViewHolder से कॉल किया जाता है, ताकि ViewHolder को सही स्टॉक कैटगरी के साथ बाइंड किया जा सके.

विषय के हिसाब से सदस्यता लेने की सुविधा लागू करना

  1. subscribeToStockCategory तरीके में, आपको FirebaseMessaging ऑब्जेक्ट के subscribeToTopic एपीआई को कॉल करना होगा. कोड कुछ ऐसा दिख सकता है:
   void subscribeToStockCategory() {
      // Making call to FCM for subscribing to the topic for stockCategory
     FirebaseMessaging.getInstance().subscribeToTopic(stockCategory.getTopicName()).addOnSuccessListener(
          unused -> {
            // Subscribing action successful
            Log.i(TAG, "Subscribed to topic: " + stockCategory.getTopicName());
            Toast.makeText(itemView.getContext(), "Subscribed to " + stockCategory.getCategoryName(),
                Toast.LENGTH_SHORT).show();
          });
    }

विषय से सदस्यता हटाने की सुविधा लागू करना

  1. इसी तरह, else की स्थिति में, आपको unsubscribeFromTopic एपीआई को कॉल करना होगा. इस तरह की जानकारी:
void unsubscribeFromStockCategory() {
      // Making call to FCM for unsubscribing from the topic for stockCategory
      FirebaseMessaging.getInstance().unsubscribeFromTopic(stockCategory.getTopicName())
          .addOnSuccessListener(unused -> {
            // Unsubscribing action successful
            Log.i(TAG, "Unsubscribed from topic: " + stockCategory.getTopicName());
            Toast.makeText(itemView.getContext(), "Unsubscribed from " + stockCategory.getCategoryName(),
                Toast.LENGTH_SHORT).show();
          });
    }

इसे आज़माकर देखें

  1. ऐप्लिकेशन चलाएं और 'स्टॉक कैटगरी' के विकल्पों को टॉगल करें, ताकि 'सदस्यता लें' और 'सदस्यता छोड़ें' कार्रवाइयां की जा सकें. यह कुछ ऐसा दिखेगा:

सदस्यता लें

सदस्यता छोड़ें

7. विषय के लिए पहला मैसेज भेजना

इस चरण में, आपको FCM विषय से जुड़ा मैसेज भेजने के लिए, सर्वर साइड कोड लागू करना होगा.

विषय से जुड़ा मैसेज भेजने के लिए, सर्वर साइड इंटिग्रेशन लागू करना

  1. सर्वर कोड में, FcmSender.java पर जाएं और sendMessageToFcmTopic नाम का तरीका ढूंढें.

56381dd1b40cde9c.png

  1. पहली लाइन में, वह FCM विषय डालें जिस पर आपको मैसेज भेजना है.
    • यह इस फ़ॉर्मैट की स्ट्रिंग होती है: /topics/<Topic Name>. उदाहरण के लिए, /topics/Technology.
  2. अगली लाइनों में, एक नया message ऑब्जेक्ट बनाएं. यह sendMessageToFcmRegistrationToken फ़ंक्शन में तय किए गए ऑब्जेक्ट जैसा ही होना चाहिए.
    • अंतर यह होगा कि message ऑब्जेक्ट के Token फ़ील्ड को सेट करने के बजाय, Topic फ़ील्ड को सेट किया जाएगा.
Message message = Message.builder()
        .putData("FOOTECH", "$1000")
        .setNotification(
            Notification.builder()
                .setTitle("Investor confidence in Tech Stocks growing")
                .setBody("Foo Tech leading the way in stock growth for Tech sector.")
                .build())
        .setTopic(topicName)
        .build();
  1. अब FirebaseMessaging इंस्टेंस में कॉल जोड़कर मैसेज भेजें. यह कॉल, sendMessageToFcmRegistrationToken फ़ंक्शन में किए गए कॉल जैसा ही होगा.
FirebaseMessaging.getInstance().send(message);
  1. आखिर में, main फ़ंक्शन को अपडेट करें और सिर्फ़ sendMessageToFcmTopic फ़ंक्शन को कॉल करने की सुविधा चालू करें.

9a6aa08dd7c28898.png

मैसेज भेजना और रसीद की पुष्टि करना

  1. विषय के हिसाब से मैसेज भेजने से पहले, पक्का करें कि आपके ऐप्लिकेशन का इंस्टेंस उस विषय के लिए सदस्यता ले चुका हो जिसके लिए आपको मैसेज भेजना है.
    1. इसके लिए, आपको संबंधित टॉगल को फ़्लिप करना होगा. उदाहरण के लिए:
    4668247408377712.png
  2. अब FcmSender.java के main फ़ंक्शन को लागू करके, विषय के हिसाब से मैसेज भेजे जा सकते हैं.
  3. पहले की तरह, आपको ऐप्लिकेशन इंस्टेंस पर मैसेज मिलने की सूचना दिखनी चाहिए.
    1. फ़ोरग्राउंड में ऐप्लिकेशन का इंस्टेंस
    c144721399f610fe.png
    1. बैकग्राउंड में ऐप्लिकेशन का इंस्टेंस
    44efc7dfd57e8e9a.png
  4. बोनस: जिस विषय पर आपने मैसेज भेजा है उसकी सदस्यता छोड़ने की कोशिश करें और फिर से मैसेज भेजें. आपको दिखेगा कि मैसेज, ऐप्लिकेशन इंस्टेंस को डिलीवर नहीं किया जा रहा है.

8. विषय की शर्त के बारे में पहला मैसेज भेजना

विषय की शर्त वाली सुविधा की मदद से, एक साथ कई विषयों पर मैसेज भेजे जा सकते हैं. इससे ऑडियंस को ज़्यादा बेहतर तरीके से परिभाषित किया जा सकता है.

उदाहरण के लिए, हमारे StockNews ऐप्लिकेशन में, ऐप्लिकेशन के उन इंस्टेंस के ग्रुप को मैसेज भेजने की संभावना पर विचार करें जिन्होंने टेक्नोलॉजी या ऑटोमोटिव विषयों की सदस्यता ली है. ऐसा तब हो सकता है, जब Waymo से जुड़ा कोई अहम इवेंट हो.

विषयों की मदद से, इन ऑपरेटर का इस्तेमाल करके बूलियन एक्सप्रेशन के तौर पर कॉम्बिनेशन बनाया जा सकता है

  • && : लॉजिकल AND. उदाहरण के लिए, 'Technology' in topics && 'Automotive' in topics - यह सिर्फ़ उन ऐप्लिकेशन इंस्टेंस को टारगेट करता है जिन्होंने टेक्नोलॉजी और ऑटोमोटिव, दोनों विषयों की सदस्यता ली है.
  • || : लॉजिकल OR. उदाहरण के लिए, 'Technology' in topics || 'Automotive' in topics - यह टेक्नोलॉजी या ऑटोमोटिव विषयों की सदस्यता लेने वाले ऐप्लिकेशन इंस्टेंस को टारगेट करता है.
  • () : ग्रुप बनाने के लिए कोष्ठक. उदाहरण के लिए, 'Technology' in topics && ('Automotive' in topics || 'Energy' in topics) - यह सिर्फ़ उन ऐप्लिकेशन इंस्टेंस को टारगेट करता है जिन्होंने टेक्नोलॉजी और ऑटोमोटिव या ऊर्जा विषयों की सदस्यता ली है.

इस सुविधा का इस्तेमाल करने के लिए, अनुरोध भेजने की सुविधा बनाने के बारे में ज़्यादा जानें.

विषय से जुड़ी शर्त के बारे में मैसेज भेजने के लिए, सर्वर साइड इंटिग्रेशन लागू करना

  1. सर्वर कोड में वापस जाएं और FcmSender.java में जाकर, sendMessageToFcmTopicCondition नाम का तरीका ढूंढें.

3719a86c274522cf.png

  1. पहली लाइन में, topicCondition वैरिएबल के लिए, विषय की वह शर्त डालें जिसके लिए आपको मैसेज भेजना है. इसे 'Technology' in topics && 'Automotive' in topics पर सेट किया जा सकता है.
  2. अगली लाइनों में, एक नया message ऑब्जेक्ट बनाएं. यह sendMessageToFcmTopic फ़ंक्शन में तय किए गए ऑब्जेक्ट जैसा ही होना चाहिए.
    1. अंतर यह होगा कि ऑब्जेक्ट के Topic फ़ील्ड को सेट करने के बजाय, आपको Condition फ़ील्ड को सेट करना होगा.
    Message message = Message.builder()
        .putData("FOOCAR", "$500")
        .setNotification(
            Notification.builder()
                .setTitle("Foo Car shows strong Q2 results")
                .setBody("Foo Car crosses 1B miles. Stocks rally.")
                .build())
        .setCondition(topicCondition)
        .build();
  1. अब FirebaseMessaging इंस्टेंस में कॉल जोड़कर मैसेज भेजें. यह कॉल, sendMessageToFcmTopic फ़ंक्शन में किए गए कॉल जैसा ही होगा.
FirebaseMessaging.getInstance().send(message);
  1. आखिर में, main फ़ंक्शन को अपडेट करें और सिर्फ़ sendMessageToFcmTopicCondition फ़ंक्शन को कॉल करने की सुविधा चालू करें.

db9588d40d2a0da6.png

मैसेज भेजना और उसकी पुष्टि करना

  1. विषय के हिसाब से मैसेज भेजने से पहले, पक्का करें कि आपके ऐप्लिकेशन का इंस्टेंस, विषय से जुड़ी तय की गई शर्त को पूरा करता हो. इसके लिए, ऐप्लिकेशन के इंस्टेंस को टेक्नोलॉजी और ऑटोमोटिव, दोनों विषयों की सदस्यता लेनी होगी.
  2. अब FcmSender.java के main फ़ंक्शन को लागू करके, विषय के हिसाब से मैसेज भेजे जा सकते हैं.
  3. पहले की तरह, आपको ऐप्लिकेशन इंस्टेंस पर मैसेज मिलने की सूचना दिखनी चाहिए.
    1. फ़ोरग्राउंड में ऐप्लिकेशन का इंस्टेंस
    6f612ace15aa6515.png
    1. बैकग्राउंड में ऐप्लिकेशन का इंस्टेंस
    78044a56ac2359cb.png
  4. बोनस: अब टेक्नोलॉजी विषय से सदस्यता छोड़ी जा सकती है. साथ ही, विषय की शर्त से जुड़ा मैसेज फिर से भेजा जा सकता है. आपको यह देखना चाहिए कि ऐप्लिकेशन इंस्टेंस को मैसेज नहीं मिला है.

9. रीकैप

आइए, अब तक आपने जो कुछ भी सीखा है उसे कम शब्दों में दोहरा लें.

  • किसी ऐप्लिकेशन इंस्टेंस से, विषय की सदस्यता लेने / छोड़ने का तरीका.
  • विषय के लिए मैसेज भेजना और सदस्यता लिए हुए ऐप्लिकेशन इंस्टेंस पर मैसेज मिलने की पुष्टि करना.
  • किसी विषय की शर्त के हिसाब से मैसेज भेजना और शर्त पूरी करने वाले ऐप्लिकेशन इंस्टेंस पर मैसेज मिलने की पुष्टि करना.

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

c0dc20655d392690.gif

10. सर्वर साइड से विषय की सदस्यताएँ मैनेज करना

अब तक, इस कोडलैब में विषय की सदस्यता लेने और सदस्यता छोड़ने के सभी कॉल, ऐप्लिकेशन इंस्टेंस से शुरू किए जाते थे.

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

इस सेक्शन में, आपको यह जानकारी मिलेगी कि सर्वर साइड से कॉल करके, FCM रजिस्ट्रेशन टोकन के बैच को किसी विषय की सदस्यता लेने और सदस्यता छोड़ने के लिए, Firebase Admin SDK टूल का इस्तेमाल कैसे करें.

FCM रजिस्ट्रेशन टोकन के लिए, FCM विषय की सर्वर साइड सदस्यता लागू करना

  1. सर्वर कोड में, FcmSubscriptionManager.java क्लास में जाएं. subscribeFcmRegistrationTokensToTopic नाम का तरीका ढूंढें. आपको यहां subscribeToTopic एपीआई को कॉल करना होगा.

5d5709e7b3cbcb04.png

  1. आइए, ऐप्लिकेशन इंस्टेंस को Energy विषय की सदस्यता दिलाते हैं. इसके लिए, सबसे पहले इन दो फ़ील्ड का डेटा दें:
    1. registrationTokens: यह कॉमा सेपरेटेड स्ट्रिंग की एक सूची है. इसमें ऐसे FCM रजिस्ट्रेशन टोकन शामिल होते हैं जिनके लिए आपको विषय की सदस्यताएं बनानी हैं.
    2. topicName: Energy विषय का नाम, यानी कि /topics/Energy.
  2. अगली कुछ लाइनों में, इस तरह कॉल लागू करें:
TopicManagementResponse response = FirebaseMessaging.getInstance().subscribeToTopic(
        registrationTokens, topicName);
  1. नतीजे के कुछ आंकड़ों के बारे में ज़्यादा जानकारी पाने के लिए, TopicManagementResponse पर क्लिक करें. जैसे, getSuccessCount का इस्तेमाल करके, बनाई गई विषय की सदस्यताओं की संख्या प्रिंट करना.
System.out.printf("Num tokens successfully subscribed %d", response.getSuccessCount());
  1. आखिर में, main फ़ंक्शन में सिर्फ़ subscribeFcmRegistrationTokensToTopic फ़ंक्शन को कॉल करने की सुविधा चालू करें.

सदस्यता बनाना और विषय के हिसाब से मैसेज भेजना

  1. अब आपके पास विषय की सदस्यता बनाने और उस पर मैसेज भेजने का विकल्प है.
  2. FcmSubscriptionManager.java क्लास के main फ़ंक्शन को एक्ज़ीक्यूट करें. इससे एक विषय की सदस्यता बन जाएगी.
  3. अब मैसेज भेजने के लिए कोड सेट अप करें. पहले की तरह,
    1. FcmSender.java में, sendMessageToFcmTopic फ़ंक्शन ढूंढें.
    2. topicName को Energy विषय पर सेट करें. जैसे, /topics/Energy.
    3. Message ऑब्जेक्ट बनाएं और setTopic का इस्तेमाल करके, उसे विषय के हिसाब से टारगेट करें.
    4. आखिर में, main तरीके को अपडेट करें, ताकि सिर्फ़ sendMessageToFcmTopic फ़ंक्शन चालू हो.
  4. FcmSender.java के main फ़ंक्शन को लागू करें. इससे आपके ऐप्लिकेशन इंस्टेंस को मैसेज भेजा जाएगा. इसे अपने ऐप्लिकेशन में इस तरह देखा जा सकता है.
    1. फ़ोरग्राउंड में ऐप्लिकेशन का इंस्टेंस
    40ab6cf71e0e4116.png
    1. बैकग्राउंड में ऐप्लिकेशन का इंस्टेंस
    8fba81037198209e.png

FCM विषय से FCM रजिस्ट्रेशन टोकन की सदस्यता रद्द करने की सुविधा को सर्वर साइड पर लागू करना

  1. सर्वर साइड से विषय की सदस्यताएं रद्द करने के लिए, इस unsubscribeFromTopic एपीआई का इस्तेमाल करें. आपको FcmSubscriptionManager.java क्लास के unsubscribeFcmRegistrationTokensFromTopic फ़ंक्शन में काम का कोड जोड़ना होगा.

8d9e8ea9d34016bd.png

  1. सर्वर साइड से सदस्यता छोड़ने के कोड को लागू करना और विषय से जुड़ा मैसेज भेजकर, उसके असर की पुष्टि करना आपके लिए एक टास्क है.

11. बधाई

बधाई हो! आपने अपने ऐप्लिकेशन के इंस्टेंस के सबग्रुप को मल्टीकास्ट मैसेज भेजने के लिए, FCM विषयों का इस्तेमाल कर लिया है. इससे आपको समय पर सही कॉन्टेंट के साथ अपने उपयोगकर्ताओं तक पहुंचने में आसानी होगी.

947def3eb33b1e4a.gif

आगे क्या करना है?

कोडलैब पूरा करने के बाद, यहां दी गई गाइड का इस्तेमाल करके, अन्य प्लैटफ़ॉर्म के विषयों को आज़माएं:

रेफ़रंस दस्तावेज़