Łatwe korzystanie z interfejsu API FCM V1 w Pythonie

Dec 05 2022
Hej wszystkim. Jak już wiesz, podczas tworzenia nowego projektu fcm nie możesz używać starszego interfejsu API.

Hej wszystkim. Jak już wiesz, podczas tworzenia nowego projektu fcm nie możesz używać starszego interfejsu API. Musisz tylko użyć API V1. I nie ma szczegółowej dokumentacji ani artykułu w artykule, aby skonfigurować to w krótki i wygodny sposób. Po wielu zmaganiach i ukończeniu projektu z tym nowym interfejsem API zdecydowałem się nie używać SDK, ponieważ korzystał on z wersji JWT, której mój projekt nie akceptował. Więc od teraz będziemy kontynuować samo API w surowy sposób.

Pobierz plik konfiguracyjny

Po utworzeniu projektu FCM przejdź do ustawień projektu i wybierz konta usług, a następnie wygeneruj nową parę kluczy i zapisz ją na swojej platformie.

Po pobraniu pliku JSON możesz go skopiować i przechowywać w swoim środowisku np. Vault. Następnie użyj go do uwierzytelnienia i uzyskania tokenów dostępu z interfejsu API FCM. W kodach otrzymujesz token dostępu.

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)