यह कोडलैब, Kotlin में ऐडवांस Android कोर्स का हिस्सा है. अगर इस कोर्स के कोडलैब को क्रम से पूरा किया जाता है, तो आपको सबसे ज़्यादा फ़ायदा मिलेगा. हालांकि, ऐसा करना ज़रूरी नहीं है. कोर्स के सभी कोडलब, Advanced Android in Kotlin कोडलब के लैंडिंग पेज पर दिए गए हैं.
परिचय
पिछले कोडलैब में, आपने अपने एग टाइमर में सूचनाएं जोड़ने का तरीका सीखा था. ये सूचनाएं, आपके ऐप्लिकेशन में ही बनाई और ट्रिगर की जाती हैं. सूचनाओं का एक और अहम इस्तेमाल यह है कि पुश नोटिफ़िकेशन को रिमोट से भेजा जा सकता है. ये सूचनाएं तब भी मिल सकती हैं, जब आपका ऐप्लिकेशन नहीं चल रहा हो.
पुश नोटिफ़िकेशन क्या है?
पुश नोटिफ़िकेशन, वे सूचनाएं होती हैं जिन्हें सर्वर, मोबाइल डिवाइसों पर "पुश" करता है. इन्हें किसी डिवाइस पर डिलीवर किया जा सकता है. इससे कोई फ़र्क़ नहीं पड़ता कि आपका ऐप्लिकेशन चल रहा है या नहीं.
पुश नोटिफ़िकेशन, उपयोगकर्ताओं को किसी अपडेट के बारे में बताने या उन्हें किसी टास्क या सुविधा के बारे में याद दिलाने का एक बेहतरीन तरीका है. मान लें कि आपको किसी प्रॉडक्ट के फिर से स्टॉक में आने का इंतज़ार करना है. पुश नोटिफ़िकेशन की मदद से, शॉपिंग ऐप्लिकेशन आपको स्टॉक के अपडेट के बारे में बता सकता है. इससे आपको हर दिन स्टॉक की स्थिति की जांच नहीं करनी पड़ती.
पुश नोटिफ़िकेशन, पब्लिश/सब्सक्राइब पैटर्न का इस्तेमाल करते हैं. इससे बैकएंड ऐप्लिकेशन, दिलचस्पी रखने वाले क्लाइंट को काम का कॉन्टेंट पुश कर पाते हैं. पब्लिश/सब्सक्राइब मॉडल के बिना, आपके ऐप्लिकेशन के उपयोगकर्ताओं को समय-समय पर ऐप्लिकेशन में अपडेट की जांच करनी होगी. यह प्रक्रिया उपयोगकर्ताओं के लिए मुश्किल और भरोसेमंद नहीं है. इसके अलावा, क्लाइंट की संख्या बढ़ने पर, समय-समय पर होने वाली इन जांचों से नेटवर्किंग और प्रोसेसिंग संसाधनों पर बहुत ज़्यादा लोड पड़ेगा. यह लोड, आपके ऐप्लिकेशन के सर्वर और उपयोगकर्ता के डिवाइस, दोनों पर पड़ेगा.
अन्य सभी तरह की सूचनाओं की तरह, पुश नोटिफ़िकेशन के ज़रिए अपने उपयोगकर्ताओं का सम्मान करें. अगर सूचना का कॉन्टेंट उपयोगकर्ता के लिए दिलचस्प या समय के हिसाब से सही नहीं है, तो वह आपके ऐप्लिकेशन से मिलने वाली सभी सूचनाएं आसानी से बंद कर सकता है.
Firebase क्लाउड से मैसेज भेजने की सेवा क्या है?
Firebase Cloud Messaging, मोबाइल डेवलपमेंट के लिए Firebase प्लैटफ़ॉर्म का हिस्सा है. आम तौर पर, आपको एक ऐसा सर्वर सेट अप करना होता है जो मोबाइल डिवाइसों से कम्यूनिकेट कर सके, ताकि सूचनाएं ट्रिगर की जा सकें. Firebase क्लाउड से मैसेज की मदद से, सर्वर सेट अप किए बिना, अपने ऐप्लिकेशन को इंस्टॉल करने वाले सभी उपयोगकर्ताओं या उनमें से कुछ को सूचनाएं भेजी जा सकती हैं. उदाहरण के लिए, उपयोगकर्ताओं को रिमाइंडर भेजा जा सकता है या उन्हें कोई खास प्रमोशन दिया जा सकता है. जैसे, मुफ़्त उपहार. किसी एक या एक से ज़्यादा डिवाइसों पर, दूर से सूचना भेजी जा सकती है.
अपने बैकएंड ऐप्लिकेशन या Firebase प्रोजेक्ट से उपयोगकर्ताओं को डेटा ट्रांसफ़र करने के लिए, Firebase क्लाउड मैसेज का इस्तेमाल भी किया जा सकता है.
इस कोडलैब में, आपको अपने Android ऐप्लिकेशन के लिए पुश नोटिफ़िकेशन भेजने के साथ-साथ डेटा भेजने के लिए, Firebase Cloud Messaging का इस्तेमाल करने का तरीका बताया जाएगा.
अगर आपको इस कोडलैब को पूरा करते समय कोई समस्या (कोड में गड़बड़ियां, व्याकरण से जुड़ी गलतियां, शब्दों का सही इस्तेमाल न होना वगैरह) आती है, तो कृपया कोडलैब के सबसे नीचे बाएं कोने में मौजूद गड़बड़ी की शिकायत करें लिंक के ज़रिए समस्या की शिकायत करें.
आपको पहले से क्या पता होना चाहिए
आपको इनके बारे में जानकारी होनी चाहिए:
- Kotlin में Android ऐप्लिकेशन बनाने का तरीका. खास तौर पर, Android SDK के साथ काम करना.
- आर्किटेक्चर कॉम्पोनेंट और डेटा बाइंडिंग का इस्तेमाल करके, अपने ऐप्लिकेशन को डिज़ाइन करने का तरीका.
- ब्रॉडकास्ट रिसीवर के बारे में बुनियादी जानकारी.
- AlarmManager के बारे में बुनियादी जानकारी.
- NotificationManager का इस्तेमाल करके सूचनाएं बनाने और भेजने का तरीका.
आपको क्या सीखने को मिलेगा
- Firebase Cloud Messaging की मदद से, उपयोगकर्ता को मैसेज कैसे पुश करें.
- डेटा मैसेज का इस्तेमाल करके, बैकएंड से अपने ऐप्लिकेशन में डेटा कैसे भेजें. यह Firebase Cloud Messaging का हिस्सा है.
आपको क्या करना होगा
- स्टार्टर ऐप्लिकेशन में पुश नोटिफ़िकेशन की सुविधा जोड़ें.
- ऐप्लिकेशन चालू होने पर, Firebase क्लाउड से मैसेज को मैनेज करें.
- Firebase Cloud Messaging की मदद से डेटा ट्रांसफ़र करें.
इस कोडलैब में, आपको Android ऐप्लिकेशन में सूचनाएं इस्तेमाल करने के बारे में पिछले कोडलैब के कोड पर काम करना होगा. पिछले कोडलैब में, आपने एक एग टाइमर ऐप्लिकेशन बनाया था. यह ऐप्लिकेशन, खाना पकाने का टाइमर खत्म होने पर सूचनाएं भेजता है. इस कोडलैब में, आपको अपने ऐप्लिकेशन के उपयोगकर्ताओं को पुश नोटिफ़िकेशन भेजने के लिए, Firebase Cloud Messaging को जोड़ना होगा. इससे उन्हें अंडे खाने की याद दिलाई जा सकेगी.
सैंपल ऐप्लिकेशन पाने के लिए, इनमें से कोई एक तरीका अपनाएं:
GitHub से रिपॉज़िटरी का क्लोन बनाएं और starter ब्रांच पर स्विच करें:
$ git clone https://github.com/googlecodelabs/android-kotlin-notifications-fcm
इसके अलावा, रिपॉज़िटरी को Zip फ़ाइल के तौर पर डाउनलोड किया जा सकता है. इसके बाद, इसे अनज़िप करके Android Studio में खोला जा सकता है.
पहला चरण: Firebase प्रोजेक्ट बनाना
अपने Android ऐप्लिकेशन में Firebase जोड़ने से पहले, आपको एक Firebase प्रोजेक्ट बनाना होगा, ताकि उसे अपने Android ऐप्लिकेशन से कनेक्ट किया जा सके.
- Firebase कंसोल में लॉग इन करें.
- प्रोजेक्ट जोड़ें पर क्लिक करें. इसके बाद, प्रोजेक्ट का नाम चुनें या डालें. अपने प्रोजेक्ट का नाम fcm-codelab रखें.
- जारी रखें पर क्लिक करें.
- इस प्रोजेक्ट के लिए Google Analytics चालू करें बटन को बंद करके, Google Analytics को सेट अप करने की प्रोसेस को स्किप किया जा सकता है..
- Firebase प्रोजेक्ट सेट अप करने की प्रोसेस पूरी करने के लिए, प्रोजेक्ट बनाएं पर क्लिक करें.
दूसरा चरण: अपने ऐप्लिकेशन को Firebase में रजिस्टर करना
अब आपके पास एक Firebase प्रोजेक्ट है. इसमें अपना Android ऐप्लिकेशन जोड़ा जा सकता है.
- सेटअप वर्कफ़्लो लॉन्च करने के लिए, Firebase कंसोल के प्रोजेक्ट की खास जानकारी वाले पेज के बीच में मौजूद, Android आइकॉन पर क्लिक करें.
- Android पैकेज का नाम फ़ील्ड में,
com.example.android.eggtimernotifications
डालें. - ऐप्लिकेशन रजिस्टर करें पर क्लिक करें.
अहम जानकारी: पक्का करें कि आपने अपने ऐप्लिकेशन के लिए सही आईडी डाला हो. ऐसा इसलिए, क्योंकि Firebase प्रोजेक्ट में ऐप्लिकेशन रजिस्टर करने के बाद, इस वैल्यू को न तो जोड़ा जा सकता है और न ही बदला जा सकता है.
तीसरा चरण: Firebase कॉन्फ़िगरेशन फ़ाइल को अपने प्रोजेक्ट में जोड़ना
अपने ऐप्लिकेशन में Firebase Android कॉन्फ़िगरेशन फ़ाइल जोड़ें.
- अपनी Firebase Android कॉन्फ़िगरेशन फ़ाइल (
google-services.json
) पाने के लिए, google-services.json डाउनलोड करें पर क्लिक करें. पक्का करें कि कॉन्फ़िगरेशन फ़ाइल में कोई और वर्ण न जोड़ा गया हो और उसका नामgoogle-services.json
ही हो. - अपनी कॉन्फ़िगरेशन फ़ाइल को अपने ऐप्लिकेशन की मॉड्यूल (ऐप्लिकेशन-लेवल) डायरेक्ट्री में ले जाएं.
चौथा चरण: Firebase प्रॉडक्ट चालू करने के लिए, अपने Android प्रोजेक्ट को कॉन्फ़िगर करना
अपने ऐप्लिकेशन में Firebase के प्रॉडक्ट चालू करने के लिए, आपको अपनी Gradle फ़ाइलों में google-services प्लगिन जोड़ना होगा.
- रूट-लेवल (प्रोजेक्ट-लेवल) की Gradle फ़ाइल (
build.gradle
) में जाकर देखें कि आपके पास Google की Maven रिपॉज़िटरी है या नहीं. - इसके बाद, Google Services प्लगिन को शामिल करने के लिए नियम जोड़ें.
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
// ...
}
}
- अपने मॉड्यूल (ऐप्लिकेशन-लेवल) की 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 Cloud Messaging (FCM) जोड़ना होगा, ताकि पुश नोटिफ़िकेशन का इस्तेमाल किया जा सके.
इस कोडलैब के FCM के लिए Android सर्विस कोड, MyFirebaseMessagingService.kt
में दिया गया है. यहां दिए गए चरणों में, आपको अपने Android ऐप्लिकेशन में कोड जोड़ना होगा.
आपने जो कोड लागू किया है उसकी जांच करने के लिए, सूचनाएं कंपोज़ करने वाले टूल का इस्तेमाल करें. सूचना कंपोज़र एक ऐसा टूल है जिसकी मदद से, Firebase कंसोल की वेबसाइट से मैसेज बनाए और भेजे जा सकते हैं.
MyFirebaseMessagingService.kt
खोलें- फ़ाइल की जांच करें. खास तौर पर, इन फ़ंक्शन की जांच करें:
onNewToken()
—अगर आपकी सेवा Android मेनिफ़ेस्ट में रजिस्टर है, तो यह अपने-आप कॉल हो जाती है. इस फ़ंक्शन को तब कॉल किया जाता है, जब पहली बार ऐप्लिकेशन चलाया जाता है. साथ ही, हर बार जब Firebase आपके ऐप्लिकेशन के लिए नया टोकन जारी करता है, तब भी इसे कॉल किया जाता है. टोकन, आपके Firebase बैकएंड प्रोजेक्ट के लिए ऐक्सेस कुंजी होती है. यह आपके क्लाइंट डिवाइस के लिए जनरेट किया जाता है. इस टोकन की मदद से, Firebase को पता चलता है कि बैकएंड को किस क्लाइंट को मैसेज भेजने हैं. Firebase को यह भी पता होता है कि यह क्लाइंट मान्य है या नहीं और इसके पास इस Firebase प्रोजेक्ट का ऐक्सेस है या नहीं.onMessageReceived
— इस फ़ंक्शन को तब कॉल किया जाता है, जब आपका ऐप्लिकेशन चल रहा होता है और Firebase आपके ऐप्लिकेशन को कोई मैसेज भेजता है. इस फ़ंक्शन कोRemoteMessage
ऑब्जेक्ट मिलता है. इसमें सूचना या डेटा मैसेज का पेलोड हो सकता है. इस कोडलैब में, आपको सूचनाओं और डेटा मैसेज के पेलोड के बीच के अंतर के बारे में ज़्यादा जानकारी मिलेगी.
पहला चरण: किसी एक डिवाइस पर FCM सूचनाएं भेजना
सूचनाएं कंसोल की मदद से, सूचना भेजने की सुविधा की जांच की जा सकती है. कंसोल का इस्तेमाल करके किसी डिवाइस पर मैसेज भेजने के लिए, आपको उस डिवाइस के रजिस्ट्रेशन टोकन की जानकारी होनी चाहिए.
जब Firebase बैकएंड, नया या रीफ़्रेश किया गया टोकन जनरेट करता है, तो onNewToken()
फ़ंक्शन को कॉल किया जाएगा. इसमें नए टोकन को आर्ग्युमेंट के तौर पर पास किया जाएगा. अगर आपको किसी एक डिवाइस को टारगेट करना है या डिवाइसों का ऐसा ग्रुप बनाना है जिस पर आपको ब्रॉडकास्ट मैसेज भेजना है, तो आपको इस टोकन को ऐक्सेस करना होगा. इसके लिए, FirebaseMessagingService
को बढ़ाएं और onNewToken()
को बदलें.
AndroidManifest.xml
खोलें और अंडे उबालने के टाइमर वाले ऐप्लिकेशन के लिएAndroidManifest.xml
को चालू करने के लिए, यहां दिए गए कोड से टिप्पणी हटाएं. Android मेनिफ़ेस्ट में मौजूद सेवा का मेटा-डेटा,MyFirebaseMessagingService
को एक सेवा के तौर पर रजिस्टर करता है. साथ ही, एक इंटेंट फ़िल्टर जोड़ता है, ताकि इस सेवा को FCM से भेजे गए मैसेज मिल सकें.MyFirebaseMessagingService
मेटाडेटा का आखिरी हिस्सा, Firebase के लिएbreakfast_notification_channel_id
को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 पुश नोटिफ़िकेशन को अलग-अलग चालू/बंद करना चाहें.
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)
)
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]
- एग टाइमर ऐप्लिकेशन चलाएं.
- logcat देखें (View > Tool Windows > Logcat). आपको नीचे दी गई इमेज की तरह, अपने टोकन को दिखाने वाली लॉग लाइन दिखेगी. इस डिवाइस पर मैसेज भेजने के लिए, आपको इस टोकन की ज़रूरत होगी. इस फ़ंक्शन को सिर्फ़ तब कॉल किया जाता है, जब कोई नया टोकन बनाया जाता है.
2019-07-23 13:09:15.243 2312-2459/com.example.android.eggtimernotifications D/MyFirebaseMsgService: Refreshed token: f2esflBoQbI:APA91bFMzNNFaIskjr6KIV4zKjnPA4hxekmrtbrtba2aDbh593WQnm11ed54Mv6MZ9Yeerver7pzgwfKx7R9BHFffLBItLEgPvrtF0TtX9ToCrXZ5y7Hd-m
ध्यान दें: अगर आपको logcat मैसेज में टोकन नहीं दिखता है, तो हो सकता है कि आपके ऐप्लिकेशन को पहले ही टोकन मिल गया हो. ऐसे में, ऐप्लिकेशन को अनइंस्टॉल करने से आपको नया टोकन मिल जाएगा.
अब सूचना भेजकर, इसकी जांच की जा सकती है. सूचना भेजने के लिए, सूचना कंपोज़र का इस्तेमाल करें.
- Firebase कंसोल खोलें और अपना प्रोजेक्ट चुनें.
- इसके बाद, बाईं ओर मौजूद नेविगेशन से Cloud Messaging को चुनें.
- पहला मैसेज भेजें पर क्लिक करें.
- सूचना के टाइटल के तौर पर
Time for Breakfast!
और सूचना के टेक्स्ट के तौर परDon't forget to eat eggs!
डालें. इसके बाद, जांच के लिए मैसेज भेजें को चुनें. डिवाइस पर टेस्ट करें पॉप-अप डायलॉग दिखता है. इसमें आपसे FCM रजिस्ट्रेशन टोकन देने के लिए कहा जाता है.
- logcat से अपने ऐप्लिकेशन का टोकन कॉपी करें.
- इस टोकन को पॉप-अप विंडो में मौजूद, FCM रजिस्ट्रेशन टोकन जोड़ें फ़ील्ड में चिपकाएं. इसके बाद, टोकन के बगल में मौजूद जोड़ें बटन पर क्लिक करें.
- दिखने वाली चेकबॉक्स सूची में, टोकन चुनें. जांच करें बटन चालू हो जाना चाहिए.
- अपने डिवाइस पर, Egg Timer ऐप्लिकेशन को बैकग्राउंड में रखें.
- पॉप-अप में, जांच करें पर क्लिक करें.
- जांच करें पर क्लिक करने के बाद, टारगेट किए गए क्लाइंट डिवाइस को सिस्टम नोटिफ़िकेशन ट्रे में सूचना मिलनी चाहिए. इस डिवाइस पर आपका ऐप्लिकेशन बैकग्राउंड में चल रहा हो. (ऐप्लिकेशन के फ़ोरग्राउंड में होने पर, FCM मैसेज को मैनेज करने के बारे में आपको बाद में ज़्यादा जानकारी मिलेगी.)
टास्क: किसी विषय के लिए FCM सूचनाएं भेजना
FCM में विषय के हिसाब से मैसेज भेजने की सुविधा, पब्लिश/सब्सक्राइब मॉडल पर आधारित होती है.
मैसेजिंग ऐप्लिकेशन, पब्लिश/सब्सक्राइब मॉडल का एक अच्छा उदाहरण हो सकता है. मान लें कि कोई ऐप्लिकेशन हर 10 सेकंड में नए मैसेज की जांच करता है. इससे न सिर्फ़ आपके फ़ोन की बैटरी खत्म होगी, बल्कि नेटवर्क के संसाधनों का भी बेवजह इस्तेमाल होगा. साथ ही, आपके ऐप्लिकेशन के सर्वर पर बेवजह लोड पड़ेगा. इसके बजाय, क्लाइंट डिवाइस सदस्यता ले सकता है. साथ ही, आपके ऐप्लिकेशन के ज़रिए डिलीवर किए गए नए मैसेज की सूचना पा सकता है.
विषयों की मदद से, उन सभी डिवाइसों पर मैसेज भेजा जा सकता है जिन्होंने उस विषय के लिए ऑप्ट-इन किया है. क्लाइंट के लिए, विषय ऐसे खास डेटा सोर्स होते हैं जिनमें क्लाइंट की दिलचस्पी होती है. सर्वर के लिए, विषय ऐसे डिवाइसों के ग्रुप होते हैं जिन्होंने किसी खास डेटा सोर्स से अपडेट पाने के लिए ऑप्ट-इन किया है. विषयों का इस्तेमाल, सूचनाओं की कैटगरी दिखाने के लिए किया जा सकता है. जैसे, खबरें, मौसम का पूर्वानुमान, और खेल के नतीजे. इस कोडलैब के इस हिस्से में, आपको "नाश्ता" विषय बनाना होगा. इससे ऐप्लिकेशन में दिलचस्पी दिखाने वाले उपयोगकर्ताओं को यह याद दिलाया जा सकेगा कि वे नाश्ते में अंडे खाएं.
किसी विषय की सूचनाएं पाने के लिए, क्लाइंट ऐप्लिकेशन, Firebase क्लाउड मैसेजिंग के subscribeToTopic(
)
फ़ंक्शन को कॉल करता है. इसमें विषय का नाम breakfast
होता है. इस कॉल के दो नतीजे हो सकते हैं. अगर कॉलर को अनुमति मिल जाती है, तो OnCompleteListener
कॉलबैक को सदस्यता वाले मैसेज के साथ कॉल किया जाएगा. अगर क्लाइंट सदस्यता नहीं लेता है, तो कॉलबैक को गड़बड़ी का मैसेज मिलेगा.
आपके ऐप्लिकेशन में, उपयोगकर्ताओं को नाश्ते के विषय की सदस्यता अपने-आप मिल जाएगी. हालांकि, ज़्यादातर प्रोडक्शन ऐप्लिकेशन में, उपयोगकर्ताओं को यह कंट्रोल देना बेहतर होता है कि वे किन विषयों की सदस्यता लें.
EggTimerFragment.kt
खोलें और खालीsubscribeTopic()
फ़ंक्शन ढूंढें.FirebaseMessaging
का इंस्टेंस पाएं और विषय के नाम के साथsubscibeToTopic()
फ़ंक्शन को कॉल करें.addOnCompleteListener
जोड़ें, ताकि FCM आपको यह सूचना दे सके कि आपकी सदस्यता पूरी हुई या नहीं.
// 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]
}
- ऐप्लिकेशन शुरू होने पर, किसी विषय की सदस्यता लेने के लिए
subscribeTopic()
फ़ंक्शन को कॉल करें. ऊपर की ओर स्क्रोल करकेonCreateView()
पर जाएं औरsubscribeTopic()
पर कॉल जोड़ें.
// EggTimerFragment.kt
// TODO: Step 3.4 call subscribe topics on start
subscribeTopic()
return binding.root
- नाश्ते के बारे में जानकारी पाने के लिए, ऐप्लिकेशन को फिर से चलाएं. आपको "विषय की सदस्यता ली गई" वाला सूचना मैसेज दिखेगा.
अब किसी विषय पर मैसेज भेजने की सुविधा को आज़माया जा सकता है:
- सूचना कंपोज़र खोलें और सूचना लिखें को चुनें.
- सूचना के सूचना का टाइटल और सूचना का टेक्स्ट को पहले की तरह सेट करें.
- इस बार, मैसेज को किसी एक डिवाइस पर भेजने के बजाय, टारगेट में जाकर विषय पर क्लिक करें. इसके बाद, मैसेज के विषय के तौर पर
breakfast
डालें.
- शेड्यूल करने के लिए, अभी को चुनें.
- पक्का करें कि आपके टेस्टिंग डिवाइस पर, आपका ऐप्लिकेशन बैकग्राउंड में चल रहा हो.
- समीक्षा करें पर क्लिक करें. इसके बाद, पब्लिश करें पर क्लिक करें. अगर ऐप्लिकेशन को एक से ज़्यादा डिवाइसों पर चलाया जा सकता है, तो यह जांच की जा सकती है कि इस विषय की सदस्यता लेने वाले सभी डिवाइसों पर सूचना मिली है या नहीं.
अब इस ऐप्लिकेशन में सूचनाएं पाने के लिए, ये चैनल उपलब्ध हैं: Egg और Breakfast. क्लाइंट डिवाइस पर, ऐप्लिकेशन आइकॉन को दबाकर रखें. इसके बाद, जानकारी को चुनें और सूचनाएं पर क्लिक करें. आपको अंडा और नाश्ता सूचना चैनल दिखने चाहिए. जैसा कि यहां दिए गए स्क्रीनशॉट में दिखाया गया है. Breakfast चैनल को अनचेक करने पर, आपके ऐप्लिकेशन को इस चैनल से भेजी गई कोई भी सूचना नहीं मिलेगी.
सूचनाएं इस्तेमाल करते समय, हमेशा ध्यान रखें कि उपयोगकर्ता किसी भी समय सूचना पाने के किसी भी चैनल को बंद कर सकते हैं.
पहला चरण: डेटा मैसेज
FCM मैसेज में डेटा पेलोड भी शामिल हो सकता है. यह क्लाइंट ऐप्लिकेशन में मैसेज प्रोसेस करता है. सूचना वाले मैसेज के बजाय डेटा मैसेज का इस्तेमाल करें.
डेटा मैसेज को हैंडल करने के लिए, आपको onMessageReceived()
फ़ंक्शन में डेटा पेलोड को हैंडल करना होगा.MyFirebaseMessagingService
पेलोड को remoteMessage
ऑब्जेक्ट की data
प्रॉपर्टी में सेव किया जाता है. remoteMessage
ऑब्जेक्ट और data
प्रॉपर्टी, दोनों null
हो सकते हैं.
MyFirebaseMessagingService.
खोलें- जांच करें कि
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]
अपने कोड की जांच करने के लिए, सूचना कंपोज़र का फिर से इस्तेमाल किया जा सकता है.
- सूचना कंपोज़र खोलें और एक नया मैसेज बनाएं. इसके टारगेट को "नाश्ता" विषय पर सेट करें.
- इस बार, चौथे चरण में अन्य विकल्प पर जाकर, कस्टम डेटा की और वैल्यू प्रॉपर्टी को इस तरह सेट करें:
- कुंजी:
eggs
- वैल्यू:
3
- पक्का करें कि आपका ऐप्लिकेशन फ़ोरग्राउंड में चल रहा हो. अगर आपका ऐप्लिकेशन बैकग्राउंड में है, तो FCM मैसेज से सूचना अपने-आप ट्रिगर हो जाएगी. साथ ही, जब उपयोगकर्ता सूचना पर क्लिक करेगा, तब
onMessageReceived()
फ़ंक्शन को सिर्फ़remoteMessage
ऑब्जेक्ट मिलेगा. - सूचना कंपोज़र से मैसेज भेजें और logcat में दिखने वाले डेटा मैसेज लॉग को देखें.
दूसरा चरण: फ़ोरग्राउंड और बैकग्राउंड में मैसेज मैनेज करना
जब आपके ऐप्लिकेशन का इस्तेमाल कर रहे क्लाइंट डिवाइस को ऐसा मैसेज मिलता है जिसमें सूचना और डेटा पेलोड, दोनों शामिल होते हैं, तो ऐप्लिकेशन का व्यवहार इस बात पर निर्भर करता है कि वह डिवाइस पर बैकग्राउंड में चल रहा है या फ़ोरग्राउंड में:
- अगर ऐप्लिकेशन बैकग्राउंड में चल रहा है और मैसेज में सूचना का पेलोड है, तो सूचना अपने-आप सूचना ट्रे में दिखती है. अगर मैसेज में डेटा पेलोड भी है, तो जब उपयोगकर्ता सूचना पर टैप करेगा, तब ऐप्लिकेशन डेटा पेलोड को मैनेज करेगा.
- अगर ऐप्लिकेशन फ़ोरग्राउंड में चल रहा है और सूचना के पेलोड में सूचना है, तो सूचना अपने-आप नहीं दिखेगी. ऐप्लिकेशन को यह तय करना होगा कि
onMessageReceived()
फ़ंक्शन में सूचना को कैसे हैंडल किया जाए. अगर मैसेज में डेटा पेलोड भी है, तो ऐप्लिकेशन दोनों पेलोड को हैंडल करेगा.
इस कोडलैब के लिए, आपको ऐप्लिकेशन के उपयोगकर्ता को नाश्ते में कुछ अंडे खाने के लिए याद दिलाना है. आपको कोई डेटा नहीं भेजना है. हालांकि, आपको यह भी पक्का करना है कि ऐप्लिकेशन के फ़ोरग्राउंड या बैकग्राउंड में होने से कोई फ़र्क़ न पड़े और सूचना हमेशा दिखे.
अगर आपने उन डिवाइसों पर FCM मैसेज भेजा है जिन पर Egg Timer ऐप्लिकेशन इंस्टॉल है, तो ऐप्लिकेशन के न चलने या बैकग्राउंड में होने पर, सूचना वाला मैसेज अपने-आप दिखेगा. हालांकि, अगर ऐप्लिकेशन फ़ोरग्राउंड में चल रहा है, तो सूचना अपने-आप नहीं दिखती. इसके बजाय, ऐप्लिकेशन का कोड यह तय करता है कि मैसेज का क्या करना है. अगर ऐप्लिकेशन फ़ोरग्राउंड में चालू होने पर FCM मैसेज मिलता है, तो onMessageReceived()
फ़ंक्शन, FCM मैसेज के साथ अपने-आप ट्रिगर हो जाएगा. यहां आपका ऐप्लिकेशन, सूचना और डेटा पेलोड को चुपचाप हैंडल कर सकता है या सूचना ट्रिगर कर सकता है.
आपको यह पक्का करना है कि जब ऐप्लिकेशन फ़ोरग्राउंड में हो, तब उपयोगकर्ता को आपके ऐप्लिकेशन के लिए रिमाइंडर मिले. इसलिए, सूचना ट्रिगर करने के लिए कुछ कोड लागू करते हैं:
MyFirebaseMessagingService
मेंonMessageReceived()
फ़ंक्शन को फिर से खोलें.- डेटा मैसेज की जांच करने के लिए, हाल ही में जोड़े गए कोड के तुरंत बाद, यह कोड जोड़ें. यह कोड, सूचनाओं के फ़्रेमवर्क का इस्तेमाल करके सूचना भेजता है.
// 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)
}
- अगर आपने ऐप्लिकेशन को फिर से चालू किया और सूचना कंपोज़र का इस्तेमाल करके सूचना भेजी, तो आपको ठीक वैसी ही सूचना दिखेगी जैसी आपको कोडलैब के पहले हिस्से में दिखती थी. इससे कोई फ़र्क़ नहीं पड़ता कि ऐप्लिकेशन फ़ोरग्राउंड में है या बैकग्राउंड में.
सोल्यूशन कोड, डाउनलोड किए गए कोड की मास्टर ब्रांच में मौजूद होता है.
FirebaseMessagingService
को बढ़ाकर, FCM BroadcastReceiver लागू करें.- Firebase Cloud Messaging (FCM) प्रोजेक्ट सेट अप करें और अपने Android ऐप्लिकेशन में FCM जोड़ें.
- सूचना कंपोज़र से पुश नोटिफ़िकेशन भेजकर, अपने ऐप्लिकेशन की जांच करें.
FirebaseMessaging
क्लास केsubscribeToTopic()
फ़ंक्शन को कॉल करके, FCM विषयों की सदस्यता लें.RemoteMessage
ऑब्जेक्ट का इस्तेमाल करके, डेटा पेलोड भेजें.onMessageReceived()
फ़ंक्शन में डेटा को मैनेज करें.- ऐप्लिकेशन के फ़ोरग्राउंड और बैकग्राउंड में होने पर, FCM को मैनेज करने के लिए लॉजिक जोड़ें.
Udacity का कोर्स:
Firebase से जुड़ा दस्तावेज़:
इस कोर्स में शामिल अन्य कोडलैब के लिंक के लिए, Advanced Android in Kotlin कोडलैब का लैंडिंग पेज देखें.