Python で FCM V1 API を簡単に使用する

Dec 05 2022
こんにちは、みなさん。ご存知のように、新しい fcm プロジェクトを作成すると、レガシー API を使用できなくなります。

こんにちは、みなさん。ご存知のように、新しい fcm プロジェクトを作成すると、レガシー API を使用できなくなります。V1 API のみを使用する必要があります。また、記事には、これを短く便利な方法で設定するための詳細なドキュメントや記事はありません。そのため、苦労してこの新しい API でプロジェクトを終了した後、SDK を使用しないことにしました。これは、私のプロジェクトが受け入れない JWT バージョンを使用していたためです。なのでこれからはAPI自体を生のまま進めていきます。

設定ファイルを取得

FCM プロジェクトを作成したら、プロジェクト設定に移動してサービス アカウントを選択し、新しいキー ペアを生成してプラットフォームに保存します。

JSON ファイルをダウンロードしたら、Vault などの環境にコピーして保存できます。次に、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)