chore: regens API reference docs (#889)

diff --git a/docs/dyn/fcm_v1.projects.messages.html b/docs/dyn/fcm_v1.projects.messages.html
index fb03148..d6a1692 100644
--- a/docs/dyn/fcm_v1.projects.messages.html
+++ b/docs/dyn/fcm_v1.projects.messages.html
@@ -75,11 +75,11 @@
 <h1><a href="fcm_v1.html">Firebase Cloud Messaging API</a> . <a href="fcm_v1.projects.html">projects</a> . <a href="fcm_v1.projects.messages.html">messages</a></h1>
 <h2>Instance Methods</h2>
 <p class="toc_element">
-  <code><a href="#send">send(parent, body, x__xgafv=None)</a></code></p>
+  <code><a href="#send">send(parent, body=None, x__xgafv=None)</a></code></p>
 <p class="firstline">Send a message to specified target (a registration token, topic</p>
 <h3>Method Details</h3>
 <div class="method">
-    <code class="details" id="send">send(parent, body, x__xgafv=None)</code>
+    <code class="details" id="send">send(parent, body=None, x__xgafv=None)</code>
   <pre>Send a message to specified target (a registration token, topic
 or condition).
 
@@ -88,7 +88,7 @@
 for your Firebase project), in the format of `projects/{project_id}`.
 For legacy support, the numeric project number with no padding is also
 supported in the format of `projects/{project_number}`. (required)
-  body: object, The request body. (required)
+  body: object, The request body.
     The object takes the form of:
 
 { # Request to send a message to specified target.
@@ -97,28 +97,23 @@
           # `projects/*/messages/{message_id}`.
       "fcmOptions": { # Platform independent options for features provided by the FCM SDKs. # Input only. Template for FCM SDK feature options to use across all
           # platforms.
-        "analyticsLabel": "A String", # Label that the message's analytics data will be associated with.
+        "analyticsLabel": "A String", # Label associated with the message's analytics data.
       },
       "notification": { # Basic notification template to use across all platforms. # Input only. Basic notification template to use across all platforms.
         "body": "A String", # The notification's body text.
+        "image": "A String", # Contains the URL of an image that is going to be downloaded on the device
+            # and displayed in a notification.
+            # JPEG, PNG, BMP have full support across platforms. Animated GIF and video
+            # only work on iOS. WebP and HEIF have varying levels of support across
+            # platforms and platform versions.
+            # Android has 1MB image size limit.
+            # Quota usage and implications/costs for hosting image on Firebase Storage:
+            # https://firebase.google.com/pricing
         "title": "A String", # The notification's title.
       },
       "token": "A String", # Registration token to send a message to.
       "webpush": { # [Webpush protocol](https://tools.ietf.org/html/rfc8030) options. # Input only. [Webpush protocol](https://tools.ietf.org/html/rfc8030)
           # options.
-        "headers": { # HTTP headers defined in webpush protocol. Refer to
-            # [Webpush protocol](https://tools.ietf.org/html/rfc8030#section-5) for
-            # supported headers, e.g. "TTL": "15".
-          "a_key": "A String",
-        },
-        "data": { # Arbitrary key/value payload. If present, it will override
-            # google.firebase.fcm.v1.Message.data.
-          "a_key": "A String",
-        },
-        "fcmOptions": { # Options for features provided by the FCM SDK for Web. # Options for features provided by the FCM SDK for Web.
-          "link": "A String", # The link to open when the user clicks on the notification.
-              # For all URL values, HTTPS is required.
-        },
         "notification": { # Web Notification options as a JSON object. Supports Notification instance
             # properties as defined in [Web Notification
             # API](https://developer.mozilla.org/en-US/docs/Web/API/Notification). If
@@ -127,48 +122,65 @@
             # [google.firebase.fcm.v1.Notification.body].
           "a_key": "", # Properties of the object.
         },
+        "data": { # Arbitrary key/value payload. If present, it will override
+            # google.firebase.fcm.v1.Message.data.
+          "a_key": "A String",
+        },
+        "fcmOptions": { # Options for features provided by the FCM SDK for Web. # Options for features provided by the FCM SDK for Web.
+          "analyticsLabel": "A String", # Label associated with the message's analytics data.
+          "link": "A String", # The link to open when the user clicks on the notification.
+              # For all URL values, HTTPS is required.
+        },
+        "headers": { # HTTP headers defined in webpush protocol. Refer to
+            # [Webpush protocol](https://tools.ietf.org/html/rfc8030#section-5) for
+            # supported headers, e.g. "TTL": "15".
+          "a_key": "A String",
+        },
       },
       "topic": "A String", # Topic name to send a message to, e.g. "weather".
           # Note: "/topics/" prefix should not be provided.
       "apns": { # [Apple Push Notification Service](https://goo.gl/MXRTPa) specific options. # Input only. [Apple Push Notification Service](https://goo.gl/MXRTPa)
           # specific options.
         "headers": { # HTTP request headers defined in Apple Push Notification Service. Refer to
-            # [APNs request headers](https://goo.gl/C6Yhia) for
-            # supported headers, e.g. "apns-priority": "10".
+            # [APNs request
+            # headers](https://developer.apple.com/documentation/usernotifications/setting_up_a_remote_notification_server/sending_notification_requests_to_apns)
+            # for supported headers, e.g. "apns-priority": "10".
           "a_key": "A String",
         },
         "payload": { # APNs payload as a JSON object, including both `aps` dictionary and custom
-            # payload. See [Payload Key Reference](https://goo.gl/32Pl5W).
+            # payload. See [Payload Key
+            # Reference](https://developer.apple.com/documentation/usernotifications/setting_up_a_remote_notification_server/generating_a_remote_notification).
             # If present, it overrides google.firebase.fcm.v1.Notification.title
             # and google.firebase.fcm.v1.Notification.body.
           "a_key": "", # Properties of the object.
         },
         "fcmOptions": { # Options for features provided by the FCM SDK for iOS. # Options for features provided by the FCM SDK for iOS.
-          "analyticsLabel": "A String", # Label that the message's analytics data will be associated with.
+          "image": "A String", # Contains the URL of an image that is going to be displayed in a
+              # notification. If present, it will override
+              # google.firebase.fcm.v1.Notification.image.
+          "analyticsLabel": "A String", # Label associated with the message's analytics data.
         },
       },
       "android": { # Android specific options for messages sent through # Input only. Android specific options for messages sent through
           # [FCM connection server](https://goo.gl/4GLdUl).
           # [FCM connection server](https://goo.gl/4GLdUl).
         "fcmOptions": { # Options for features provided by the FCM SDK for Android. # Options for features provided by the FCM SDK for Android.
-          "analyticsLabel": "A String", # Label that the message's analytics data will be associated with.
+          "analyticsLabel": "A String", # Label associated with the message's analytics data.
         },
         "notification": { # Notification to send to android devices. # Notification to send to android devices.
-          "sound": "A String", # The sound to play when the device receives the notification.
-              # Supports "default" or the filename of a sound resource bundled in the app.
-              # Sound files must reside in /res/raw/.
+          "defaultVibrateTimings": True or False, # If set to true, use the Android framework's default vibrate pattern for the
+              # notification. Default values are specified in
+              # [config.xml](https://android.googlesource.com/platform/frameworks/base/+/master/core/res/res/values/config.xml).
+              # If `default_vibrate_timings` is set to true and `vibrate_timings` is also
+              # set, the default value is used instead of the user-specified
+              # `vibrate_timings`.
           "bodyLocKey": "A String", # The key to the body string in the app's string resources to use to localize
               # the body text to the user's current localization.
               # See [String Resources](https://goo.gl/NdFZGI) for more information.
-          "bodyLocArgs": [ # Variable string values to be used in place of the format specifiers in
-              # body_loc_key to use to localize the body text to the user's current
-              # localization.
-              # See [Formatting and Styling](https://goo.gl/MalYE3) for more information.
-            "A String",
-          ],
-          "title": "A String", # The notification's title. If present, it will override
-              # google.firebase.fcm.v1.Notification.title.
           "color": "A String", # The notification's icon color, expressed in #rrggbb format.
+          "image": "A String", # Contains the URL of an image that is going to be displayed in a
+              # notification. If present, it will override
+              # google.firebase.fcm.v1.Notification.image.
           "channelId": "A String", # The [notification's channel
               # id](https://developer.android.com/guide/topics/ui/notifiers/notifications#ManageChannels)
               # (new in Android O). The app must create a channel with this channel ID
@@ -176,29 +188,240 @@
               # this channel ID in the request, or if the channel ID provided has not yet
               # been created by the app, FCM uses the channel ID specified in the app
               # manifest.
-          "body": "A String", # The notification's body text. If present, it will override
-              # google.firebase.fcm.v1.Notification.body.
-          "clickAction": "A String", # The action associated with a user click on the notification.
-              # If specified, an activity with a matching intent filter is launched when
-              # a user clicks on the notification.
           "titleLocKey": "A String", # The key to the title string in the app's string resources to use to
               # localize the title text to the user's current localization.
               # See [String Resources](https://goo.gl/NdFZGI) for more information.
+          "sticky": True or False, # When set to false or unset, the notification is automatically
+              # dismissed when the user clicks it in the panel. When set to true, the
+              # notification persists even when the user clicks it.
+          "tag": "A String", # Identifier used to replace existing notifications in the notification
+              # drawer.
+              # If not specified, each request creates a new notification.
+              # If specified and a notification with the same tag is already being shown,
+              # the new notification replaces the existing one in the notification drawer.
+          "defaultSound": True or False, # If set to true, use the Android framework's default sound for the
+              # notification. Default values are specified in
+              # [config.xml](https://android.googlesource.com/platform/frameworks/base/+/master/core/res/res/values/config.xml).
+          "defaultLightSettings": True or False, # If set to true, use the Android framework's default LED light settings for
+              # the notification. Default values are specified in
+              # [config.xml](https://android.googlesource.com/platform/frameworks/base/+/master/core/res/res/values/config.xml).
+              # If `default_light_settings` is set to true and `light_settings` is also
+              # set, the user-specified `light_settings` is used instead of the
+              # default value.
+          "eventTime": "A String", # Set the time that the event in the notification occurred. Notifications in
+              # the panel are sorted by this time. A point in time is represented using
+              # [protobuf.Timestamp](https://developers.google.com/protocol-buffers/docs/reference/java/com/google/protobuf/Timestamp).
+          "lightSettings": { # Settings to control notification LED. # Settings to control the notification's LED blinking rate and color if LED
+              # is available on the device. The total blinking time is controlled by the
+              # OS.
+            "color": { # Represents a color in the RGBA color space. This representation is designed # Required. Set `color` of the LED with
+                # [google.type.Color](https://github.com/googleapis/googleapis/blob/master/google/type/color.proto).
+                # for simplicity of conversion to/from color representations in various
+                # languages over compactness; for example, the fields of this representation
+                # can be trivially provided to the constructor of "java.awt.Color" in Java; it
+                # can also be trivially provided to UIColor's "+colorWithRed:green:blue:alpha"
+                # method in iOS; and, with just a little work, it can be easily formatted into
+                # a CSS "rgba()" string in JavaScript, as well.
+                #
+                # Note: this proto does not carry information about the absolute color space
+                # that should be used to interpret the RGB value (e.g. sRGB, Adobe RGB,
+                # DCI-P3, BT.2020, etc.). By default, applications SHOULD assume the sRGB color
+                # space.
+                #
+                # Example (Java):
+                #
+                #      import com.google.type.Color;
+                #
+                #      // ...
+                #      public static java.awt.Color fromProto(Color protocolor) {
+                #        float alpha = protocolor.hasAlpha()
+                #            ? protocolor.getAlpha().getValue()
+                #            : 1.0;
+                #
+                #        return new java.awt.Color(
+                #            protocolor.getRed(),
+                #            protocolor.getGreen(),
+                #            protocolor.getBlue(),
+                #            alpha);
+                #      }
+                #
+                #      public static Color toProto(java.awt.Color color) {
+                #        float red = (float) color.getRed();
+                #        float green = (float) color.getGreen();
+                #        float blue = (float) color.getBlue();
+                #        float denominator = 255.0;
+                #        Color.Builder resultBuilder =
+                #            Color
+                #                .newBuilder()
+                #                .setRed(red / denominator)
+                #                .setGreen(green / denominator)
+                #                .setBlue(blue / denominator);
+                #        int alpha = color.getAlpha();
+                #        if (alpha != 255) {
+                #          result.setAlpha(
+                #              FloatValue
+                #                  .newBuilder()
+                #                  .setValue(((float) alpha) / denominator)
+                #                  .build());
+                #        }
+                #        return resultBuilder.build();
+                #      }
+                #      // ...
+                #
+                # Example (iOS / Obj-C):
+                #
+                #      // ...
+                #      static UIColor* fromProto(Color* protocolor) {
+                #         float red = [protocolor red];
+                #         float green = [protocolor green];
+                #         float blue = [protocolor blue];
+                #         FloatValue* alpha_wrapper = [protocolor alpha];
+                #         float alpha = 1.0;
+                #         if (alpha_wrapper != nil) {
+                #           alpha = [alpha_wrapper value];
+                #         }
+                #         return [UIColor colorWithRed:red green:green blue:blue alpha:alpha];
+                #      }
+                #
+                #      static Color* toProto(UIColor* color) {
+                #          CGFloat red, green, blue, alpha;
+                #          if (![color getRed:&amp;red green:&amp;green blue:&amp;blue alpha:&amp;alpha]) {
+                #            return nil;
+                #          }
+                #          Color* result = [[Color alloc] init];
+                #          [result setRed:red];
+                #          [result setGreen:green];
+                #          [result setBlue:blue];
+                #          if (alpha &lt;= 0.9999) {
+                #            [result setAlpha:floatWrapperWithValue(alpha)];
+                #          }
+                #          [result autorelease];
+                #          return result;
+                #     }
+                #     // ...
+                #
+                #  Example (JavaScript):
+                #
+                #     // ...
+                #
+                #     var protoToCssColor = function(rgb_color) {
+                #        var redFrac = rgb_color.red || 0.0;
+                #        var greenFrac = rgb_color.green || 0.0;
+                #        var blueFrac = rgb_color.blue || 0.0;
+                #        var red = Math.floor(redFrac * 255);
+                #        var green = Math.floor(greenFrac * 255);
+                #        var blue = Math.floor(blueFrac * 255);
+                #
+                #        if (!('alpha' in rgb_color)) {
+                #           return rgbToCssColor_(red, green, blue);
+                #        }
+                #
+                #        var alphaFrac = rgb_color.alpha.value || 0.0;
+                #        var rgbParams = [red, green, blue].join(',');
+                #        return ['rgba(', rgbParams, ',', alphaFrac, ')'].join('');
+                #     };
+                #
+                #     var rgbToCssColor_ = function(red, green, blue) {
+                #       var rgbNumber = new Number((red &lt;&lt; 16) | (green &lt;&lt; 8) | blue);
+                #       var hexString = rgbNumber.toString(16);
+                #       var missingZeros = 6 - hexString.length;
+                #       var resultBuilder = ['#'];
+                #       for (var i = 0; i &lt; missingZeros; i++) {
+                #          resultBuilder.push('0');
+                #       }
+                #       resultBuilder.push(hexString);
+                #       return resultBuilder.join('');
+                #     };
+                #
+                #     // ...
+              "blue": 3.14, # The amount of blue in the color as a value in the interval [0, 1].
+              "alpha": 3.14, # The fraction of this color that should be applied to the pixel. That is,
+                  # the final pixel color is defined by the equation:
+                  #
+                  #   pixel color = alpha * (this color) + (1.0 - alpha) * (background color)
+                  #
+                  # This means that a value of 1.0 corresponds to a solid color, whereas
+                  # a value of 0.0 corresponds to a completely transparent color. This
+                  # uses a wrapper message rather than a simple float scalar so that it is
+                  # possible to distinguish between a default value and the value being unset.
+                  # If omitted, this color object is to be rendered as a solid color
+                  # (as if the alpha value had been explicitly given with a value of 1.0).
+              "green": 3.14, # The amount of green in the color as a value in the interval [0, 1].
+              "red": 3.14, # The amount of red in the color as a value in the interval [0, 1].
+            },
+            "lightOnDuration": "A String", # Required. Along with `light_off_duration`, define the blink rate of LED
+                # flashes. Resolution defined by
+                # [proto.Duration](https://developers.google.com/protocol-buffers/docs/reference/google.protobuf#google.protobuf.Duration)
+            "lightOffDuration": "A String", # Required. Along with `light_on_duration `, define the blink rate of LED
+                # flashes. Resolution defined by
+                # [proto.Duration](https://developers.google.com/protocol-buffers/docs/reference/google.protobuf#google.protobuf.Duration)
+          },
+          "title": "A String", # The notification's title. If present, it will override
+              # google.firebase.fcm.v1.Notification.title.
+          "notificationCount": 42, # Sets the number of items this notification represents. May be displayed as
+              # a badge count for launchers that support badging.See [Notification
+              # Badge](https://developer.android.com/training/notify-user/badges).
+              # For example, this might be useful if you're using just one notification to
+              # represent multiple new messages but you want the count here to represent
+              # the number of total new messages.
+              # If zero or unspecified, systems that support badging use the default, which
+              # is to increment a number displayed on the long-press menu each time a new
+              # notification arrives.
+          "body": "A String", # The notification's body text. If present, it will override
+              # google.firebase.fcm.v1.Notification.body.
+          "bodyLocArgs": [ # Variable string values to be used in place of the format specifiers in
+              # body_loc_key to use to localize the body text to the user's current
+              # localization.
+              # See [Formatting and Styling](https://goo.gl/MalYE3) for more information.
+            "A String",
+          ],
+          "localOnly": True or False, # Set whether or not this notification is relevant only to the current
+              # device. Some notifications can be bridged to other devices for remote
+              # display, such as a Wear OS watch. This hint can be set to recommend this
+              # notification not be bridged. See [Wear OS
+              # guides](https://developer.android.com/training/wearables/notifications/bridger#existing-method-of-preventing-bridging)
+          "visibility": "A String", # Set the
+              # [Notification.visibility](https://developer.android.com/reference/android/app/Notification.html#visibility)
+              # of the notification.
+          "ticker": "A String", # Sets the "ticker" text, which is sent to accessibility services.
+              # Prior to API level 21 (`Lollipop`), sets the text that is displayed in the
+              # status bar when the notification first arrives.
+          "icon": "A String", # The notification's icon.
+              # Sets the notification icon to myicon for drawable resource myicon.
+              # If you don't send this key in the request, FCM displays the launcher icon
+              # specified in your app manifest.
+          "sound": "A String", # The sound to play when the device receives the notification.
+              # Supports "default" or the filename of a sound resource bundled in the app.
+              # Sound files must reside in /res/raw/.
+          "clickAction": "A String", # The action associated with a user click on the notification.
+              # If specified, an activity with a matching intent filter is launched when
+              # a user clicks on the notification.
           "titleLocArgs": [ # Variable string values to be used in place of the format specifiers in
               # title_loc_key to use to localize the title text to the user's current
               # localization.
               # See [Formatting and Styling](https://goo.gl/MalYE3) for more information.
             "A String",
           ],
-          "tag": "A String", # Identifier used to replace existing notifications in the notification
-              # drawer.
-              # If not specified, each request creates a new notification.
-              # If specified and a notification with the same tag is already being shown,
-              # the new notification replaces the existing one in the notification drawer.
-          "icon": "A String", # The notification's icon.
-              # Sets the notification icon to myicon for drawable resource myicon.
-              # If you don't send this key in the request, FCM displays the launcher icon
-              # specified in your app manifest.
+          "vibrateTimings": [ # Set the vibration pattern to use. Pass in an array of
+              # [protobuf.Duration](https://developers.google.com/protocol-buffers/docs/reference/google.protobuf#google.protobuf.Duration)
+              # to turn on or off the vibrator. The first value indicates the `Duration` to
+              # wait before turning the vibrator on. The next value indicates the
+              # `Duration` to keep the vibrator on. Subsequent values alternate between
+              # `Duration` to turn the vibrator off and to turn the vibrator on.
+              # If `vibrate_timings` is set and `default_vibrate_timings` is set to `true`,
+              # the default value is used instead of the user-specified `vibrate_timings`.
+            "A String",
+          ],
+          "notificationPriority": "A String", # Set the relative priority for this notification. Priority is an indication
+              # of how much of the user's attention should be consumed by this
+              # notification. Low-priority notifications may be hidden from the user in
+              # certain situations, while the user might be interrupted for a
+              # higher-priority notification. The effect of setting the same priorities may
+              # differ slightly on different platforms. Note this priority differs from
+              # `AndroidMessagePriority`. This priority is processed by the client after
+              # the message has been delivered, whereas
+              # [AndroidMessagePriority](https://firebase.google.com/docs/reference/fcm/rest/v1/projects.messages#androidmessagepriority)
+              # is an FCM concept that controls when the message is delivered.
         },
         "priority": "A String", # Message priority. Can take "normal" and "high" values.
             # For more information, see [Setting the priority of a
@@ -206,6 +429,9 @@
         "collapseKey": "A String", # An identifier of a group of messages that can be collapsed, so that only
             # the last message gets sent when delivery can be resumed. A maximum of 4
             # different collapse keys is allowed at any given time.
+        "directBootOk": True or False, # If set to true, messages will be allowed to be delivered to the app while
+            # the device is in direct boot mode. See [Support Direct Boot
+            # mode](https://developer.android.com/training/articles/direct-boot).
         "ttl": "A String", # How long (in seconds) the message should be kept in FCM storage if the
             # device is offline. The maximum time to live supported is 4 weeks, and the
             # default value is 4 weeks if not set. Set it to 0 if want to send the
@@ -224,11 +450,12 @@
           "a_key": "A String",
         },
       },
-      "data": { # Input only. Arbitrary key/value payload.
+      "data": { # Input only. Arbitrary key/value payload. The key should not be a reserved
+          # word ("from", "message_type", or any word starting with "google" or "gcm").
         "a_key": "A String",
       },
       "condition": "A String", # Condition to send a message to,
-          # e.g. "'foo' in topics && 'bar' in topics".
+          # e.g. "'foo' in topics &amp;&amp; 'bar' in topics".
     },
     "validateOnly": True or False, # Flag for testing the request without actually delivering the message.
   }
