Today we are going to learn how we can send a message to the Firebase Cloud Messaging endpoint using Python. (https://firebase.google.com/docs/cloud-messaging/http-server-ref?hl=es-419)
For this, we need the Google endpoint:
POST https://fcm.googleapis.com/v1/projects/myproject-b5ae1/messages:send
And previously we have to generate a token in our application, for this we go to Firebase, select our project, and click on Project Settings:
Inside here, we look for Cloud Messaging
Now go to the Firebase Cloud Messaging (V1) API section
Click on Manage Service Accounts.
Go to your account and click on the 3-dot context menu:
and choose Manage Keys:
Now click on Add Key > Create new key:
Choose type JSON and click on create:
Save this JSON in the root of the project and create a file named send_push.py
-app.json -send_push.py
Now we are going to create the code send_push.py
import json import requests import jwt from datetime import datetime, timedelta JSON_DIR = "app.json" def send_cloud_message(title_send, message_send, token_send): access_token = get_access_token() project_id = get_data_json()["project_id"] url = f'https://fcm.googleapis.com/v1/projects/{project_id}/messages:send' data = { 'message': { 'token': token_send, 'notification': { 'title': title_send, 'body': message_send, }, 'data': { 'key_1': 'Value for key_1', 'key_2': 'Value for key_2', }, }, } headers = { 'Content-type': 'application/json', 'Authorization': 'Bearer ' + access_token, } response = requests.post(url, json=data, headers=headers) # Handle the response as needed # You can print the result for debugging print(response.text) def get_access_token(): private_key = get_data_json()["private_key"] # Replace with your private key cliend_id = get_data_json()["client_id"] # Replace with your client email address now = datetime.utcnow() expiration_time = now + timedelta(hours=1) jwt_payload = { 'iss': cliend_id, 'scope': 'https://www.googleapis.com/auth/firebase.messaging', 'aud': 'https://www.googleapis.com/oauth2/v4/token', 'exp': expiration_time, 'iat': now, } encoded_jwt = jwt.encode(jwt_payload, private_key, algorithm='RS256') data = { 'grant_type': 'urn:ietf:params:oauth:grant-type:jwt-bearer', 'assertion': encoded_jwt, } response = requests.post('https://www.googleapis.com/oauth2/v4/token', data=data) response_data = response.json() return response_data['access_token'] def get_data_json(): with open(JSON_DIR) as json_file: data = json.load(json_file) return data
You will need to change JSON_DIR = “app.json” to the path of your JSON.
Additionally, you need to install jwt:
pip install PyJWT
To send a message, you can use the following:
send_cloud_message('Message Title', 'Message Body', 'device_token')
For ‘device_token’, you’ll need to use a valid device token. Here’s how you can obtain it: https://devcodelight.com/?p=7128