------------------------- | Push Notification Demo | ------------------------- | | | Latest message: | | | | [No messages yet] | | | |-----------------------| | [Request Permission] | |-----------------------|
Push notifications with FCM in React Native - Mini App: Build & Ship
import React, { useState, useEffect } from 'react'; import { View, Text, Button, StyleSheet } from 'react-native'; import messaging from '@react-native-firebase/messaging'; export default function PushNotificationDemo() { const [message, setMessage] = useState('No messages yet'); useEffect(() => { // TODO: Request permission and listen for messages }, []); const requestPermission = async () => { // TODO: Request notification permission }; return ( <View style={styles.container}> <Text style={styles.title}>Push Notification Demo</Text> <Text style={styles.label}>Latest message:</Text> <Text style={styles.message}>{message}</Text> <Button title="Request Permission" onPress={requestPermission} /> </View> ); } const styles = StyleSheet.create({ container: { flex: 1, justifyContent: 'center', alignItems: 'center', padding: 20 }, title: { fontSize: 24, marginBottom: 20 }, label: { fontSize: 18, marginBottom: 10 }, message: { fontSize: 16, marginBottom: 30, fontStyle: 'italic' } });
import React, { useState, useEffect } from 'react'; import { View, Text, Button, StyleSheet, Alert } from 'react-native'; import messaging from '@react-native-firebase/messaging'; export default function PushNotificationDemo() { const [message, setMessage] = useState('No messages yet'); useEffect(() => { async function setupFCM() { const authStatus = await messaging().requestPermission(); const enabled = authStatus === messaging.AuthorizationStatus.AUTHORIZED || authStatus === messaging.AuthorizationStatus.PROVISIONAL; if (enabled) { const token = await messaging().getToken(); console.log('FCM Token:', token); } else { Alert.alert('Permission denied', 'Push notifications permission was not granted'); } } setupFCM(); const unsubscribe = messaging().onMessage(async remoteMessage => { if (remoteMessage.notification) { setMessage(remoteMessage.notification.title + ': ' + remoteMessage.notification.body); } }); return unsubscribe; }, []); const requestPermission = async () => { try { const authStatus = await messaging().requestPermission(); if (authStatus === messaging.AuthorizationStatus.AUTHORIZED || authStatus === messaging.AuthorizationStatus.PROVISIONAL) { Alert.alert('Permission granted', 'You will receive push notifications'); } else { Alert.alert('Permission denied', 'Push notifications permission was not granted'); } } catch (error) { Alert.alert('Error', 'Failed to request permission'); } }; return ( <View style={styles.container}> <Text style={styles.title}>Push Notification Demo</Text> <Text style={styles.label}>Latest message:</Text> <Text style={styles.message}>{message}</Text> <Button title="Request Permission" onPress={requestPermission} accessibilityLabel="Request push notification permission button" /> </View> ); } const styles = StyleSheet.create({ container: { flex: 1, justifyContent: 'center', alignItems: 'center', padding: 20 }, title: { fontSize: 24, marginBottom: 20 }, label: { fontSize: 18, marginBottom: 10 }, message: { fontSize: 16, marginBottom: 30, fontStyle: 'italic' } });
This app uses the @react-native-firebase/messaging library to handle push notifications with Firebase Cloud Messaging (FCM). In the useEffect hook, it requests notification permission from the user and obtains the FCM token if permission is granted. It also sets up a listener with messaging().onMessage to receive notifications when the app is in the foreground and updates the displayed message accordingly.
The Request Permission button allows the user to manually request notification permission again if needed. Alerts inform the user about permission status. The UI shows the latest notification message or a placeholder if none received yet.
This simple setup helps beginners understand how to integrate push notifications in React Native apps using FCM.
------------------------- | Push Notification Demo | ------------------------- | | | Latest message: | | | | New Offer: 50% off! | | | |-----------------------| | [Request Permission] | |-----------------------|
Practice
Solution
Step 1: Understand FCM's role
FCM is a service designed to send push notifications to apps.Step 2: Compare options
Only To send push notifications to the app users describes sending push notifications, which is FCM's main purpose.Final Answer:
To send push notifications to the app users -> Option CQuick Check:
FCM = Push notifications [OK]
- Confusing FCM with local data storage
- Thinking FCM manages UI or navigation
- Assuming FCM is for database operations
Solution
Step 1: Identify token retrieval method
The method to get the device token is messaging().getToken().Step 2: Eliminate other options
requestPermission() asks user permission, sendMessage() sends messages, subscribeToTopic() subscribes to topics.Final Answer:
messaging().getToken() -> Option BQuick Check:
Get token = getToken() [OK]
- Using requestPermission() to get token
- Confusing sendMessage() with token retrieval
- Mixing subscribeToTopic() with token methods
import messaging from '@react-native-firebase/messaging';
async function getToken() {
const token = await messaging().getToken();
console.log(token);
}
getToken();Solution
Step 1: Analyze async function behavior
The function awaits messaging().getToken(), which returns the device token string.Step 2: Understand console.log output
It logs the token string, not undefined or error, assuming messaging is imported correctly.Final Answer:
Logs the device's FCM token string to the console -> Option AQuick Check:
getToken() returns token string [OK]
- Forgetting await causing Promise logged
- Assuming getToken() returns undefined
- Not importing messaging correctly
import messaging from '@react-native-firebase/messaging'; messaging().requestPermission();What is the likely problem?
Solution
Step 1: Check async method usage
requestPermission() returns a Promise and should be awaited to complete permission request.Step 2: Identify missing await effect
Without await, the permission request may not finish before next steps, causing unexpected behavior.Final Answer:
You forgot to await the requestPermission() call -> Option DQuick Check:
Await async calls like requestPermission() [OK]
- Not awaiting async permission calls
- Thinking requestPermission() is invalid
- Calling getToken() before permission
Solution
Step 1: Check permission before token
const authStatus = await messaging().requestPermission(); if (authStatus === messaging.AuthorizationStatus.AUTHORIZED) { const token = await messaging().getToken(); console.log(token); } requests permission and checks if authorized before getting token.Step 2: Verify async and order correctness
const authStatus = await messaging().requestPermission(); if (authStatus === messaging.AuthorizationStatus.AUTHORIZED) { const token = await messaging().getToken(); console.log(token); } awaits both calls and uses correct AuthorizationStatus check.Final Answer:
const authStatus = await messaging().requestPermission(); if (authStatus === messaging.AuthorizationStatus.AUTHORIZED) { const token = await messaging().getToken(); console.log(token); } -> Option AQuick Check:
Check permission first, then get token [OK]
- Getting token before permission
- Not awaiting async calls
- Ignoring authorization status check
Ready to prove it?
Pass the test and this pattern moves unknown
