Usando la API FCM V1 en Python fácilmente

Dec 05 2022
Hola a todos. Como ya sabe, cuando crea un nuevo proyecto de fcm, no puede usar la API heredada.

Hola a todos. Como ya sabe, cuando crea un nuevo proyecto de fcm, no puede usar la API heredada. Solo tienes que usar la API V1. Y no tiene documentación detallada o artículo en el artículo para configurar esto de una manera breve y conveniente. Entonces, después de luchar mucho y terminar el proyecto con esta nueva API, decidí no usar SDK porque estaba usando la versión JWT que mi proyecto no aceptaba. Así que a partir de ahora, continuaremos con la propia API de forma cruda.

Obtener archivo de configuración

Después de crear su proyecto FCM, vaya a la configuración de su proyecto y elija Cuentas de servicio, luego genere un nuevo par de claves y guárdelo en su plataforma.

Después de descargar el archivo JSON, puede copiarlo y almacenarlo en su entorno, por ejemplo, Vault. Luego, utilícelo para autenticar y obtener tokens de acceso de la API de FCM. Obtienes un token de acceso en los códigos.

creds   = {} # Your credentials dict that you installed above
scopes  = ['https://www.googleapis.com/auth/firebase.messaging']
cred_service = ServiceAccountCredentials.from_json_keyfile_dict(creds, scopes)
access_token = cred_service.get_access_token().access_token

headers = {
        'access_token_auth':'true',
        'Authorization':f'Bearer {access_token}'
    }
# For subscribing to topic

response = requests.post('https://iid.googleapis.com/iid/v1:batchAdd',headers=headers,
    json={
        "to":f"/topics/your_topic",
        "registration_tokens":[user_fcm_token]
    }
)

# For unsubscribing from topic

response = requests.post('https://iid.googleapis.com/iid/v1:batchRemove',headers=headers,
      json={
          "to":f"/topics/your_topic",
          "registration_tokens":[user_fcm_token]
      }
  )

# project_id is in credentials file you have downloaded

base_url = f'https://fcm.googleapis.com/v1/projects/{project_id}/messages:send'
headers = {'Authorization': 'Bearer ' + access_token}
data = {
    "message": {
        "topic": f'user_push_{topic}',
        "notification": {
            "title": title,
            "body": description
        },
        "webpush": {
        "fcm_options": {
            "link": url
            }
        },
        "data": {}
        }
}
resp = requests.post(base_url, json=data, headers=headers)