Firebase Cloud Messaging (FCM) is a free service by Google that lets you send notifications and messages to Android, iOS, and web apps. It helps apps stay connected with users by delivering push notifications.
Click to reveal answer
beginner
Which Android component handles incoming push notifications?
The FirebaseMessagingService class handles incoming push notifications. You create a subclass and override the onMessageReceived() method to define how your app reacts when a message arrives.
Click to reveal answer
intermediate
What is the purpose of a notification channel in Android push notifications?
Notification channels group notifications by type and let users control settings like sound and vibration for each channel. They are required for Android 8.0 (API level 26) and above.
Click to reveal answer
intermediate
How do you get the device token for FCM in Kotlin?
You get the device token by calling FirebaseMessaging.getInstance().token.addOnCompleteListener { ... } which asynchronously returns the unique token identifying the device for push messages.
Click to reveal answer
beginner
Why is it important to handle notification clicks in your app?
Handling notification clicks lets you control what happens when a user taps a notification, such as opening a specific screen. This improves user experience by linking notifications to relevant app content.
Click to reveal answer
Which class should you extend to handle incoming FCM messages in Android?
AFirebaseMessagingService
BFirebaseInstanceIdService
CNotificationManager
DFirebaseAuth
✗ Incorrect
FirebaseMessagingService is the class designed to receive and handle incoming FCM messages.
What Android version introduced notification channels?
AAndroid 7.0 Nougat
BAndroid 9.0 Pie
CAndroid 8.0 Oreo
DAndroid 6.0 Marshmallow
✗ Incorrect
Notification channels were introduced in Android 8.0 Oreo to organize notifications and allow user control.
The recommended way is to call FirebaseMessaging.getInstance().token asynchronously to get the device token.
What is the main purpose of a notification channel?
ATo store notification data
BTo send messages to multiple devices
CTo authenticate users
DTo group notifications and let users control their settings
✗ Incorrect
Notification channels group notifications and allow users to customize settings like sound and vibration.
Which Firebase service is used to send push notifications?
AFirebase Cloud Messaging
BFirebase Realtime Database
CFirebase Authentication
DFirebase Storage
✗ Incorrect
Firebase Cloud Messaging is the service used to send push notifications to apps.
Explain how to set up Firebase Cloud Messaging in an Android app using Kotlin.
Think about the steps from adding Firebase to handling messages and notifications.
You got /6 concepts.
Describe why notification channels are important and how they affect user experience.
Consider how users interact with notifications and their settings.
You got /5 concepts.
Practice
(1/5)
1. What is the main purpose of Firebase Cloud Messaging (FCM) in Android apps?
easy
A. To manage app permissions and settings
B. To store user data locally on the device
C. To send push notifications to users even when the app is closed
D. To create user interfaces with buttons and text
Solution
Step 1: Understand FCM's role
Firebase Cloud Messaging is designed to send messages or notifications to users' devices.
Step 2: Identify the correct purpose
It works even if the app is closed, keeping users updated with push notifications.
Final Answer:
To send push notifications to users even when the app is closed -> Option C
Quick Check:
FCM purpose = push notifications [OK]
Hint: Remember: FCM = push notifications, not UI or storage [OK]
Common Mistakes:
Confusing FCM with local data storage
Thinking FCM manages UI elements
Assuming FCM controls app permissions
2. Which Kotlin class should you extend to handle incoming Firebase push messages in your Android app?
easy
A. FirebaseMessagingService
B. FirebaseDatabase
C. FirebaseAuth
D. FirebaseStorage
Solution
Step 1: Identify the service for message handling
FirebaseMessagingService is the class designed to receive and handle push notifications.
Step 2: Exclude unrelated Firebase classes
FirebaseDatabase, FirebaseAuth, and FirebaseStorage serve different purposes like data storage, authentication, and file storage.
Final Answer:
FirebaseMessagingService -> Option A
Quick Check:
Message handler class = FirebaseMessagingService [OK]
Hint: Use FirebaseMessagingService to receive messages [OK]
Common Mistakes:
Choosing FirebaseDatabase for message handling
Confusing FirebaseAuth with messaging
Using FirebaseStorage instead of messaging service
3. Given the following Kotlin code snippet inside a FirebaseMessagingService subclass, what will be logged when a message is received?
override fun onMessageReceived(remoteMessage: RemoteMessage) {
val title = remoteMessage.notification?.title ?: "No Title"
val body = remoteMessage.notification?.body ?: "No Body"
Log.d("FCM", "Title: $title, Body: $body")
}
medium
A. Title: No Title, Body: No Body if notification is null
B. App crashes if notification is null
C. Title and Body are always empty strings
D. Logs only the body, not the title
Solution
Step 1: Analyze null safety with Elvis operator
The code uses ?: to provide default strings if notification or its fields are null.
Step 2: Understand logging behavior
If notification is null, title and body become "No Title" and "No Body" respectively, so the log shows these defaults.
Final Answer:
Title: No Title, Body: No Body if notification is null -> Option A
Quick Check:
Elvis operator handles nulls = default text logged [OK]
Hint: Elvis operator ?: gives default when null [OK]
Common Mistakes:
Assuming app crashes on null notification
Thinking title/body become empty strings
Believing only body is logged
4. You wrote this code to get the device token for FCM but it never logs the token. What is the error?
FirebaseMessaging.getInstance().token.addOnCompleteListener {
if (!it.isSuccessful) return@addOnCompleteListener
val token = it.result
Log.d("FCM", "Token: $token")
}
medium
A. You need to call addOnSuccessListener instead of addOnCompleteListener
B. You forgot to add internet permission in AndroidManifest.xml
C. You must call getInstance() with context parameter
D. You should use getToken() instead of token property
Solution
Step 1: Check the API for token retrieval
FirebaseMessaging.getInstance().getToken() is the correct method; there is no .token property.
Step 2: Verify other options
Internet permission is needed to run, but the code won't compile due to undefined token property. getInstance() without context works, and addOnCompleteListener is correct.
Final Answer:
You should use getToken() instead of token property -> Option D
Quick Check:
No token property = use getToken() [OK]
Hint: Use getToken() method to fetch FCM token [OK]
Common Mistakes:
Forgetting internet permission
Thinking context is required for getInstance()
Using wrong listener type for token retrieval
5. You want to send a push notification only to devices that have a specific user preference enabled. Which step is essential to implement this targeting correctly?
hard
A. Use FirebaseDatabase to store notifications and query them on the device
B. Send the device token to your server and filter tokens based on user preferences
C. Send notifications to all devices and let the app ignore unwanted ones
D. Use FirebaseAuth to authenticate users before sending notifications
Solution
Step 1: Understand device token role
Device tokens uniquely identify devices to receive push notifications.
Step 2: Implement server-side filtering
Send tokens to your server and filter them by user preferences before sending notifications.
Final Answer:
Send the device token to your server and filter tokens based on user preferences -> Option B
Quick Check:
Token + server filtering = targeted notifications [OK]
Hint: Always send tokens to server for targeted notifications [OK]
Common Mistakes:
Sending notifications to all devices without filtering
Using FirebaseDatabase instead of server filtering
Confusing authentication with notification targeting
Recommended
Ready to prove it?
Pass the test and this pattern moves unknownstrongwhile earning +1 Grip toward your certificate.