@@ -246,28 +473,23 @@
         # `projects/*/messages/{message_id}`.
     "fcmOptions": { # Platform independent options for features provided by the FCM SDKs. # Input only. Template for FCM SDK feature options to use across all
         # platforms.
-      "analyticsLabel": "A String", # Label that the message's analytics data will be associated with.
+      "analyticsLabel": "A String", # Label associated with the message's analytics data.
     },
     "notification": { # Basic notification template to use across all platforms. # Input only. Basic notification template to use across all platforms.
       "body": "A String", # The notification's body text.
+      "image": "A String", # Contains the URL of an image that is going to be downloaded on the device
+          # and displayed in a notification.
+          # JPEG, PNG, BMP have full support across platforms. Animated GIF and video
+          # only work on iOS. WebP and HEIF have varying levels of support across
+          # platforms and platform versions.
+          # Android has 1MB image size limit.
+          # Quota usage and implications/costs for hosting image on Firebase Storage:
+          # https://firebase.google.com/pricing
       "title": "A String", # The notification's title.
     },
     "token": "A String", # Registration token to send a message to.
     "webpush": { # [Webpush protocol](https://tools.ietf.org/html/rfc8030) options. # Input only. [Webpush protocol](https://tools.ietf.org/html/rfc8030)
         # options.
-      "headers": { # HTTP headers defined in webpush protocol. Refer to
-          # [Webpush protocol](https://tools.ietf.org/html/rfc8030#section-5) for
-          # supported headers, e.g. "TTL": "15".
-        "a_key": "A String",
-      },
-      "data": { # Arbitrary key/value payload. If present, it will override
-          # google.firebase.fcm.v1.Message.data.
-        "a_key": "A String",
-      },
-      "fcmOptions": { # Options for features provided by the FCM SDK for Web. # Options for features provided by the FCM SDK for Web.
-        "link": "A String", # The link to open when the user clicks on the notification.
-            # For all URL values, HTTPS is required.
-      },
       "notification": { # Web Notification options as a JSON object. Supports Notification instance
           # properties as defined in [Web Notification
           # API](https://developer.mozilla.org/en-US/docs/Web/API/Notification). If
@@ -276,48 +498,65 @@
           # [google.firebase.fcm.v1.Notification.body].
         "a_key": "", # Properties of the object.
       },
+      "data": { # Arbitrary key/value payload. If present, it will override
+          # google.firebase.fcm.v1.Message.data.
+        "a_key": "A String",
+      },
+      "fcmOptions": { # Options for features provided by the FCM SDK for Web. # Options for features provided by the FCM SDK for Web.
+        "analyticsLabel": "A String", # Label associated with the message's analytics data.
+        "link": "A String", # The link to open when the user clicks on the notification.
+            # For all URL values, HTTPS is required.
+      },
+      "headers": { # HTTP headers defined in webpush protocol. Refer to
+          # [Webpush protocol](https://tools.ietf.org/html/rfc8030#section-5) for
+          # supported headers, e.g. "TTL": "15".
+        "a_key": "A String",
+      },
     },
     "topic": "A String", # Topic name to send a message to, e.g. "weather".
         # Note: "/topics/" prefix should not be provided.
     "apns": { # [Apple Push Notification Service](https://goo.gl/MXRTPa) specific options. # Input only. [Apple Push Notification Service](https://goo.gl/MXRTPa)
         # specific options.
       "headers": { # HTTP request headers defined in Apple Push Notification Service. Refer to
-          # [APNs request headers](https://goo.gl/C6Yhia) for
-          # supported headers, e.g. "apns-priority": "10".
+          # [APNs request
+          # headers](https://developer.apple.com/documentation/usernotifications/setting_up_a_remote_notification_server/sending_notification_requests_to_apns)
+          # for supported headers, e.g. "apns-priority": "10".
         "a_key": "A String",
       },
       "payload": { # APNs payload as a JSON object, including both `aps` dictionary and custom
-          # payload. See [Payload Key Reference](https://goo.gl/32Pl5W).
+          # payload. See [Payload Key
+          # Reference](https://developer.apple.com/documentation/usernotifications/setting_up_a_remote_notification_server/generating_a_remote_notification).
           # If present, it overrides google.firebase.fcm.v1.Notification.title
           # and google.firebase.fcm.v1.Notification.body.
         "a_key": "", # Properties of the object.
       },
       "fcmOptions": { # Options for features provided by the FCM SDK for iOS. # Options for features provided by the FCM SDK for iOS.
-        "analyticsLabel": "A String", # Label that the message's analytics data will be associated with.
+        "image": "A String", # Contains the URL of an image that is going to be displayed in a
+            # notification. If present, it will override
+            # google.firebase.fcm.v1.Notification.image.
+        "analyticsLabel": "A String", # Label associated with the message's analytics data.
       },
     },
     "android": { # Android specific options for messages sent through # Input only. Android specific options for messages sent through
         # [FCM connection server](https://goo.gl/4GLdUl).
         # [FCM connection server](https://goo.gl/4GLdUl).
       "fcmOptions": { # Options for features provided by the FCM SDK for Android. # Options for features provided by the FCM SDK for Android.
-        "analyticsLabel": "A String", # Label that the message's analytics data will be associated with.
+        "analyticsLabel": "A String", # Label associated with the message's analytics data.
       },
       "notification": { # Notification to send to android devices. # Notification to send to android devices.
-        "sound": "A String", # The sound to play when the device receives the notification.
-            # Supports "default" or the filename of a sound resource bundled in the app.
-            # Sound files must reside in /res/raw/.
+        "defaultVibrateTimings": True or False, # If set to true, use the Android framework's default vibrate pattern for the
+            # notification. Default values are specified in
+            # [config.xml](https://android.googlesource.com/platform/frameworks/base/+/master/core/res/res/values/config.xml).
+            # If `default_vibrate_timings` is set to true and `vibrate_timings` is also
+            # set, the default value is used instead of the user-specified
+            # `vibrate_timings`.
         "bodyLocKey": "A String", # The key to the body string in the app's string resources to use to localize
             # the body text to the user's current localization.
             # See [String Resources](https://goo.gl/NdFZGI) for more information.
-        "bodyLocArgs": [ # Variable string values to be used in place of the format specifiers in
-            # body_loc_key to use to localize the body text to the user's current
-            # localization.
-            # See [Formatting and Styling](https://goo.gl/MalYE3) for more information.
-          "A String",
-        ],
-        "title": "A String", # The notification's title. If present, it will override
-            # google.firebase.fcm.v1.Notification.title.
         "color": "A String", # The notification's icon color, expressed in #rrggbb format.
+        "image": "A String", # Contains the URL of an image that is going to be displayed in a
+            # notification. If present, it will override
+            # google.firebase.fcm.v1.Notification.image.
         "channelId": "A String", # The [notification's channel
             # id](https://developer.android.com/guide/topics/ui/notifiers/notifications#ManageChannels)
             # (new in Android O). The app must create a channel with this channel ID
@@ -325,29 +564,240 @@
             # this channel ID in the request, or if the channel ID provided has not yet
             # been created by the app, FCM uses the channel ID specified in the app
             # manifest.
-        "body": "A String", # The notification's body text. If present, it will override
-            # google.firebase.fcm.v1.Notification.body.
-        "clickAction": "A String", # The action associated with a user click on the notification.
-            # If specified, an activity with a matching intent filter is launched when
-            # a user clicks on the notification.
         "titleLocKey": "A String", # The key to the title string in the app's string resources to use to
             # localize the title text to the user's current localization.
             # See [String Resources](https://goo.gl/NdFZGI) for more information.
+        "sticky": True or False, # When set to false or unset, the notification is automatically
+            # dismissed when the user clicks it in the panel. When set to true, the
+            # notification persists even when the user clicks it.
+        "tag": "A String", # Identifier used to replace existing notifications in the notification
+            # drawer.
+            # If not specified, each request creates a new notification.
+            # If specified and a notification with the same tag is already being shown,
+            # the new notification replaces the existing one in the notification drawer.
+        "defaultSound": True or False, # If set to true, use the Android framework's default sound for the
+            # notification. Default values are specified in
+            # [config.xml](https://android.googlesource.com/platform/frameworks/base/+/master/core/res/res/values/config.xml).
+        "defaultLightSettings": True or False, # If set to true, use the Android framework's default LED light settings for
+            # the notification. Default values are specified in
+            # [config.xml](https://android.googlesource.com/platform/frameworks/base/+/master/core/res/res/values/config.xml).
+            # If `default_light_settings` is set to true and `light_settings` is also
+            # set, the user-specified `light_settings` is used instead of the
+            # default value.
+        "eventTime": "A String", # Set the time that the event in the notification occurred. Notifications in
+            # the panel are sorted by this time. A point in time is represented using
+            # [protobuf.Timestamp](https://developers.google.com/protocol-buffers/docs/reference/java/com/google/protobuf/Timestamp).
+        "lightSettings": { # Settings to control notification LED. # Settings to control the notification's LED blinking rate and color if LED
+            # is available on the device. The total blinking time is controlled by the
+            # OS.
+          "color": { # Represents a color in the RGBA color space. This representation is designed # Required. Set `color` of the LED with
+              # [google.type.Color](https://github.com/googleapis/googleapis/blob/master/google/type/color.proto).
+              # for simplicity of conversion to/from color representations in various
+              # languages over compactness; for example, the fields of this representation
+              # can be trivially provided to the constructor of "java.awt.Color" in Java; it
+              # can also be trivially provided to UIColor's "+colorWithRed:green:blue:alpha"
+              # method in iOS; and, with just a little work, it can be easily formatted into
+              # a CSS "rgba()" string in JavaScript, as well.
+              #
+              # Note: this proto does not carry information about the absolute color space
+              # that should be used to interpret the RGB value (e.g. sRGB, Adobe RGB,
+              # DCI-P3, BT.2020, etc.). By default, applications SHOULD assume the sRGB color
+              # space.
+              #
+              # Example (Java):
+              #
+              #      import com.google.type.Color;
+              #
+              #      // ...
+              #      public static java.awt.Color fromProto(Color protocolor) {
+              #        float alpha = protocolor.hasAlpha()
+              #            ? protocolor.getAlpha().getValue()
+              #            : 1.0;
+              #
+              #        return new java.awt.Color(
+              #            protocolor.getRed(),
+              #            protocolor.getGreen(),
+              #            protocolor.getBlue(),
+              #            alpha);
+              #      }
+              #
+              #      public static Color toProto(java.awt.Color color) {
+              #        float red = (float) color.getRed();
+              #        float green = (float) color.getGreen();
+              #        float blue = (float) color.getBlue();
+              #        float denominator = 255.0;
+              #        Color.Builder resultBuilder =
+              #            Color
+              #                .newBuilder()
+              #                .setRed(red / denominator)
+              #                .setGreen(green / denominator)
+              #                .setBlue(blue / denominator);
+              #        int alpha = color.getAlpha();
+              #        if (alpha != 255) {
+              #          result.setAlpha(
+              #              FloatValue
+              #                  .newBuilder()
+              #                  .setValue(((float) alpha) / denominator)
+              #                  .build());
+              #        }
+              #        return resultBuilder.build();
+              #      }
+              #      // ...
+              #
+              # Example (iOS / Obj-C):
+              #
+              #      // ...
+              #      static UIColor* fromProto(Color* protocolor) {
+              #         float red = [protocolor red];
+              #         float green = [protocolor green];
+              #         float blue = [protocolor blue];
+              #         FloatValue* alpha_wrapper = [protocolor alpha];
+              #         float alpha = 1.0;
+              #         if (alpha_wrapper != nil) {
+              #           alpha = [alpha_wrapper value];
+              #         }
+              #         return [UIColor colorWithRed:red green:green blue:blue alpha:alpha];
+              #      }
+              #
+              #      static Color* toProto(UIColor* color) {
+              #          CGFloat red, green, blue, alpha;
+              #          if (![color getRed:&amp;red green:&amp;green blue:&amp;blue alpha:&amp;alpha]) {
+              #            return nil;
+              #          }
+              #          Color* result = [[Color alloc] init];
+              #          [result setRed:red];
+              #          [result setGreen:green];
+              #          [result setBlue:blue];
+              #          if (alpha &lt;= 0.9999) {
+              #            [result setAlpha:floatWrapperWithValue(alpha)];
+              #          }
+              #          [result autorelease];
+              #          return result;
+              #     }
+              #     // ...
+              #
+              #  Example (JavaScript):
+              #
+              #     // ...
+              #
+              #     var protoToCssColor = function(rgb_color) {
+              #        var redFrac = rgb_color.red || 0.0;
+              #        var greenFrac = rgb_color.green || 0.0;
+              #        var blueFrac = rgb_color.blue || 0.0;
+              #        var red = Math.floor(redFrac * 255);
+              #        var green = Math.floor(greenFrac * 255);
+              #        var blue = Math.floor(blueFrac * 255);
+              #
+              #        if (!('alpha' in rgb_color)) {
+              #           return rgbToCssColor_(red, green, blue);
+              #        }
+              #
+              #        var alphaFrac = rgb_color.alpha.value || 0.0;
+              #        var rgbParams = [red, green, blue].join(',');
+              #        return ['rgba(', rgbParams, ',', alphaFrac, ')'].join('');
+              #     };
+              #
+              #     var rgbToCssColor_ = function(red, green, blue) {
+              #       var rgbNumber = new Number((red &lt;&lt; 16) | (green &lt;&lt; 8) | blue);
+              #       var hexString = rgbNumber.toString(16);
+              #       var missingZeros = 6 - hexString.length;
+              #       var resultBuilder = ['#'];
+              #       for (var i = 0; i &lt; missingZeros; i++) {
+              #          resultBuilder.push('0');
+              #       }
+              #       resultBuilder.push(hexString);
+              #       return resultBuilder.join('');
+              #     };
+              #
+              #     // ...
+            "blue": 3.14, # The amount of blue in the color as a value in the interval [0, 1].
+            "alpha": 3.14, # The fraction of this color that should be applied to the pixel. That is,
+                # the final pixel color is defined by the equation:
+                #
+                #   pixel color = alpha * (this color) + (1.0 - alpha) * (background color)
+                #
+                # This means that a value of 1.0 corresponds to a solid color, whereas
+                # a value of 0.0 corresponds to a completely transparent color. This
+                # uses a wrapper message rather than a simple float scalar so that it is
+                # possible to distinguish between a default value and the value being unset.
+                # If omitted, this color object is to be rendered as a solid color
+                # (as if the alpha value had been explicitly given with a value of 1.0).
+            "green": 3.14, # The amount of green in the color as a value in the interval [0, 1].
+            "red": 3.14, # The amount of red in the color as a value in the interval [0, 1].
+          },
+          "lightOnDuration": "A String", # Required. Along with `light_off_duration`, define the blink rate of LED
+              # flashes. Resolution defined by
+              # [proto.Duration](https://developers.google.com/protocol-buffers/docs/reference/google.protobuf#google.protobuf.Duration)
+          "lightOffDuration": "A String", # Required. Along with `light_on_duration `, define the blink rate of LED
+              # flashes. Resolution defined by
+              # [proto.Duration](https://developers.google.com/protocol-buffers/docs/reference/google.protobuf#google.protobuf.Duration)
+        },
+        "title": "A String", # The notification's title. If present, it will override
+            # google.firebase.fcm.v1.Notification.title.
+        "notificationCount": 42, # Sets the number of items this notification represents. May be displayed as
+            # a badge count for launchers that support badging.See [Notification
+            # Badge](https://developer.android.com/training/notify-user/badges).
+            # For example, this might be useful if you're using just one notification to
+            # represent multiple new messages but you want the count here to represent
+            # the number of total new messages.
+            # If zero or unspecified, systems that support badging use the default, which
+            # is to increment a number displayed on the long-press menu each time a new
+            # notification arrives.
+        "body": "A String", # The notification's body text. If present, it will override
+            # google.firebase.fcm.v1.Notification.body.
+        "bodyLocArgs": [ # Variable string values to be used in place of the format specifiers in
+            # body_loc_key to use to localize the body text to the user's current
+            # localization.
+            # See [Formatting and Styling](https://goo.gl/MalYE3) for more information.
+          "A String",
+        ],
+        "localOnly": True or False, # Set whether or not this notification is relevant only to the current
+            # device. Some notifications can be bridged to other devices for remote
+            # display, such as a Wear OS watch. This hint can be set to recommend this
+            # notification not be bridged. See [Wear OS
+            # guides](https://developer.android.com/training/wearables/notifications/bridger#existing-method-of-preventing-bridging)
+        "visibility": "A String", # Set the
+            # [Notification.visibility](https://developer.android.com/reference/android/app/Notification.html#visibility)
+            # of the notification.
+        "ticker": "A String", # Sets the "ticker" text, which is sent to accessibility services.
+            # Prior to API level 21 (`Lollipop`), sets the text that is displayed in the
+            # status bar when the notification first arrives.
+        "icon": "A String", # The notification's icon.
+            # Sets the notification icon to myicon for drawable resource myicon.
+            # If you don't send this key in the request, FCM displays the launcher icon
+            # specified in your app manifest.
+        "sound": "A String", # The sound to play when the device receives the notification.
+            # Supports "default" or the filename of a sound resource bundled in the app.
+            # Sound files must reside in /res/raw/.
+        "clickAction": "A String", # The action associated with a user click on the notification.
+            # If specified, an activity with a matching intent filter is launched when
+            # a user clicks on the notification.
         "titleLocArgs": [ # Variable string values to be used in place of the format specifiers in
             # title_loc_key to use to localize the title text to the user's current
             # localization.
             # See [Formatting and Styling](https://goo.gl/MalYE3) for more information.
           "A String",
         ],
-        "tag": "A String", # Identifier used to replace existing notifications in the notification
-            # drawer.
-            # If not specified, each request creates a new notification.
-            # If specified and a notification with the same tag is already being shown,
-            # the new notification replaces the existing one in the notification drawer.
-        "icon": "A String", # The notification's icon.
-            # Sets the notification icon to myicon for drawable resource myicon.
-            # If you don't send this key in the request, FCM displays the launcher icon
-            # specified in your app manifest.
+        "vibrateTimings": [ # Set the vibration pattern to use. Pass in an array of
+            # [protobuf.Duration](https://developers.google.com/protocol-buffers/docs/reference/google.protobuf#google.protobuf.Duration)
+            # to turn on or off the vibrator. The first value indicates the `Duration` to
+            # wait before turning the vibrator on. The next value indicates the
+            # `Duration` to keep the vibrator on. Subsequent values alternate between
+            # `Duration` to turn the vibrator off and to turn the vibrator on.
+            # If `vibrate_timings` is set and `default_vibrate_timings` is set to `true`,
+            # the default value is used instead of the user-specified `vibrate_timings`.
+          "A String",
+        ],
+        "notificationPriority": "A String", # Set the relative priority for this notification. Priority is an indication
+            # of how much of the user's attention should be consumed by this
+            # notification. Low-priority notifications may be hidden from the user in
+            # certain situations, while the user might be interrupted for a
+            # higher-priority notification. The effect of setting the same priorities may
+            # differ slightly on different platforms. Note this priority differs from
+            # `AndroidMessagePriority`. This priority is processed by the client after
+            # the message has been delivered, whereas
+            # [AndroidMessagePriority](https://firebase.google.com/docs/reference/fcm/rest/v1/projects.messages#androidmessagepriority)
+            # is an FCM concept that controls when the message is delivered.
       },
       "priority": "A String", # Message priority. Can take "normal" and "high" values.
           # For more information, see [Setting the priority of a
@@ -355,6 +805,9 @@
       "collapseKey": "A String", # An identifier of a group of messages that can be collapsed, so that only
           # the last message gets sent when delivery can be resumed. A maximum of 4
           # different collapse keys is allowed at any given time.
+      "directBootOk": True or False, # If set to true, messages will be allowed to be delivered to the app while
+          # the device is in direct boot mode. See [Support Direct Boot
+          # mode](https://developer.android.com/training/articles/direct-boot).
       "ttl": "A String", # How long (in seconds) the message should be kept in FCM storage if the
           # device is offline. The maximum time to live supported is 4 weeks, and the
           # default value is 4 weeks if not set. Set it to 0 if want to send the
@@ -373,11 +826,12 @@
         "a_key": "A String",
       },
     },
-    "data": { # Input only. Arbitrary key/value payload.
+    "data": { # Input only. Arbitrary key/value payload. The key should not be a reserved
+        # word ("from", "message_type", or any word starting with "google" or "gcm").
       "a_key": "A String",
     },
     "condition": "A String", # Condition to send a message to,
-        # e.g. "'foo' in topics && 'bar' in topics".
+        # e.g. "'foo' in topics &amp;&amp; 'bar' in topics".
   }</pre>
 </div>