Kotlin 01.2 में बेहतर Android: Android Firebase क्लाउड से मैसेज

यह कोडलैब, Kotlin में बेहतर Android का हिस्सा है. अगर आप कोडलैब के क्रम में काम करते हैं, लेकिन यह ज़रूरी नहीं है, तो आपको इस कोर्स का पूरा फ़ायदा मिलेगा. सभी कोर्स कोडलैब Kotlin कोडलैब के लैंडिंग पेज पर बेहतर Android पेज पर दिए गए हैं.

परिचय

पिछले कोडलैब में, आपने अपने ऐप्लिकेशन में बनाए और ट्रिगर किए गए अंडे के टाइमर में सूचनाएं जोड़ी हैं. सूचनाओं का एक और अहम तरीका है, पुश नोटिफ़िकेशन भेजना, जो आपके ऐप्लिकेशन के न चलने पर भी मिल सके.

पुश नोटिफ़िकेशन क्या है?

पुश नोटिफ़िकेशन ऐसी सूचनाएं होती हैं जिन्हें सर्वर मोबाइल डिवाइस पर &भेजता है. आपका डिवाइस चल रहा है या नहीं, इस बात की परवाह किए बिना वे किसी डिवाइस पर डिलीवर किए जा सकते हैं.

पुश नोटिफ़िकेशन, उपयोगकर्ताओं को अपडेट के बारे में बताने या काम या सुविधा के बारे में उन्हें याद दिलाने का शानदार तरीका है. मान लें कि आपको किसी प्रॉडक्ट के स्टॉक में दोबारा आने का इंतज़ार हो. पुश नोटिफ़िकेशन की मदद से, शॉपिंग ऐप्लिकेशन आपको रोज़ाना शेयर की स्थिति देखने के बजाय, स्टॉक के अपडेट के बारे में बता सकता है.

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

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

Firebase क्लाउड से मैसेज करना क्या है?

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

आप Firebase क्लाउड संदेशों का उपयोग अपने बैकएंड ऐप्लिकेशन या किसी Firebase प्रोजेक्ट से अपने उपयोगकर्ताओं में डेटा स्थानांतरित करने के लिए भी कर सकते हैं.

इस कोडलैब में आप Firebase क्लाउड से मैसेज भेजने की सुविधा का इस्तेमाल करके, अपने Android ऐप्लिकेशन को पुश नोटिफ़िकेशन भेजने का तरीका जानेंगे. साथ ही, आप डेटा भेजने का तरीका भी जानेंगे.

अगर इस कोडलैब के ज़रिए काम करते समय आपको कोई समस्या आती है (कोड की गड़बड़ी, व्याकरण की गलतियां, साफ़ तौर पर जानकारी न देना वगैरह), तो कोडलैब के नीचे बाएं कोने में मौजूद गलती की शिकायत करें लिंक के ज़रिए समस्या की शिकायत करें.

आपको क्या पता होना चाहिए

आपको इनके बारे में पता होना चाहिए:

  • Kotlin में Android ऐप्लिकेशन बनाने का तरीका. खास तौर पर, Android SDK टूल के साथ काम करें.
  • आर्किटेक्चर कॉम्पोनेंट और डेटा बाइंडिंग का इस्तेमाल करके अपना ऐप्लिकेशन कैसे डिज़ाइन करें.
  • ब्रॉडकास्ट पाने वालों के बारे में बुनियादी जानकारी.
  • AlarmManager की बुनियादी जानकारी.
  • नोटिफ़िकेशन मैनेजर का उपयोग करके नोटिफ़िकेशन बनाने और भेजने का तरीका.

आप इन चीज़ों के बारे में जानेंगे

  • 'Firebase क्लाउड से मैसेज' की मदद से उपयोगकर्ता को मैसेज भेजने का तरीका.
  • बैकएंड क्लाउड से मैसेज का हिस्सा होने वाले डेटा मैसेज का इस्तेमाल करके, अपने ऐप्लिकेशन से किसी बैकएंड में डेटा भेजें.

