From 88565d4f086088ba4e1a5bf74660bba761237c8f Mon Sep 17 00:00:00 2001 From: Cyrille Hemidy Date: Sat, 29 Jun 2019 00:06:28 +0200 Subject: [PATCH 1/3] add analytics_label in FcmOptions --- firebase_admin/_messaging_utils.py | 42 +++++++++++++++++++++++++++--- firebase_admin/messaging.py | 7 +++++ 2 files changed, 45 insertions(+), 4 deletions(-) diff --git a/firebase_admin/_messaging_utils.py b/firebase_admin/_messaging_utils.py index 17067f175..590fb0054 100644 --- a/firebase_admin/_messaging_utils.py +++ b/firebase_admin/_messaging_utils.py @@ -36,6 +36,7 @@ class Message(object): android: An instance of ``messaging.AndroidConfig`` (optional). webpush: An instance of ``messaging.WebpushConfig`` (optional). apns: An instance of ``messaging.ApnsConfig`` (optional). + fcm_options: An instance of ``messaging.FcmOptions`` (optional). token: The registration token of the device to which the message should be sent (optional). topic: Name of the FCM topic to which the message should be sent (optional). Topic name may contain the ``/topics/`` prefix. @@ -43,12 +44,13 @@ class Message(object): """ def __init__(self, data=None, notification=None, android=None, webpush=None, apns=None, - token=None, topic=None, condition=None): + fcm_options=None, token=None, topic=None, condition=None): self.data = data self.notification = notification self.android = android self.webpush = webpush self.apns = apns + self.fcm_options = fcm_options self.token = token self.topic = topic self.condition = condition @@ -65,8 +67,10 @@ class MulticastMessage(object): android: An instance of ``messaging.AndroidConfig`` (optional). webpush: An instance of ``messaging.WebpushConfig`` (optional). apns: An instance of ``messaging.ApnsConfig`` (optional). + fcm_options: An instance of ``messaging.FcmOptions`` (optional). """ - def __init__(self, tokens, data=None, notification=None, android=None, webpush=None, apns=None): + def __init__(self, tokens, data=None, notification=None, android=None, webpush=None, apns=None, + fcm_options=None): _Validators.check_string_list('MulticastMessage.tokens', tokens) if len(tokens) > 100: raise ValueError('MulticastMessage.tokens must not contain more than 100 tokens.') @@ -76,6 +80,7 @@ def __init__(self, tokens, data=None, notification=None, android=None, webpush=N self.android = android self.webpush = webpush self.apns = apns + self.fcm_options = fcm_options class Notification(object): @@ -107,16 +112,18 @@ class AndroidConfig(object): data: A dictionary of data fields (optional). All keys and values in the dictionary must be strings. When specified, overrides any data fields set via ``Message.data``. notification: A ``messaging.AndroidNotification`` to be included in the message (optional). + fcm_options: A ``messaging.AndroidFcmOptions`` to be included in the message (optional). """ def __init__(self, collapse_key=None, priority=None, ttl=None, restricted_package_name=None, - data=None, notification=None): + data=None, notification=None, fcm_options=None): self.collapse_key = collapse_key self.priority = priority self.ttl = ttl self.restricted_package_name = restricted_package_name self.data = data self.notification = notification + self.fcm_options = fcm_options class AndroidNotification(object): @@ -165,6 +172,18 @@ def __init__(self, title=None, body=None, icon=None, color=None, sound=None, tag self.channel_id = channel_id +class AndroidFcmOptions(object): + """Options for features provided by the FCM SDK for Android. + + Args: + analytics_label: contains additional options for features provided by the FCM Android SDK + (optional). + """ + + def __init__(self, analytics_label=None): + self.analytics_label = analytics_label + + class WebpushConfig(object): """Webpush-specific options that can be included in a message. @@ -279,14 +298,17 @@ class APNSConfig(object): Args: headers: A dictionary of headers (optional). payload: A ``messaging.APNSPayload`` to be included in the message (optional). + fcm_options: A ``messaging.APNSFcmOptions`` instance to be included in the message + (optional). .. _APNS Documentation: https://developer.apple.com/library/content/documentation\ /NetworkingInternet/Conceptual/RemoteNotificationsPG/CommunicatingwithAPNs.html """ - def __init__(self, headers=None, payload=None): + def __init__(self, headers=None, payload=None, fcm_options=None): self.headers = headers self.payload = payload + self.fcm_options = fcm_options class APNSPayload(object): @@ -387,6 +409,18 @@ def __init__(self, title=None, subtitle=None, body=None, loc_key=None, loc_args= self.launch_image = launch_image +class APNSFcmOptions(object): + """Options for features provided by the FCM SDK for iOS. + + Args: + analytics_label: contains additional options for features provided by the FCM Android SDK + (optional). + """ + + def __init__(self, analytics_label=None): + self.analytics_label = analytics_label + + class _Validators(object): """A collection of data validation utilities. diff --git a/firebase_admin/messaging.py b/firebase_admin/messaging.py index 35d9e4ccd..d5c9510f2 100644 --- a/firebase_admin/messaging.py +++ b/firebase_admin/messaging.py @@ -33,8 +33,10 @@ __all__ = [ 'AndroidConfig', + 'AndroidFcmOptions', 'AndroidNotification', 'APNSConfig', + 'APNSFcmOptions', 'APNSPayload', 'ApiCallError', 'Aps', @@ -42,6 +44,7 @@ 'BatchResponse', 'CriticalSound', 'ErrorInfo', + 'FcmOptions', 'Message', 'MulticastMessage', 'Notification', @@ -61,12 +64,15 @@ AndroidConfig = _messaging_utils.AndroidConfig +AndroidFcmOptions = _messaging_utils.AndroidFcmOptions AndroidNotification = _messaging_utils.AndroidNotification APNSConfig = _messaging_utils.APNSConfig +APNSFcmOptions = _messaging_utils.APNSFcmOptions APNSPayload = _messaging_utils.APNSPayload Aps = _messaging_utils.Aps ApsAlert = _messaging_utils.ApsAlert CriticalSound = _messaging_utils.CriticalSound +FcmOptions = _messaging_utils.FcmOptions Message = _messaging_utils.Message MulticastMessage = _messaging_utils.MulticastMessage Notification = _messaging_utils.Notification @@ -145,6 +151,7 @@ def send_multicast(multicast_message, dry_run=False, app=None): android=multicast_message.android, webpush=multicast_message.webpush, apns=multicast_message.apns, + fcmOptions=multicast_message.fcmOptions, token=token ) for token in multicast_message.tokens] return _get_messaging_service(app).send_all(messages, dry_run) From d245452f9213c8a2c0352b2c2b2320d4f16ce645 Mon Sep 17 00:00:00 2001 From: Cyrille Hemidy Date: Sat, 29 Jun 2019 00:21:35 +0200 Subject: [PATCH 2/3] fix errors --- firebase_admin/_messaging_utils.py | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/firebase_admin/_messaging_utils.py b/firebase_admin/_messaging_utils.py index 590fb0054..514fdc509 100644 --- a/firebase_admin/_messaging_utils.py +++ b/firebase_admin/_messaging_utils.py @@ -413,13 +413,22 @@ class APNSFcmOptions(object): """Options for features provided by the FCM SDK for iOS. Args: - analytics_label: contains additional options for features provided by the FCM Android SDK + analytics_label: contains additional options for features provided by the FCM iOS SDK (optional). """ def __init__(self, analytics_label=None): self.analytics_label = analytics_label +class FcmOptions(object): + """Options for features provided by SDK. + + Args: + analytics_label: contains additional options to use across all platforms (optional). + """ + + def __init__(self, analytics_label=None): + self.analytics_label = analytics_label class _Validators(object): """A collection of data validation utilities. @@ -587,7 +596,7 @@ def encode_webpush(cls, webpush): 'headers': _Validators.check_string_dict( 'WebpushConfig.headers', webpush.headers), 'notification': cls.encode_webpush_notification(webpush.notification), - 'fcmOptions': cls.encode_webpush_fcm_options(webpush.fcm_options), + 'fcm_options': cls.encode_webpush_fcm_options(webpush.fcm_options), } return cls.remove_null_values(result) From 4071231aa9419c5f8336d0712824224780169241 Mon Sep 17 00:00:00 2001 From: Cyrille Hemidy Date: Sat, 29 Jun 2019 00:21:35 +0200 Subject: [PATCH 3/3] fix errors --- firebase_admin/_messaging_utils.py | 13 +++++++++++-- firebase_admin/messaging.py | 2 +- 2 files changed, 12 insertions(+), 3 deletions(-) diff --git a/firebase_admin/_messaging_utils.py b/firebase_admin/_messaging_utils.py index 590fb0054..514fdc509 100644 --- a/firebase_admin/_messaging_utils.py +++ b/firebase_admin/_messaging_utils.py @@ -413,13 +413,22 @@ class APNSFcmOptions(object): """Options for features provided by the FCM SDK for iOS. Args: - analytics_label: contains additional options for features provided by the FCM Android SDK + analytics_label: contains additional options for features provided by the FCM iOS SDK (optional). """ def __init__(self, analytics_label=None): self.analytics_label = analytics_label +class FcmOptions(object): + """Options for features provided by SDK. + + Args: + analytics_label: contains additional options to use across all platforms (optional). + """ + + def __init__(self, analytics_label=None): + self.analytics_label = analytics_label class _Validators(object): """A collection of data validation utilities. @@ -587,7 +596,7 @@ def encode_webpush(cls, webpush): 'headers': _Validators.check_string_dict( 'WebpushConfig.headers', webpush.headers), 'notification': cls.encode_webpush_notification(webpush.notification), - 'fcmOptions': cls.encode_webpush_fcm_options(webpush.fcm_options), + 'fcm_options': cls.encode_webpush_fcm_options(webpush.fcm_options), } return cls.remove_null_values(result) diff --git a/firebase_admin/messaging.py b/firebase_admin/messaging.py index d5c9510f2..bb5431587 100644 --- a/firebase_admin/messaging.py +++ b/firebase_admin/messaging.py @@ -151,7 +151,7 @@ def send_multicast(multicast_message, dry_run=False, app=None): android=multicast_message.android, webpush=multicast_message.webpush, apns=multicast_message.apns, - fcmOptions=multicast_message.fcmOptions, + fcm_options=multicast_message.fcmOptions, token=token ) for token in multicast_message.tokens] return _get_messaging_service(app).send_all(messages, dry_run)