Skip to content

Commit 3da3b5a

Browse files
authored
Added X-Firebase-Client header to FCM API calls (#278)
* Added X-Firebase-Client header to FCM API calls * Using the pre-calculated version string
1 parent 18c2395 commit 3da3b5a

File tree

2 files changed

+10
-1
lines changed

2 files changed

+10
-1
lines changed

firebase_admin/messaging.py

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717
import requests
1818
import six
1919

20+
import firebase_admin
2021
from firebase_admin import _http_client
2122
from firebase_admin import _messaging_utils
2223
from firebase_admin import _utils
@@ -235,6 +236,7 @@ def __init__(self, app):
235236
self._fcm_url = _MessagingService.FCM_URL.format(project_id)
236237
self._client = _http_client.JsonHttpClient(credential=app.credential.get_credential())
237238
self._timeout = app.options.get('httpTimeout')
239+
self._client_version = 'fire-admin-python/{0}'.format(firebase_admin.__version__)
238240

239241
@classmethod
240242
def encode_message(cls, message):
@@ -247,7 +249,10 @@ def send(self, message, dry_run=False):
247249
if dry_run:
248250
data['validate_only'] = True
249251
try:
250-
headers = {'X-GOOG-API-FORMAT-VERSION': '2'}
252+
headers = {
253+
'X-GOOG-API-FORMAT-VERSION': '2',
254+
'X-FIREBASE-CLIENT': self._client_version,
255+
}
251256
resp = self._client.body(
252257
'post', url=self._fcm_url, headers=headers, json=data, timeout=self._timeout)
253258
except requests.exceptions.RequestException as error:

tests/test_messaging.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1165,6 +1165,7 @@ def test_topic_management_timeout(self):
11651165
class TestSend(object):
11661166

11671167
_DEFAULT_RESPONSE = json.dumps({'name': 'message-id'})
1168+
_CLIENT_VERSION = 'fire-admin-python/{0}'.format(firebase_admin.__version__)
11681169

11691170
@classmethod
11701171
def setup_class(cls):
@@ -1210,6 +1211,7 @@ def test_send_dry_run(self):
12101211
assert recorder[0].method == 'POST'
12111212
assert recorder[0].url == self._get_url('explicit-project-id')
12121213
assert recorder[0].headers['X-GOOG-API-FORMAT-VERSION'] == '2'
1214+
assert recorder[0].headers['X-FIREBASE-CLIENT'] == self._CLIENT_VERSION
12131215
body = {
12141216
'message': messaging._MessagingService.encode_message(msg),
12151217
'validate_only': True,
@@ -1225,6 +1227,7 @@ def test_send(self):
12251227
assert recorder[0].method == 'POST'
12261228
assert recorder[0].url == self._get_url('explicit-project-id')
12271229
assert recorder[0].headers['X-GOOG-API-FORMAT-VERSION'] == '2'
1230+
assert recorder[0].headers['X-FIREBASE-CLIENT'] == self._CLIENT_VERSION
12281231
assert recorder[0]._extra_kwargs['timeout'] is None
12291232
body = {'message': messaging._MessagingService.encode_message(msg)}
12301233
assert json.loads(recorder[0].body.decode()) == body
@@ -1242,6 +1245,7 @@ def test_send_error(self, status):
12421245
assert recorder[0].method == 'POST'
12431246
assert recorder[0].url == self._get_url('explicit-project-id')
12441247
assert recorder[0].headers['X-GOOG-API-FORMAT-VERSION'] == '2'
1248+
assert recorder[0].headers['X-FIREBASE-CLIENT'] == self._CLIENT_VERSION
12451249
body = {'message': messaging._MessagingService.JSON_ENCODER.default(msg)}
12461250
assert json.loads(recorder[0].body.decode()) == body
12471251

0 commit comments

Comments
 (0)