आप क्या कर पाएंगे!

  • स्टार्टर ऐप्लिकेशन में पुश नोटिफ़िकेशन जोड़ें.
  • अपने ऐप्लिकेशन के चलने के दौरान Firebase क्लाउड से मैसेज का प्रबंधन करें.
  • 'Firebase क्लाउड से मैसेज' की मदद से डेटा ट्रांसफ़र करें.

इस कोडलैब में आप Android ऐप्लिकेशन कोडलैब में सूचनाओं का इस्तेमाल करने से पहले के कोड पर काम करेंगे. पिछले कोडलैब में, आपने अंडे देने वाला टाइमर ऐप्लिकेशन बनाया था, जो कुकिंग टाइमर के पूरा होने पर सूचनाएं भेजता है. इस कोडलैब में आप 'Firebase क्लाउड से मैसेज' जोड़ना होगा, ताकि आपके ऐप्लिकेशन के उपयोगकर्ताओं को पुश नोटिफ़िकेशन भेजने के लिए कहा जा सके. ये सूचनाएं उपयोगकर्ताओं को याद दिलाती हैं कि वे अंडे खाना चाहते हैं.

ऐप्लिकेशन का नमूना लेने के लिए, इनमें से कोई एक काम करें:

GitHub से डेटा स्टोर करने की जगह क्लोन करें और स्टार्टर ब्रांच पर स्विच करें:

$  git clone https://github.com/googlecodelabs/android-kotlin-notifications-fcm


इसके अलावा, आप रिपॉज़िटरी को एक ZIP फ़ाइल के रूप में डाउनलोड कर सकते हैं, इसे अनज़िप कर सकते हैं, और इसे Android Studio में खोल सकते हैं.

पिन डाउनलोड करें

पहला चरण: Firebase प्रोजेक्ट बनाना

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

  1. Firebase कंसोल में लॉग इन करें.
  2. प्रोजेक्ट जोड़ें पर क्लिक करें. इसके बाद, प्रोजेक्ट का नाम चुनें या डालें. अपने प्रोजेक्ट को fcm-codelab नाम दें.
  3. जारी रखें पर क्लिक करें.
  4. आप इस प्रोजेक्ट के लिए Google Analytics चालू करें बटन को बंद करके, Google Analytics को सेट अप करना छोड़ सकते हैं.
  5. Firebase प्रोजेक्ट का सेट अप पूरा करने के लिए, प्रोजेक्ट बनाएं पर क्लिक करें.

दूसरा चरण: Firebase के साथ अपना ऐप्लिकेशन रजिस्टर करना

अब जब आपके पास Firebase प्रोजेक्ट हो गया है, तो आप उसमें अपना Android ऐप्लिकेशन जोड़ सकते हैं.

  1. Firebase कंसोल's प्रोजेक्ट की खास जानकारी देने वाले पेज के बीच में, सेट अप वर्कफ़्लो लॉन्च करने के लिए, Android आइकॉन पर क्लिक करें.

  1. Android पैकेज का नाम फ़ील्ड में, com.example.android.eggtimernotifications डालें.
  2. ऐप्लिकेशन रजिस्टर करें पर क्लिक करें.

अहम जानकारी: पक्का करें कि आप अपने ऐप्लिकेशन के लिए सही आईडी डालें, क्योंकि आप अपने Firebase प्रोजेक्ट में अपना ऐप्लिकेशन रजिस्टर करने के बाद इस मान को जोड़ या बदल नहीं सकते.

तीसरा चरण: Firebase कॉन्फ़िगरेशन फ़ाइल को अपने प्रोजेक्ट में जोड़ना

