DEV Community

Hanry Jones
Hanry Jones

Posted on

How to Implement Push Notifications in Python for Order Updates in a Food Delivery App

Push notifications have become a critical component of modern applications, especially for food delivery services. Whether it’s notifying customers about the status of their order or updating delivery personnel, push notifications keep users engaged and informed in real-time. In this blog post, we will walk you through how to implement push notifications for order updates in your food delivery app using Python and Firebase Cloud Messaging (FCM).

What Are Push Notifications?

Push notifications are messages that are sent to users' devices (mobile phones, web browsers, etc.) to inform them about important updates or information. In the context of a food delivery app, push notifications can be used for:

  • Order confirmation (when a customer places an order)
  • Order status updates (when the order is being prepared, dispatched, or delivered)
  • Delivery updates (estimated arrival times, promotions, etc.)

Why Use Firebase Cloud Messaging (FCM)?

Firebase Cloud Messaging is a free service provided by Google that allows you to send notifications to Android, iOS, and web applications. It is widely adopted because of its simplicity, scalability, and integration with Firebase services, which are essential for modern app development. FCM enables developers to send both targeted and broadcast messages with minimal effort.

Steps to Implement Push Notifications in Python for Order Updates

In this tutorial, we’ll use Python for the backend and Firebase for sending push notifications. We will also make use of Firebase Admin SDK, a Python library that simplifies the process of interacting with Firebase services.

Step 1: Set Up Firebase Project

To send push notifications using FCM, you first need to set up a Firebase project.

1.1 Create a Firebase Project

  • Go to the Firebase Console.
  • Click on "Add Project" and follow the steps to create a new project.

1.2 Generate Firebase Cloud Messaging Credentials

  • Navigate to the Cloud Messaging section in the Firebase Console.
  • Under Project settings, go to the Cloud Messaging tab.
  • Here, you’ll find the Server Key and Sender ID, which are required for authentication when sending notifications. Keep these values safe.

Step 2: Install Firebase Admin SDK in Python

To integrate FCM with your Python backend, you need the Firebase Admin SDK.

Open your terminal and install the Firebase Admin SDK by running:

pip install firebase-admin
Enter fullscreen mode Exit fullscreen mode

Step 3: Initialize Firebase in Your Python Backend

Once the library is installed, you need to initialize it with your Firebase credentials.

3.1 Download Firebase Service Account Key

  • In the Firebase Console, go to Project SettingsService Accounts.
  • Click on Generate New Private Key to download a .json file containing your service account credentials.

3.2 Initialize Firebase in Python

Create a Python file (e.g., firebase_init.py) and initialize the Firebase Admin SDK as follows:

import firebase_admin
from firebase_admin import credentials

# Path to your Firebase service account key
cred = credentials.Certificate('path/to/your/firebase-service-account.json')

# Initialize Firebase Admin SDK
firebase_admin.initialize_app(cred)
Enter fullscreen mode Exit fullscreen mode

Step 4: Send Push Notifications Using FCM

After setting up Firebase, you can send push notifications to users when their food order updates.

4.1 Prepare Your Notification Data

In a typical food delivery app, you may want to notify the customer when their order is confirmed, prepared, dispatched, or delivered. You’ll need to send the FCM token for the device you wish to notify. This token is obtained from the client-side of your app.

For this example, we will send a notification about an order status update.

4.2 Code to Send Push Notifications

Below is the Python code to send a push notification to a device.

from firebase_admin import messaging

def send_push_notification(device_token, title, body):
    try:
        # Construct the message
        message = messaging.Message(
            notification=messaging.Notification(
                title=title,
                body=body,
            ),
            token=device_token,
        )

        # Send the message
        response = messaging.send(message)
        print('Successfully sent message:', response)
        return response
    except Exception as e:
        print('Error sending message:', e)
Enter fullscreen mode Exit fullscreen mode

4.3 Example Notification for Order Update

When an order is updated, we can send a push notification to the customer’s device. Below is an example of sending a notification when the order status changes to “Out for Delivery”.

# Example usage
device_token = "user_device_token"  # This token is obtained from the client-side app
order_status = "Your order is out for delivery!"
send_push_notification(device_token, "Order Update", order_status)
Enter fullscreen mode Exit fullscreen mode

Step 5: Handling Notifications on the Client Side

Now that you can send notifications from the server side, let's move to the client side (iOS, Android, or web) where the notifications will be received.

5.1 Android

To receive push notifications on an Android device, follow these steps:

  • Add the Firebase SDK to your Android project. (Instructions can be found in the Firebase Android Setup guide).
  • Use the Firebase Messaging library to handle incoming notifications.

5.2 iOS

For iOS, follow the Firebase iOS Setup Guide to integrate Firebase and handle incoming notifications using APNs (Apple Push Notification Service).

5.3 Web

For a web application, use the Firebase JavaScript SDK to handle push notifications. Refer to the Firebase Web Setup guide.

Step 6: Triggering Notifications Based on Order Status

To make this process seamless, you’ll want to trigger notifications automatically based on the order status updates in your backend.

For example, once an order is marked as "Out for Delivery," you can automatically send a notification to the customer. This can be done using an event listener or a task scheduler in your Python backend.

def update_order_status(order_id, new_status):
    # Update the order status in the database (e.g., SQL, NoSQL)
    # Let's assume we retrieve the customer device token from the database
    customer_device_token = get_customer_device_token(order_id)

    # Send push notification
    send_push_notification(customer_device_token, f"Order #{order_id} Update", new_status)
Enter fullscreen mode Exit fullscreen mode

Step 7: Testing the Notifications

Once everything is set up, test the system by placing a test order and triggering different order status updates. Ensure the notifications are being received on the client-side and that they display the correct information.

Conclusion

Implementing push notifications for order updates in a food delivery app is a great way to keep users engaged and informed in real-time. By integrating Firebase Cloud Messaging (FCM) with your Python backend, you can send notifications to users on Android, iOS, and web platforms. This process involves setting up Firebase, initializing the Admin SDK, and sending notification messages to devices based on user actions or order status updates.

Push notifications improve the user experience, enhance customer retention, and keep customers updated on the status of their food order, helping your food delivery service stand out in a competitive market.

Top comments (0)