Python'da FCM V1 API'yi kolayca kullanma

Dec 05 2022
Selam millet. Artık bildiğiniz gibi, yeni bir fcm projesi oluşturduğunuzda eski API'yi kullanamazsınız.

Selam millet. Artık bildiğiniz gibi, yeni bir fcm projesi oluşturduğunuzda eski API'yi kullanamazsınız. Yalnızca V1 API kullanmanız gerekir. Ve bunu kısa ve kolay bir şekilde ayarlamak için makalede ayrıntılı bir belge veya makale yoktur. Bu yüzden çok uğraştıktan ve projeyi bu yeni API ile bitirdikten sonra, projemin kabul etmediği JWT sürümünü kullandığı için SDK kullanmamaya karar verdim. Yani bundan sonra API'nin kendisi ile ham bir şekilde devam edeceğiz.

Yapılandırma Dosyasını Alın

FCM Projenizi oluşturduktan sonra, Proje ayarlarınıza gidin ve Hizmet hesapları'nı seçin, ardından yeni anahtar çifti oluşturun ve bunu platformunuzda saklayın.

JSON dosyasını indirdikten sonra kopyalayıp kendi ortamınızda saklayabilirsiniz, örneğin Vault. Ardından, kimlik doğrulaması yapmak ve FCM API'sinden erişim belirteçleri almak için kullanın. Kodlarda bir erişim belirteci alırsınız.

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)