@@ -252,6 +252,7 @@ class _MessagingService(object):
252
252
IID_URL = 'https://iid.googleapis.com'
253
253
IID_HEADERS = {'access_token_auth' : 'true' }
254
254
JSON_ENCODER = _messaging_utils .MessageEncoder ()
255
+ BATCH_ENCODER = _messaging_utils .BatchMessageEncoder ()
255
256
256
257
BATCH_PART_BOUNDARY = '__END_OF_PART__'
257
258
@@ -317,7 +318,13 @@ def send(self, message, dry_run=False):
317
318
return resp ['name' ]
318
319
319
320
def sendAll (self , messages , dry_run = False ):
320
- data = self ._batch_message_data (messages , dry_run )
321
+ message_data = [self ._message_data (message , dry_run ) for message in messages ]
322
+ data = _MessagingService .BATCH_ENCODER .encode (
323
+ url = self ._fcm_url ,
324
+ headers = self ._fcm_headers ,
325
+ boundary = _MessagingService .BATCH_PART_BOUNDARY ,
326
+ message_data = message_data
327
+ )
321
328
headers = {
322
329
'Content-Type' : 'multipart/mixed; boundary={}' .format (_MessagingService .BATCH_PART_BOUNDARY )
323
330
}
@@ -386,33 +393,6 @@ def _message_data(self, message, dry_run):
386
393
data ['validate_only' ] = True
387
394
return data
388
395
389
- def _batch_message_data (self , messages , dry_run ):
390
- parts = [self ._batch_request_part (request , dry_run , _MessagingService .BATCH_PART_BOUNDARY , index )\
391
- for (index , request ) in enumerate (messages )]
392
- return '{}--{}--\r \n ' .format ('' .join (parts ), _MessagingService .BATCH_PART_BOUNDARY )
393
-
394
- def _batch_request_part (self , request , dry_run , boundary , index ):
395
- data = self ._batch_request_part_data (request , dry_run )
396
- part = '--{}\r \n ' .format (boundary )
397
- part += 'Content-Length: {}\r \n ' .format (len (data ))
398
- part += 'Content-Type: application/http\r \n '
399
- part += 'content-id: {}\r \n ' .format (index + 1 )
400
- part += 'content-transfer-encoding: binary\r \n '
401
- part += '\r \n '
402
- part += '{}\r \n ' .format (data )
403
- return part
404
-
405
- def _batch_request_part_data (self , request , dry_run ):
406
- body = json .dumps (self ._message_data (request , dry_run ))
407
- data = 'POST {} HTTP/1.1\r \n ' .format (self ._fcm_url )
408
- data += 'Content-Length: {}\r \n ' .format (len (body ))
409
- data += 'Content-Type: application/json; charset=UTF-8\r \n '
410
- data += '\r \n ' .join (['{}: {}' .format (k , v ) for k , v in self ._fcm_headers .items ()])
411
- data += '\r \n \r \n '
412
- data += body
413
- return data
414
-
415
-
416
396
def _handle_fcm_error (self , error ):
417
397
"""Handles errors received from the FCM API."""
418
398
data = {}
0 commit comments