Usando a API FCM V1 em Python facilmente

Dec 05 2022
Olá a todos. Como você sabe mais, quando cria um novo projeto fcm, não pode usar a API herdada.

Olá a todos. Como você sabe mais, quando cria um novo projeto fcm, não pode usar a API herdada. Você só precisa usar a API V1. E não possui documentação detalhada ou artigo no artigo para configurar isso de maneira curta e conveniente. Então depois de lutar muito e terminar o projeto com essa nova API, resolvi não usar SDK porque estava usando a versão JWT que meu projeto não aceitava. Então, a partir de agora, continuaremos com a própria API de forma bruta.

Obter arquivo de configuração

Depois de criar seu projeto FCM, vá para as configurações do projeto e escolha contas de serviço, gere um novo par de chaves e armazene-o em sua plataforma.

Depois de baixar o arquivo JSON, você pode copiá-lo e armazená-lo em seu ambiente, por exemplo, Vault. Em seguida, use-o para autenticar e obter tokens de acesso da API do FCM. Você recebe um token de acesso nos 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)