Простое использование API FCM V1 в Python

Dec 05 2022
Всем привет. Как вы знаете, когда вы создаете новый проект fcm, вы не можете использовать устаревший API.

Всем привет. Как вы знаете, когда вы создаете новый проект fcm, вы не можете использовать устаревший API. Вам нужно использовать только V1 API. И у него нет подробной документации или статьи в статье, чтобы настроить это коротким и удобным способом. Поэтому, после долгих мучений и завершения проекта с этим новым API, я решил не использовать SDK, потому что он использовал версию JWT, которую мой проект не принимал. Итак, с этого момента мы продолжим работу с самим API в чистом виде.

Получить файл конфигурации

После создания проекта FCM перейдите в настройки проекта и выберите «Учетные записи службы», затем сгенерируйте новую пару ключей и сохраните ее на своей платформе.

После загрузки файла JSON вы можете скопировать и сохранить его в своей среде, например в хранилище. Затем используйте его для аутентификации и получения токенов доступа из FCM API. Вы получаете токен доступа в кодах.

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)