अपने ऐप्लिकेशन में Firebase Android कॉन्फ़िगरेशन फ़ाइल जोड़ें.

  1. अपनी Firebase Android कॉन्फ़िगरेशन फ़ाइल (google-services.json) पाने के लिए google-services.json डाउनलोड करें पर क्लिक करें. पक्का करें कि कॉन्फ़िगरेशन फ़ाइल अतिरिक्त वर्णों से जुड़ी हुई नहीं है और उसका नाम google-services.json सटीक है.
  2. अपनी कॉन्फ़िगरेशन फ़ाइल, ऐप्लिकेशन के मॉड्यूल-ऐप्लिकेशन डायरेक्ट्री में ले जाएं.

चौथा चरण: Firebase के प्रॉडक्ट को चालू करने के लिए, अपने Android प्रोजेक्ट को कॉन्फ़िगर करना

अपने ऐप्लिकेशन में Firebase प्रॉडक्ट को चालू करने के लिए, आपको अपनी Gradle फ़ाइलों में Google की सेवाओं का प्लग इन जोड़ना होगा.

  1. अपनी रूट-लेवल (प्रोजेक्ट-लेवल) Gradle फ़ाइल (build.gradle) में, देखें कि आपके पास Google's Maven डेटा स्टोर करने की जगह है या नहीं.
  2. फिर, Google सेवाएं प्लग इन शामिल करने के लिए नियम जोड़ें.

build.gradle

buildscript {

  repositories {
    // Check that you have the following line (if not, add it):
    google()  // Google's Maven repository
  }

  dependencies {
    // ...

    // Add the following line:
    classpath 'com.google.gms:google-services:4.3.2'  // Google Services plugin
  }
}

allprojects {
  // ...

  repositories {
    // Check that you have the following line (if not, add it):
    google()  // Google's Maven repository
    // ...
  }
}
  1. आपकी मॉड्यूल (ऐप्लिकेशन-लेवल) Gradle फ़ाइल (आम तौर पर app/build.gradle) में, प्लग इन को फ़ाइल के सबसे नीचे लागू करने के लिए एक लाइन जोड़ें.

app/build.gradle

apply plugin: 'com.android.application'

android {
  // ...
}

// Add the following line to the bottom of the file:
apply plugin: 'com.google.gms.google-services'  // Google Play services Gradle plugin

इस टास्क में, आप पुश नोटिफ़िकेशन का इस्तेमाल करने के लिए, अपने प्रोजेक्ट में Firebase क्लाउड से मैसेज (FCM) जोड़ेंगे.

इस कोडलैब के FCM का Android सेवा कोड, MyFirebaseMessagingService.kt में दिया गया है. नीचे बताए गए तरीके से, आप अपने Android ऐप्लिकेशन में कोड जोड़ेंगे.

लागू किए जाने की जांच करने के लिए, आप सूचनाएं बनाने वाले टूल का इस्तेमाल करेंगे. सूचनाएं बनाने वाला टूल एक ऐसा टूल है जिसकी मदद से, आप 'Firebase कंसोल' की वेबसाइट से मैसेज लिख सकते हैं और भेज सकते हैं.

  1. MyFirebaseMessagingService.kt खोलें
  2. फ़ाइल और खास तौर पर इन फ़ंक्शन की जांच करें:
  • onNewToken()—अगर आपकी सेवा Android मेनिफ़ेस्ट में रजिस्टर है, तो उसे अपने-आप कॉल किया जाता है. इस फ़ंक्शन को तब कॉल किया जाता है, जब आप अपने ऐप्लिकेशन को पहली बार चलाते हैं और हर बार Firebase आपके ऐप्लिकेशन के लिए एक नया टोकन जारी करता है. टोकन आपके Firebase बैकएंड प्रोजेक्ट के लिए एक ऐक्सेस कुंजी है. इसे आपके खास क्लाइंट डिवाइस के लिए जनरेट किया गया है. इस टोकन से Firebase को पता चलता है कि बैकएंड को किस क्लाइंट को मैसेज भेजना चाहिए. Firebase यह भी जानता है कि यह क्लाइंट मान्य है या नहीं. साथ ही, उसे इस Firebase प्रोजेक्ट का ऐक्सेस भी है.
  • onMessageReceived— यह तब कॉल किया जाता है, जब आपका ऐप्लिकेशन चल रहा हो और Firebase आपके ऐप्लिकेशन पर मैसेज भेजता हो. इस फ़ंक्शन को RemoteMessage ऑब्जेक्ट मिलता है, जो सूचना या डेटा मैसेज को लोड कर सकता है. आप इस कोडलैब के बाद, सूचनाओं और डेटा मैसेज के पेलोड के बीच के अंतर के बारे में ज़्यादा जानकारी पा सकते हैं.

