Utilizzo semplice dell'API FCM V1 in Python

Dec 05 2022
Ciao a tutti. Come già saprai, quando crei un nuovo progetto fcm non puoi utilizzare l'API legacy.

Ciao a tutti. Come già saprai, quando crei un nuovo progetto fcm non puoi utilizzare l'API legacy. Devi solo utilizzare l'API V1. E non ha una documentazione dettagliata o un articolo nell'articolo per configurarlo in modo breve e conveniente. Quindi, dopo aver lottato molto e aver terminato il progetto con questa nuova API, ho deciso di non utilizzare SDK perché utilizzava la versione JWT che il mio progetto non accettava. Quindi, d'ora in poi, continueremo con l'API stessa in modo grezzo.

Ottieni il file di configurazione

Dopo aver creato il tuo progetto FCM, vai alle impostazioni del tuo progetto e scegli Account di servizio, quindi genera una nuova coppia di chiavi e memorizzala nella tua piattaforma.

Dopo aver scaricato il file JSON, puoi copiarlo e archiviarlo nel tuo ambiente, ad esempio Vault. Quindi usalo per autenticare e ottenere token di accesso dall'API FCM. Ottieni un token di accesso nei codici.

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)