पहला चरण: किसी एक डिवाइस पर FCM की सूचनाएं भेजना

सूचनाएं कंसोल की मदद से आप सूचना भेजने की सुविधा को टेस्ट कर सकते हैं. कंसोल का इस्तेमाल करके किसी खास डिवाइस पर मैसेज भेजने के लिए, आपको उस डिवाइस का रजिस्ट्रेशन टोकन जानना होगा.

जब Firebase बैकएंड कोई नया या रीफ़्रेश टोकन जनरेट करता है, तो onNewToken() फ़ंक्शन को कॉल किया जाएगा, जिसमें नए टोकन को आर्ग्युमेंट के तौर पर पास किया जाएगा. अगर आप किसी एक डिवाइस को टारगेट करना चाहते हैं या उन डिवाइस का ग्रुप बनाना चाहते हैं जिन पर आप ब्रॉडकास्ट मैसेज भेजना चाहते हैं, तो आपको FirebaseMessagingService बढ़ाकर और onNewToken() को बदलकर यह टोकन ऐक्सेस करना होगा.

  1. अंडे टाइमर ऐप्लिकेशन के लिए MyFirebaseMessagingService चालू करने के लिए, AndroidManifest.xml खोलें और नीचे दिए गए कोड को अनटिप्पणी करें. Android मेनिफ़ेस्ट में सेवा मेटा-डेटा MyFirebaseMessagingService को एक सेवा के रूप में रजिस्टर करता है और एक इंटेंट फ़िल्टर जोड़ता है ताकि इस सेवा को FCM से भेजे गए मैसेज मिलें. मेटाडेटा के आखिरी हिस्से में, breakfast_notification_channel_id को Firebase के लिए default_notification_channel_id बताया गया है. अगले चरण में, इस आईडी का इस्तेमाल किया जाएगा.
<!-- AndroidManifest.xml -->
<!-- TODO: Step 3.0 uncomment to start the service  -->

        <service
                android:name=".MyFirebaseMessagingService"
                android:exported="false">
            <intent-filter>
                <action android:name="com.google.firebase.MESSAGING_EVENT"/>
            </intent-filter>
        </service>
        <!-- [START fcm_default_icon] -->
        <!--
 Set custom default icon. This is used when no icon is set for incoming notification messages.
             See README(https://goo.gl/l4GJaQ) for more.
        -->
        <meta-data
                android:name="com.google.firebase.messaging.default_notification_icon"
                android:resource="@drawable/common_google_signin_btn_icon_dark"/>
        <!--
 Set color used with incoming notification messages. This is used when no color is set for the incoming
             notification message. See README(https://goo.gl/6BKBk7) for more.
        -->
        <meta-data
                android:name="com.google.firebase.messaging.default_notification_color"
                android:resource="@color/colorAccent"/> <!-- [END fcm_default_icon] -->
        <!-- [START fcm_default_channel] -->
        <meta-data
            android:name="com.google.firebase.messaging.default_notification_channel_id"
            android:value="@string/breakfast_notification_channel_id" />
        <!-- [END fcm_default_channel] -->

FCM के लिए, नया सूचना चैनल बनाना एक अच्छा तरीका है. ऐसा इसलिए, क्योंकि आपके उपयोगकर्ता अंडे के टाइमर या FCM से पुश नोटिफ़िकेशन को अलग-अलग चालू/बंद कर सकते हैं.

  1. ui/EggTimerFragment.kt खोलें . onCreateView() में, यह चैनल बनाने का कोड जोड़ें.
// EggTimerFragment.kt

   // TODO: Step 3.1 create a new channel for FCM
    createChannel(
        getString(R.string.breakfast_notification_channel_id),
        getString(R.string.breakfast_notification_channel_name)
    )
  1. MyFirebaseMessagingService.kt खोलें और onNewToken() फ़ंक्शन को अनटिप्पणी करें. नया टोकन जनरेट होने पर, इस फ़ंक्शन को कॉल किया जाएगा.
// MyFirebaseMessagingService.kt

   // TODO: Step 3.2 log registration token
    // [START on_new_token]
    /**
     * Called if InstanceID token is updated. This may occur if the security of
     * the previous token had been compromised. Note that this is called when the     
     * InstanceID token is initially generated so this is where you would retrieve     
     * the token.
     */
    override fun onNewToken(token: String?) {
        Log.d(TAG, "Refreshed token: $token")

        // If you want to send messages to this application instance or
        // manage this apps subscriptions on the server side, send the
        // Instance ID token to your app server.
        sendRegistrationToServer(token)
    }
    // [END on_new_token]
  1. YouTube टाइमर ऐप्लिकेशन चलाएं.
  2. लॉगकैट (व्यू > टूल विंडो > लॉगकैट) का ध्यान रखें. आपको एक टोकन लाइन दिखेगी, जो नीचे दिए गए टोकन की तरह आपका टोकन दिखाएगी. इस डिवाइस में मैसेज भेजने के लिए, यह टोकन ज़रूरी है. यह फ़ंक्शन तब ही कॉल किया जाता है, जब कोई नया टोकन बनाया जाता है.
2019-07-23 13:09:15.243 2312-2459/com.example.android.eggtimernotifications D/MyFirebaseMsgService: Refreshed token: f2esflBoQbI:APA91bFMzNNFaIskjr6KIV4zKjnPA4hxekmrtbrtba2aDbh593WQnm11ed54Mv6MZ9Yeerver7pzgwfKx7R9BHFffLBItLEgPvrtF0TtX9ToCrXZ5y7Hd-m

ध्यान दें: अगर आपको लॉगकैट मैसेज में टोकन नहीं दिखता है, तो हो सकता है कि आपके ऐप्लिकेशन को पहले ही टोकन मिल चुका हो. ऐसे में, ऐप्लिकेशन को अनइंस्टॉल करने से आपको नया टोकन पाने में मदद मिलेगी.

अब आप सूचना भेजकर जांच कर सकते हैं. सूचना भेजने के लिए, आपको सूचनाओं के संगीतकार का इस्तेमाल करना होगा.

  1. Firebase कंसोल खोलें और अपना प्रोजेक्ट चुनें.
  2. इसके बाद, बाईं ओर नेविगेशन से क्लाउड मैसेज चुनें.
  3. अपना पहला मैसेज भेजें पर क्लिक करें.

  1. सूचना के शीर्षक के तौर पर Time for Breakfast! और सूचना टेक्स्ट के तौर पर Don't forget to eat eggs! डालें. इसके बाद, टेस्ट मैसेज भेजें चुनें. डिवाइस पर टेस्ट पॉप-अप डायलॉग दिखेगा, जिसमें आपसे FCM रजिस्ट्रेशन टोकन देने के लिए कहा जाएगा.

  1. लॉगकैट से अपने ऐप्लिकेशन टोकन को कॉपी करें.

  1. इस टोकन को पॉप-अप विंडो में FCM रजिस्ट्रेशन टोकन जोड़ें फ़ील्ड में चिपकाएं, फिर टोकन के बगल में जोड़ें बटन पर क्लिक करें.
  2. इसके बाद, दिखने वाली चेकबॉक्स की सूची में टोकन चुनें. जांच करें बटन चालू हो जाना चाहिए.

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

टास्क: किसी विषय के लिए FCM सूचनाएं भेजना

FCM विषय मैसेज प्रकाशित/सदस्यता मॉडल पर आधारित होता है.

एक मैसेजिंग ऐप्लिकेशन प्रकाशित करें/सदस्यता लें मॉडल के लिए एक अच्छा उदाहरण हो सकता है. मान लें कि कोई ऐप्लिकेशन हर 10 सेकंड में नए मैसेज ढूंढता है. इससे, आपका फ़ोन सिर्फ़ बैटरी ही नहीं खर्च करेगा, बल्कि नेटवर्क के बेवजह संसाधनों का भी इस्तेमाल होगा. साथ ही, इससे आपके ऐप्लिकेशन के सर्वर पर बेवजह लोड भी पड़ेगा. इसके बजाय, क्लाइंट डिवाइस की सदस्यता ली जा सकती है. साथ ही, आपके ऐप्लिकेशन से नए मैसेज डिलीवर होने पर उसे सूचना दी जाएगी.

विषय की मदद से आप कई डिवाइस पर एक खास मैसेज भेज सकते हैं. ये ऐसे डिवाइस होते हैं जो किसी खास विषय के लिए ऑप्ट-इन करते हैं. क्लाइंट के लिए, विषय ऐसे खास डेटा स्रोत होते हैं जिनमें क्लाइंट की दिलचस्पी होती है. सर्वर के लिए, विषय उन डिवाइस के समूह होते हैं जिन्होंने किसी खास डेटा स्रोत से जुड़े अपडेट पाने के लिए ऑप्ट-इन किया है. विषयों का इस्तेमाल सूचनाओं की कैटगरी दिखाने के लिए किया जा सकता है. जैसे: समाचार, मौसम का पूर्वानुमान, और खेल के नतीजे. कोडलैब के इस हिस्से के लिए, आप एक &कोटेशन और नाश्ता (“विषय”) बनाएंगे. इससे, दिलचस्पी रखने वाले ऐप्लिकेशन उपयोगकर्ताओं को नाश्ते के साथ अंडे खाने की याद दिलाई जा सकेगी.

किसी विषय की सदस्यता लेने के लिए, क्लाइंट ऐप्लिकेशन, Firebase Cloud Messaging subscribeToTopic() के फ़ंक्शन को कॉल करता है. साथ ही, विषय के breakfast का इस्तेमाल भी करता है. इस कॉल के दो नतीजे हो सकते हैं. अगर कॉल करने वाला (कॉलर) कामयाब होता है, तो सदस्यता वाले मैसेज से OnCompleteListener कॉलबैक को कॉल किया जाएगा. अगर क्लाइंट सदस्यता नहीं ले पाता है, तो कॉलबैक को गड़बड़ी का मैसेज मिलेगा.

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

  1. EggTimerFragment.kt खोलें और खाली subscribeTopic() फ़ंक्शन ढूंढें.
  2. FirebaseMessaging का इंस्टेंस पाएं और विषय के नाम के साथ subscibeToTopic() फ़ंक्शन को कॉल करें.
  3. इस बारे में FCM से सूचना पाने के लिए addOnCompleteListener जोड़ें कि आपकी सदस्यता कामयाब रही या नहीं.
// EggTimerFragment.kt

   // TODO: Step 3.3 subscribe to breakfast topic
    private fun subscribeTopic() {
        // [START subscribe_topics]
        FirebaseMessaging.getInstance().subscribeToTopic(TOPIC)
            .addOnCompleteListener { task ->
                var msg = getString(R.string.message_subscribed)
                if (!task.isSuccessful) {
                    msg = getString(R.string.message_subscribe_failed)
                }
                Toast.makeText(context, msg, Toast.LENGTH_SHORT).show()
            }
        // [END subscribe_topics]
    }
  1. ऐप्लिकेशन शुरू होने पर किसी विषय की सदस्यता लेने के लिए subscribeTopic() फ़ंक्शन को कॉल करें. स्क्रोल करके onCreateView() तक जाएं और subscribeTopic() में कॉल जोड़ें.
// EggTimerFragment.kt

   // TODO: Step 3.4 call subscribe topics on start
    subscribeTopic()

    return binding.root
  1. नाश्ते के विषय की सदस्यता लेने के लिए, ऐप्लिकेशन को फिर से चलाएं. आपको टोस्ट मैसेज दिखेगा, जिसमें लिखा होगा &topic;सदस्यता के लिए विषय की सदस्यता ली गई है;.

अब आप किसी विषय पर मैसेज भेजने की सुविधा को टेस्ट कर सकते हैं:

  1. सूचनाएं बनाने वाला खोलें और सूचना लिखें चुनें.
  2. सूचना का सूचना का शीर्षक और पहले की तरह सूचना टेक्स्ट सेट करना.
  3. इस समय, एक डिवाइस पर मैसेज भेजने के बजाय, टारगेट में विषय पर क्लिक करें और मैसेज के विषय के तौर पर breakfast डालें.

  1. शेड्यूल करने के लिए अभी चुनें.

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

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

सूचनाओं का इस्तेमाल करते समय, हमेशा ध्यान रखें कि उपयोगकर्ता किसी भी समय किसी भी सूचना चैनल को बंद कर सकते हैं.

पहला चरण: डेटा मैसेज

FCM मैसेज में ऐसा डेटा पेलोड भी हो सकता है जो क्लाइंट ऐप्लिकेशन में मैसेज को प्रोसेस करता हो. सूचना मैसेज के बजाय डेटा मैसेज का इस्तेमाल करें.

डेटा मैसेज को हैंडल करने के लिए, आपको MyFirebaseMessagingService के onMessageReceived() फ़ंक्शन में डेटा पेलोड को मैनेज करना होगा. पेलोड, remoteMessage ऑब्जेक्ट की data प्रॉपर्टी में सेव है. remoteMessage ऑब्जेक्ट और data प्रॉपर्टी, null हो सकती हैं.

  1. MyFirebaseMessagingService. खोलें
  2. जांच करें कि remoteMessage ऑब्जेक्ट की data प्रॉपर्टी में कुछ वैल्यू है या नहीं. साथ ही, लॉग में डेटा प्रिंट करें.
// MyFirebaseMessagingService.kt

    // [START receive_message]
    override fun onMessageReceived(remoteMessage: RemoteMessage?) {
        // Not getting messages here? See why this may be: https://goo.gl/39bRNJ
        Log.d(TAG, "From: ${remoteMessage?.from}")
        
       // TODO: Step 3.5 check messages for data
        // Check if the message contains a data payload.
        remoteMessage?.data?.let {
            Log.d(TAG, "Message data payload: " + remoteMessage.data)
        }

    }
    // [END receive_message]

अपने कोड की जांच करने के लिए, आप सूचनाओं से जुड़े संगीतकार का फिर से इस्तेमाल कर सकते हैं.

  1. सूचना बनाने वाला टूल खोलें और टारगेट को &ब्रेकफ़ास्ट और कोटेशन के विषय पर सेट करें, और एक नया मैसेज बनाएं.
  2. इस बार, चौथे चरण पर पहुंचने के बाद, दूसरे विकल्प, कस्टम डेटा कुंजी और वैल्यू प्रॉपर्टी को इस तरह सेट करें:
  1. कुंजी: eggs
  2. वैल्यू: 3

  1. पक्का करें कि आपका ऐप्लिकेशन फ़ोरग्राउंड में चल रहा हो. अगर आपका ऐप्लिकेशन बैकग्राउंड में है, तो FCM मैसेज अपने-आप सूचना ट्रिगर करेगा. साथ ही, उपयोगकर्ता के सूचना पर क्लिक करने पर, onMessageReceived() फ़ंक्शन को सिर्फ़ remoteMessage ऑब्जेक्ट मिलेगा.
  2. सूचना बनाने वाले टूल से मैसेज भेजें और लॉगकैट में दिखने वाले डेटा मैसेज लॉग की निगरानी करें.

दूसरा चरण: फ़ोरग्राउंड और बैकग्राउंड में मैसेज मैनेज करना

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

  • अगर ऐप्लिकेशन बैकग्राउंड में चल रहा है और अगर मैसेज में सूचना पेलोड किया जाता है, तो सूचना अपने-आप सूचना ट्रे में दिखेगी. अगर मैसेज में डेटा पेलोड भी है, तो उपयोगकर्ता के सूचना पर टैप करने पर ऐप्लिकेशन, डेटा पेलोड को हैंडल करेगा.
  • अगर ऐप्लिकेशन फ़ोरग्राउंड में चल रहा है, तो मैसेज सूचना में सूचना पेलोड होने पर, सूचना अपने-आप नहीं दिखेगी. ऐप्लिकेशन को यह तय करना होगा कि onMessageReceived() फ़ंक्शन में, सूचना का इस्तेमाल कैसे किया जाए. अगर मैसेज में डेटा पेलोड भी है, तो ऐप्लिकेशन से दोनों पेलोड को हैंडल किया जाएगा.

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

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

आपके ऐप्लिकेशन के लिए, आप यह पक्का करना चाहते हैं कि ऐप्लिकेशन के फ़ोरग्राउंड में होने पर उपयोगकर्ता को रिमाइंडर मिले, इसलिए सूचना को ट्रिगर करने के लिए, कुछ कोड लागू करें:

  1. MyFirebaseMessagingService में onMessageReceived() फ़ंक्शन को फिर से खोलें.
  2. डेटा मैसेज देखने के लिए आपने हाल ही में जो कोड जोड़ा है उसके तुरंत बाद, नीचे दिया गया कोड जोड़ें. यह कोड, सूचना फ़्रेमवर्क का इस्तेमाल करके सूचना भेजता है.
// MyFirebaseMessagingService.kt

    // TODO: Step 3.6 check messages for notification and call sendNotification
    // Check if the message contains a notification payload.
    remoteMessage.notification?.let {
        Log.d(TAG, "Message Notification Body: ${it.body}")
        sendNotification(it.body as String)
    }
  1. अगर आप ऐप्लिकेशन को फिर से चलाते हैं और नोटिफ़िकेशन संगीतकार का उपयोग करके सूचना भेजते हैं, तो आपको ठीक उसी तरह एक सूचना दिखाई देगी, जैसी आपने कोडलैब के पहले भाग में देखी थी, भले ही ऐप्लिकेशन फ़ोरग्राउंड में हो या बैकग्राउंड में.

सॉल्यूशन कोड, आपके डाउनलोड किए गए कोड के मास्टर ब्रांच में होता है.

  • FCM BroadcastRecipients को FirebaseMessagingService को बढ़ाकर लागू करें.
  • Firebase क्लाउड से मैसेज (FCM) प्रोजेक्ट सेट अप करें और अपने Android ऐप्लिकेशन में FCM जोड़ें.
  • सूचनाएं बनाने वाले टूल से पुश नोटिफ़िकेशन भेजकर, अपने ऐप्लिकेशन की जांच करें.
  • FirebaseMessaging क्लास के subscribeToTopic() फ़ंक्शन को कॉल करके FCM विषय की सदस्यता लें.
  • RemoteMessage ऑब्जेक्ट का इस्तेमाल करके, डेटा पेलोड भेजें.
  • onMessageReceived() फ़ंक्शन में डेटा मैनेज करें.
  • जब ऐप्लिकेशन फ़ोरग्राउंड में हो और बैकग्राउंड में #39; हो, तो FCM को मैनेज करने के लिए लॉजिक जोड़ें.

Udcity कोर्स:

Firebase के दस्तावेज़:

इस कोर्स में दिए गए दूसरे कोडलैब के लिंक के लिए, Kotlin कोडलैब के लैंडिंग पेज पर बेहतर Android पेज देखें.