826 lines
		
	
	
		
			40 KiB
		
	
	
	
		
			Ruby
		
	
	
	
			
		
		
	
	
			826 lines
		
	
	
		
			40 KiB
		
	
	
	
		
			Ruby
		
	
	
	
# Copyright 2015 Google Inc.
 | 
						|
#
 | 
						|
# Licensed under the Apache License, Version 2.0 (the "License");
 | 
						|
# you may not use this file except in compliance with the License.
 | 
						|
# You may obtain a copy of the License at
 | 
						|
#
 | 
						|
#      http://www.apache.org/licenses/LICENSE-2.0
 | 
						|
#
 | 
						|
# Unless required by applicable law or agreed to in writing, software
 | 
						|
# distributed under the License is distributed on an "AS IS" BASIS,
 | 
						|
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 | 
						|
# See the License for the specific language governing permissions and
 | 
						|
# limitations under the License.
 | 
						|
 | 
						|
require 'date'
 | 
						|
require 'google/apis/core/base_service'
 | 
						|
require 'google/apis/core/json_representation'
 | 
						|
require 'google/apis/core/hashable'
 | 
						|
require 'google/apis/errors'
 | 
						|
 | 
						|
module Google
 | 
						|
  module Apis
 | 
						|
    module FcmV1
 | 
						|
      
 | 
						|
      # Android specific options for messages sent through [FCM connection server](
 | 
						|
      # https://goo.gl/4GLdUl).
 | 
						|
      class AndroidConfig
 | 
						|
        include Google::Apis::Core::Hashable
 | 
						|
      
 | 
						|
        # 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.
 | 
						|
        # Corresponds to the JSON property `collapseKey`
 | 
						|
        # @return [String]
 | 
						|
        attr_accessor :collapse_key
 | 
						|
      
 | 
						|
        # Arbitrary key/value payload. If present, it will override google.firebase.fcm.
 | 
						|
        # v1.Message.data.
 | 
						|
        # Corresponds to the JSON property `data`
 | 
						|
        # @return [Hash<String,String>]
 | 
						|
        attr_accessor :data
 | 
						|
      
 | 
						|
        # 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).
 | 
						|
        # Corresponds to the JSON property `directBootOk`
 | 
						|
        # @return [Boolean]
 | 
						|
        attr_accessor :direct_boot_ok
 | 
						|
        alias_method :direct_boot_ok?, :direct_boot_ok
 | 
						|
      
 | 
						|
        # Options for features provided by the FCM SDK for Android.
 | 
						|
        # Corresponds to the JSON property `fcmOptions`
 | 
						|
        # @return [Google::Apis::FcmV1::AndroidFcmOptions]
 | 
						|
        attr_accessor :fcm_options
 | 
						|
      
 | 
						|
        # Notification to send to android devices.
 | 
						|
        # Corresponds to the JSON property `notification`
 | 
						|
        # @return [Google::Apis::FcmV1::AndroidNotification]
 | 
						|
        attr_accessor :notification
 | 
						|
      
 | 
						|
        # Message priority. Can take "normal" and "high" values. For more information,
 | 
						|
        # see [Setting the priority of a message](https://goo.gl/GjONJv).
 | 
						|
        # Corresponds to the JSON property `priority`
 | 
						|
        # @return [String]
 | 
						|
        attr_accessor :priority
 | 
						|
      
 | 
						|
        # Package name of the application where the registration token must match in
 | 
						|
        # order to receive the message.
 | 
						|
        # Corresponds to the JSON property `restrictedPackageName`
 | 
						|
        # @return [String]
 | 
						|
        attr_accessor :restricted_package_name
 | 
						|
      
 | 
						|
        # 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 message
 | 
						|
        # immediately. In JSON format, the Duration type is encoded as a string rather
 | 
						|
        # than an object, where the string ends in the suffix "s" (indicating seconds)
 | 
						|
        # and is preceded by the number of seconds, with nanoseconds expressed as
 | 
						|
        # fractional seconds. For example, 3 seconds with 0 nanoseconds should be
 | 
						|
        # encoded in JSON format as "3s", while 3 seconds and 1 nanosecond should be
 | 
						|
        # expressed in JSON format as "3.000000001s". The ttl will be rounded down to
 | 
						|
        # the nearest second.
 | 
						|
        # Corresponds to the JSON property `ttl`
 | 
						|
        # @return [String]
 | 
						|
        attr_accessor :ttl
 | 
						|
      
 | 
						|
        def initialize(**args)
 | 
						|
           update!(**args)
 | 
						|
        end
 | 
						|
      
 | 
						|
        # Update properties of this object
 | 
						|
        def update!(**args)
 | 
						|
          @collapse_key = args[:collapse_key] if args.key?(:collapse_key)
 | 
						|
          @data = args[:data] if args.key?(:data)
 | 
						|
          @direct_boot_ok = args[:direct_boot_ok] if args.key?(:direct_boot_ok)
 | 
						|
          @fcm_options = args[:fcm_options] if args.key?(:fcm_options)
 | 
						|
          @notification = args[:notification] if args.key?(:notification)
 | 
						|
          @priority = args[:priority] if args.key?(:priority)
 | 
						|
          @restricted_package_name = args[:restricted_package_name] if args.key?(:restricted_package_name)
 | 
						|
          @ttl = args[:ttl] if args.key?(:ttl)
 | 
						|
        end
 | 
						|
      end
 | 
						|
      
 | 
						|
      # Options for features provided by the FCM SDK for Android.
 | 
						|
      class AndroidFcmOptions
 | 
						|
        include Google::Apis::Core::Hashable
 | 
						|
      
 | 
						|
        # Label associated with the message's analytics data.
 | 
						|
        # Corresponds to the JSON property `analyticsLabel`
 | 
						|
        # @return [String]
 | 
						|
        attr_accessor :analytics_label
 | 
						|
      
 | 
						|
        def initialize(**args)
 | 
						|
           update!(**args)
 | 
						|
        end
 | 
						|
      
 | 
						|
        # Update properties of this object
 | 
						|
        def update!(**args)
 | 
						|
          @analytics_label = args[:analytics_label] if args.key?(:analytics_label)
 | 
						|
        end
 | 
						|
      end
 | 
						|
      
 | 
						|
      # Notification to send to android devices.
 | 
						|
      class AndroidNotification
 | 
						|
        include Google::Apis::Core::Hashable
 | 
						|
      
 | 
						|
        # The notification's body text. If present, it will override google.firebase.fcm.
 | 
						|
        # v1.Notification.body.
 | 
						|
        # Corresponds to the JSON property `body`
 | 
						|
        # @return [String]
 | 
						|
        attr_accessor :body
 | 
						|
      
 | 
						|
        # 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.
 | 
						|
        # Corresponds to the JSON property `bodyLocArgs`
 | 
						|
        # @return [Array<String>]
 | 
						|
        attr_accessor :body_loc_args
 | 
						|
      
 | 
						|
        # 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.
 | 
						|
        # Corresponds to the JSON property `bodyLocKey`
 | 
						|
        # @return [String]
 | 
						|
        attr_accessor :body_loc_key
 | 
						|
      
 | 
						|
        # 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 before any notification with this
 | 
						|
        # channel ID is received. If you don't send 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.
 | 
						|
        # Corresponds to the JSON property `channelId`
 | 
						|
        # @return [String]
 | 
						|
        attr_accessor :channel_id
 | 
						|
      
 | 
						|
        # 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.
 | 
						|
        # Corresponds to the JSON property `clickAction`
 | 
						|
        # @return [String]
 | 
						|
        attr_accessor :click_action
 | 
						|
      
 | 
						|
        # The notification's icon color, expressed in #rrggbb format.
 | 
						|
        # Corresponds to the JSON property `color`
 | 
						|
        # @return [String]
 | 
						|
        attr_accessor :color
 | 
						|
      
 | 
						|
        # 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.
 | 
						|
        # Corresponds to the JSON property `defaultLightSettings`
 | 
						|
        # @return [Boolean]
 | 
						|
        attr_accessor :default_light_settings
 | 
						|
        alias_method :default_light_settings?, :default_light_settings
 | 
						|
      
 | 
						|
        # 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).
 | 
						|
        # Corresponds to the JSON property `defaultSound`
 | 
						|
        # @return [Boolean]
 | 
						|
        attr_accessor :default_sound
 | 
						|
        alias_method :default_sound?, :default_sound
 | 
						|
      
 | 
						|
        # 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`.
 | 
						|
        # Corresponds to the JSON property `defaultVibrateTimings`
 | 
						|
        # @return [Boolean]
 | 
						|
        attr_accessor :default_vibrate_timings
 | 
						|
        alias_method :default_vibrate_timings?, :default_vibrate_timings
 | 
						|
      
 | 
						|
        # 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).
 | 
						|
        # Corresponds to the JSON property `eventTime`
 | 
						|
        # @return [String]
 | 
						|
        attr_accessor :event_time
 | 
						|
      
 | 
						|
        # 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.
 | 
						|
        # Corresponds to the JSON property `icon`
 | 
						|
        # @return [String]
 | 
						|
        attr_accessor :icon
 | 
						|
      
 | 
						|
        # 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.
 | 
						|
        # Corresponds to the JSON property `image`
 | 
						|
        # @return [String]
 | 
						|
        attr_accessor :image
 | 
						|
      
 | 
						|
        # Settings to control notification LED.
 | 
						|
        # Corresponds to the JSON property `lightSettings`
 | 
						|
        # @return [Google::Apis::FcmV1::LightSettings]
 | 
						|
        attr_accessor :light_settings
 | 
						|
      
 | 
						|
        # 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)
 | 
						|
        # Corresponds to the JSON property `localOnly`
 | 
						|
        # @return [Boolean]
 | 
						|
        attr_accessor :local_only
 | 
						|
        alias_method :local_only?, :local_only
 | 
						|
      
 | 
						|
        # 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.
 | 
						|
        # Corresponds to the JSON property `notificationCount`
 | 
						|
        # @return [Fixnum]
 | 
						|
        attr_accessor :notification_count
 | 
						|
      
 | 
						|
        # 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.
 | 
						|
        # Corresponds to the JSON property `notificationPriority`
 | 
						|
        # @return [String]
 | 
						|
        attr_accessor :notification_priority
 | 
						|
      
 | 
						|
        # 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/.
 | 
						|
        # Corresponds to the JSON property `sound`
 | 
						|
        # @return [String]
 | 
						|
        attr_accessor :sound
 | 
						|
      
 | 
						|
        # 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.
 | 
						|
        # Corresponds to the JSON property `sticky`
 | 
						|
        # @return [Boolean]
 | 
						|
        attr_accessor :sticky
 | 
						|
        alias_method :sticky?, :sticky
 | 
						|
      
 | 
						|
        # 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.
 | 
						|
        # Corresponds to the JSON property `tag`
 | 
						|
        # @return [String]
 | 
						|
        attr_accessor :tag
 | 
						|
      
 | 
						|
        # 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.
 | 
						|
        # Corresponds to the JSON property `ticker`
 | 
						|
        # @return [String]
 | 
						|
        attr_accessor :ticker
 | 
						|
      
 | 
						|
        # The notification's title. If present, it will override google.firebase.fcm.v1.
 | 
						|
        # Notification.title.
 | 
						|
        # Corresponds to the JSON property `title`
 | 
						|
        # @return [String]
 | 
						|
        attr_accessor :title
 | 
						|
      
 | 
						|
        # 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.
 | 
						|
        # Corresponds to the JSON property `titleLocArgs`
 | 
						|
        # @return [Array<String>]
 | 
						|
        attr_accessor :title_loc_args
 | 
						|
      
 | 
						|
        # 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.
 | 
						|
        # Corresponds to the JSON property `titleLocKey`
 | 
						|
        # @return [String]
 | 
						|
        attr_accessor :title_loc_key
 | 
						|
      
 | 
						|
        # 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`.
 | 
						|
        # Corresponds to the JSON property `vibrateTimings`
 | 
						|
        # @return [Array<String>]
 | 
						|
        attr_accessor :vibrate_timings
 | 
						|
      
 | 
						|
        # Set the [Notification.visibility](https://developer.android.com/reference/
 | 
						|
        # android/app/Notification.html#visibility) of the notification.
 | 
						|
        # Corresponds to the JSON property `visibility`
 | 
						|
        # @return [String]
 | 
						|
        attr_accessor :visibility
 | 
						|
      
 | 
						|
        def initialize(**args)
 | 
						|
           update!(**args)
 | 
						|
        end
 | 
						|
      
 | 
						|
        # Update properties of this object
 | 
						|
        def update!(**args)
 | 
						|
          @body = args[:body] if args.key?(:body)
 | 
						|
          @body_loc_args = args[:body_loc_args] if args.key?(:body_loc_args)
 | 
						|
          @body_loc_key = args[:body_loc_key] if args.key?(:body_loc_key)
 | 
						|
          @channel_id = args[:channel_id] if args.key?(:channel_id)
 | 
						|
          @click_action = args[:click_action] if args.key?(:click_action)
 | 
						|
          @color = args[:color] if args.key?(:color)
 | 
						|
          @default_light_settings = args[:default_light_settings] if args.key?(:default_light_settings)
 | 
						|
          @default_sound = args[:default_sound] if args.key?(:default_sound)
 | 
						|
          @default_vibrate_timings = args[:default_vibrate_timings] if args.key?(:default_vibrate_timings)
 | 
						|
          @event_time = args[:event_time] if args.key?(:event_time)
 | 
						|
          @icon = args[:icon] if args.key?(:icon)
 | 
						|
          @image = args[:image] if args.key?(:image)
 | 
						|
          @light_settings = args[:light_settings] if args.key?(:light_settings)
 | 
						|
          @local_only = args[:local_only] if args.key?(:local_only)
 | 
						|
          @notification_count = args[:notification_count] if args.key?(:notification_count)
 | 
						|
          @notification_priority = args[:notification_priority] if args.key?(:notification_priority)
 | 
						|
          @sound = args[:sound] if args.key?(:sound)
 | 
						|
          @sticky = args[:sticky] if args.key?(:sticky)
 | 
						|
          @tag = args[:tag] if args.key?(:tag)
 | 
						|
          @ticker = args[:ticker] if args.key?(:ticker)
 | 
						|
          @title = args[:title] if args.key?(:title)
 | 
						|
          @title_loc_args = args[:title_loc_args] if args.key?(:title_loc_args)
 | 
						|
          @title_loc_key = args[:title_loc_key] if args.key?(:title_loc_key)
 | 
						|
          @vibrate_timings = args[:vibrate_timings] if args.key?(:vibrate_timings)
 | 
						|
          @visibility = args[:visibility] if args.key?(:visibility)
 | 
						|
        end
 | 
						|
      end
 | 
						|
      
 | 
						|
      # [Apple Push Notification Service](https://goo.gl/MXRTPa) specific options.
 | 
						|
      class ApnsConfig
 | 
						|
        include Google::Apis::Core::Hashable
 | 
						|
      
 | 
						|
        # Options for features provided by the FCM SDK for iOS.
 | 
						|
        # Corresponds to the JSON property `fcmOptions`
 | 
						|
        # @return [Google::Apis::FcmV1::ApnsFcmOptions]
 | 
						|
        attr_accessor :fcm_options
 | 
						|
      
 | 
						|
        # HTTP request headers defined in Apple Push Notification Service. Refer to [
 | 
						|
        # 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".
 | 
						|
        # Corresponds to the JSON property `headers`
 | 
						|
        # @return [Hash<String,String>]
 | 
						|
        attr_accessor :headers
 | 
						|
      
 | 
						|
        # APNs payload as a JSON object, including both `aps` dictionary and custom
 | 
						|
        # 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.
 | 
						|
        # Corresponds to the JSON property `payload`
 | 
						|
        # @return [Hash<String,Object>]
 | 
						|
        attr_accessor :payload
 | 
						|
      
 | 
						|
        def initialize(**args)
 | 
						|
           update!(**args)
 | 
						|
        end
 | 
						|
      
 | 
						|
        # Update properties of this object
 | 
						|
        def update!(**args)
 | 
						|
          @fcm_options = args[:fcm_options] if args.key?(:fcm_options)
 | 
						|
          @headers = args[:headers] if args.key?(:headers)
 | 
						|
          @payload = args[:payload] if args.key?(:payload)
 | 
						|
        end
 | 
						|
      end
 | 
						|
      
 | 
						|
      # Options for features provided by the FCM SDK for iOS.
 | 
						|
      class ApnsFcmOptions
 | 
						|
        include Google::Apis::Core::Hashable
 | 
						|
      
 | 
						|
        # Label associated with the message's analytics data.
 | 
						|
        # Corresponds to the JSON property `analyticsLabel`
 | 
						|
        # @return [String]
 | 
						|
        attr_accessor :analytics_label
 | 
						|
      
 | 
						|
        # 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.
 | 
						|
        # Corresponds to the JSON property `image`
 | 
						|
        # @return [String]
 | 
						|
        attr_accessor :image
 | 
						|
      
 | 
						|
        def initialize(**args)
 | 
						|
           update!(**args)
 | 
						|
        end
 | 
						|
      
 | 
						|
        # Update properties of this object
 | 
						|
        def update!(**args)
 | 
						|
          @analytics_label = args[:analytics_label] if args.key?(:analytics_label)
 | 
						|
          @image = args[:image] if args.key?(:image)
 | 
						|
        end
 | 
						|
      end
 | 
						|
      
 | 
						|
      # Represents a color in the RGBA color space. This representation is designed
 | 
						|
      # 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. Note: when color equality
 | 
						|
      # needs to be decided, implementations, unless documented otherwise, will treat
 | 
						|
      # two colors to be equal if all their red, green, blue and alpha values each
 | 
						|
      # differ by at most 1e-5. 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:&red
 | 
						|
      # green:&green blue:&blue alpha:&alpha]) ` return nil; ` Color* result = [[Color
 | 
						|
      # alloc] init]; [result setRed:red]; [result setGreen:green]; [result setBlue:
 | 
						|
      # blue]; if (alpha <= 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 << 16) | (green << 8) | blue); var
 | 
						|
      # hexString = rgbNumber.toString(16); var missingZeros = 6 - hexString.length;
 | 
						|
      # var resultBuilder = ['#']; for (var i = 0; i < missingZeros; i++) `
 | 
						|
      # resultBuilder.push('0'); ` resultBuilder.push(hexString); return resultBuilder.
 | 
						|
      # join(''); `; // ...
 | 
						|
      class Color
 | 
						|
        include Google::Apis::Core::Hashable
 | 
						|
      
 | 
						|
        # 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).
 | 
						|
        # Corresponds to the JSON property `alpha`
 | 
						|
        # @return [Float]
 | 
						|
        attr_accessor :alpha
 | 
						|
      
 | 
						|
        # The amount of blue in the color as a value in the interval [0, 1].
 | 
						|
        # Corresponds to the JSON property `blue`
 | 
						|
        # @return [Float]
 | 
						|
        attr_accessor :blue
 | 
						|
      
 | 
						|
        # The amount of green in the color as a value in the interval [0, 1].
 | 
						|
        # Corresponds to the JSON property `green`
 | 
						|
        # @return [Float]
 | 
						|
        attr_accessor :green
 | 
						|
      
 | 
						|
        # The amount of red in the color as a value in the interval [0, 1].
 | 
						|
        # Corresponds to the JSON property `red`
 | 
						|
        # @return [Float]
 | 
						|
        attr_accessor :red
 | 
						|
      
 | 
						|
        def initialize(**args)
 | 
						|
           update!(**args)
 | 
						|
        end
 | 
						|
      
 | 
						|
        # Update properties of this object
 | 
						|
        def update!(**args)
 | 
						|
          @alpha = args[:alpha] if args.key?(:alpha)
 | 
						|
          @blue = args[:blue] if args.key?(:blue)
 | 
						|
          @green = args[:green] if args.key?(:green)
 | 
						|
          @red = args[:red] if args.key?(:red)
 | 
						|
        end
 | 
						|
      end
 | 
						|
      
 | 
						|
      # Platform independent options for features provided by the FCM SDKs.
 | 
						|
      class FcmOptions
 | 
						|
        include Google::Apis::Core::Hashable
 | 
						|
      
 | 
						|
        # Label associated with the message's analytics data.
 | 
						|
        # Corresponds to the JSON property `analyticsLabel`
 | 
						|
        # @return [String]
 | 
						|
        attr_accessor :analytics_label
 | 
						|
      
 | 
						|
        def initialize(**args)
 | 
						|
           update!(**args)
 | 
						|
        end
 | 
						|
      
 | 
						|
        # Update properties of this object
 | 
						|
        def update!(**args)
 | 
						|
          @analytics_label = args[:analytics_label] if args.key?(:analytics_label)
 | 
						|
        end
 | 
						|
      end
 | 
						|
      
 | 
						|
      # Settings to control notification LED.
 | 
						|
      class LightSettings
 | 
						|
        include Google::Apis::Core::Hashable
 | 
						|
      
 | 
						|
        # Represents a color in the RGBA color space. This representation is designed
 | 
						|
        # 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. Note: when color equality
 | 
						|
        # needs to be decided, implementations, unless documented otherwise, will treat
 | 
						|
        # two colors to be equal if all their red, green, blue and alpha values each
 | 
						|
        # differ by at most 1e-5. 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:&red
 | 
						|
        # green:&green blue:&blue alpha:&alpha]) ` return nil; ` Color* result = [[Color
 | 
						|
        # alloc] init]; [result setRed:red]; [result setGreen:green]; [result setBlue:
 | 
						|
        # blue]; if (alpha <= 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 << 16) | (green << 8) | blue); var
 | 
						|
        # hexString = rgbNumber.toString(16); var missingZeros = 6 - hexString.length;
 | 
						|
        # var resultBuilder = ['#']; for (var i = 0; i < missingZeros; i++) `
 | 
						|
        # resultBuilder.push('0'); ` resultBuilder.push(hexString); return resultBuilder.
 | 
						|
        # join(''); `; // ...
 | 
						|
        # Corresponds to the JSON property `color`
 | 
						|
        # @return [Google::Apis::FcmV1::Color]
 | 
						|
        attr_accessor :color
 | 
						|
      
 | 
						|
        # 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)
 | 
						|
        # Corresponds to the JSON property `lightOffDuration`
 | 
						|
        # @return [String]
 | 
						|
        attr_accessor :light_off_duration
 | 
						|
      
 | 
						|
        # 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)
 | 
						|
        # Corresponds to the JSON property `lightOnDuration`
 | 
						|
        # @return [String]
 | 
						|
        attr_accessor :light_on_duration
 | 
						|
      
 | 
						|
        def initialize(**args)
 | 
						|
           update!(**args)
 | 
						|
        end
 | 
						|
      
 | 
						|
        # Update properties of this object
 | 
						|
        def update!(**args)
 | 
						|
          @color = args[:color] if args.key?(:color)
 | 
						|
          @light_off_duration = args[:light_off_duration] if args.key?(:light_off_duration)
 | 
						|
          @light_on_duration = args[:light_on_duration] if args.key?(:light_on_duration)
 | 
						|
        end
 | 
						|
      end
 | 
						|
      
 | 
						|
      # Message to send by Firebase Cloud Messaging Service.
 | 
						|
      class Message
 | 
						|
        include Google::Apis::Core::Hashable
 | 
						|
      
 | 
						|
        # Android specific options for messages sent through [FCM connection server](
 | 
						|
        # https://goo.gl/4GLdUl).
 | 
						|
        # Corresponds to the JSON property `android`
 | 
						|
        # @return [Google::Apis::FcmV1::AndroidConfig]
 | 
						|
        attr_accessor :android
 | 
						|
      
 | 
						|
        # [Apple Push Notification Service](https://goo.gl/MXRTPa) specific options.
 | 
						|
        # Corresponds to the JSON property `apns`
 | 
						|
        # @return [Google::Apis::FcmV1::ApnsConfig]
 | 
						|
        attr_accessor :apns
 | 
						|
      
 | 
						|
        # Condition to send a message to, e.g. "'foo' in topics && 'bar' in topics".
 | 
						|
        # Corresponds to the JSON property `condition`
 | 
						|
        # @return [String]
 | 
						|
        attr_accessor :condition
 | 
						|
      
 | 
						|
        # 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").
 | 
						|
        # Corresponds to the JSON property `data`
 | 
						|
        # @return [Hash<String,String>]
 | 
						|
        attr_accessor :data
 | 
						|
      
 | 
						|
        # Platform independent options for features provided by the FCM SDKs.
 | 
						|
        # Corresponds to the JSON property `fcmOptions`
 | 
						|
        # @return [Google::Apis::FcmV1::FcmOptions]
 | 
						|
        attr_accessor :fcm_options
 | 
						|
      
 | 
						|
        # Output Only. The identifier of the message sent, in the format of `projects/*/
 | 
						|
        # messages/`message_id``.
 | 
						|
        # Corresponds to the JSON property `name`
 | 
						|
        # @return [String]
 | 
						|
        attr_accessor :name
 | 
						|
      
 | 
						|
        # Basic notification template to use across all platforms.
 | 
						|
        # Corresponds to the JSON property `notification`
 | 
						|
        # @return [Google::Apis::FcmV1::Notification]
 | 
						|
        attr_accessor :notification
 | 
						|
      
 | 
						|
        # Registration token to send a message to.
 | 
						|
        # Corresponds to the JSON property `token`
 | 
						|
        # @return [String]
 | 
						|
        attr_accessor :token
 | 
						|
      
 | 
						|
        # Topic name to send a message to, e.g. "weather". Note: "/topics/" prefix
 | 
						|
        # should not be provided.
 | 
						|
        # Corresponds to the JSON property `topic`
 | 
						|
        # @return [String]
 | 
						|
        attr_accessor :topic
 | 
						|
      
 | 
						|
        # [Webpush protocol](https://tools.ietf.org/html/rfc8030) options.
 | 
						|
        # Corresponds to the JSON property `webpush`
 | 
						|
        # @return [Google::Apis::FcmV1::WebpushConfig]
 | 
						|
        attr_accessor :webpush
 | 
						|
      
 | 
						|
        def initialize(**args)
 | 
						|
           update!(**args)
 | 
						|
        end
 | 
						|
      
 | 
						|
        # Update properties of this object
 | 
						|
        def update!(**args)
 | 
						|
          @android = args[:android] if args.key?(:android)
 | 
						|
          @apns = args[:apns] if args.key?(:apns)
 | 
						|
          @condition = args[:condition] if args.key?(:condition)
 | 
						|
          @data = args[:data] if args.key?(:data)
 | 
						|
          @fcm_options = args[:fcm_options] if args.key?(:fcm_options)
 | 
						|
          @name = args[:name] if args.key?(:name)
 | 
						|
          @notification = args[:notification] if args.key?(:notification)
 | 
						|
          @token = args[:token] if args.key?(:token)
 | 
						|
          @topic = args[:topic] if args.key?(:topic)
 | 
						|
          @webpush = args[:webpush] if args.key?(:webpush)
 | 
						|
        end
 | 
						|
      end
 | 
						|
      
 | 
						|
      # Basic notification template to use across all platforms.
 | 
						|
      class Notification
 | 
						|
        include Google::Apis::Core::Hashable
 | 
						|
      
 | 
						|
        # The notification's body text.
 | 
						|
        # Corresponds to the JSON property `body`
 | 
						|
        # @return [String]
 | 
						|
        attr_accessor :body
 | 
						|
      
 | 
						|
        # 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
 | 
						|
        # Corresponds to the JSON property `image`
 | 
						|
        # @return [String]
 | 
						|
        attr_accessor :image
 | 
						|
      
 | 
						|
        # The notification's title.
 | 
						|
        # Corresponds to the JSON property `title`
 | 
						|
        # @return [String]
 | 
						|
        attr_accessor :title
 | 
						|
      
 | 
						|
        def initialize(**args)
 | 
						|
           update!(**args)
 | 
						|
        end
 | 
						|
      
 | 
						|
        # Update properties of this object
 | 
						|
        def update!(**args)
 | 
						|
          @body = args[:body] if args.key?(:body)
 | 
						|
          @image = args[:image] if args.key?(:image)
 | 
						|
          @title = args[:title] if args.key?(:title)
 | 
						|
        end
 | 
						|
      end
 | 
						|
      
 | 
						|
      # Request to send a message to specified target.
 | 
						|
      class SendMessageRequest
 | 
						|
        include Google::Apis::Core::Hashable
 | 
						|
      
 | 
						|
        # Message to send by Firebase Cloud Messaging Service.
 | 
						|
        # Corresponds to the JSON property `message`
 | 
						|
        # @return [Google::Apis::FcmV1::Message]
 | 
						|
        attr_accessor :message
 | 
						|
      
 | 
						|
        # Flag for testing the request without actually delivering the message.
 | 
						|
        # Corresponds to the JSON property `validateOnly`
 | 
						|
        # @return [Boolean]
 | 
						|
        attr_accessor :validate_only
 | 
						|
        alias_method :validate_only?, :validate_only
 | 
						|
      
 | 
						|
        def initialize(**args)
 | 
						|
           update!(**args)
 | 
						|
        end
 | 
						|
      
 | 
						|
        # Update properties of this object
 | 
						|
        def update!(**args)
 | 
						|
          @message = args[:message] if args.key?(:message)
 | 
						|
          @validate_only = args[:validate_only] if args.key?(:validate_only)
 | 
						|
        end
 | 
						|
      end
 | 
						|
      
 | 
						|
      # [Webpush protocol](https://tools.ietf.org/html/rfc8030) options.
 | 
						|
      class WebpushConfig
 | 
						|
        include Google::Apis::Core::Hashable
 | 
						|
      
 | 
						|
        # Arbitrary key/value payload. If present, it will override google.firebase.fcm.
 | 
						|
        # v1.Message.data.
 | 
						|
        # Corresponds to the JSON property `data`
 | 
						|
        # @return [Hash<String,String>]
 | 
						|
        attr_accessor :data
 | 
						|
      
 | 
						|
        # Options for features provided by the FCM SDK for Web.
 | 
						|
        # Corresponds to the JSON property `fcmOptions`
 | 
						|
        # @return [Google::Apis::FcmV1::WebpushFcmOptions]
 | 
						|
        attr_accessor :fcm_options
 | 
						|
      
 | 
						|
        # 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".
 | 
						|
        # Corresponds to the JSON property `headers`
 | 
						|
        # @return [Hash<String,String>]
 | 
						|
        attr_accessor :headers
 | 
						|
      
 | 
						|
        # 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 present, "title" and "body" fields
 | 
						|
        # override [google.firebase.fcm.v1.Notification.title] and [google.firebase.fcm.
 | 
						|
        # v1.Notification.body].
 | 
						|
        # Corresponds to the JSON property `notification`
 | 
						|
        # @return [Hash<String,Object>]
 | 
						|
        attr_accessor :notification
 | 
						|
      
 | 
						|
        def initialize(**args)
 | 
						|
           update!(**args)
 | 
						|
        end
 | 
						|
      
 | 
						|
        # Update properties of this object
 | 
						|
        def update!(**args)
 | 
						|
          @data = args[:data] if args.key?(:data)
 | 
						|
          @fcm_options = args[:fcm_options] if args.key?(:fcm_options)
 | 
						|
          @headers = args[:headers] if args.key?(:headers)
 | 
						|
          @notification = args[:notification] if args.key?(:notification)
 | 
						|
        end
 | 
						|
      end
 | 
						|
      
 | 
						|
      # Options for features provided by the FCM SDK for Web.
 | 
						|
      class WebpushFcmOptions
 | 
						|
        include Google::Apis::Core::Hashable
 | 
						|
      
 | 
						|
        # Label associated with the message's analytics data.
 | 
						|
        # Corresponds to the JSON property `analyticsLabel`
 | 
						|
        # @return [String]
 | 
						|
        attr_accessor :analytics_label
 | 
						|
      
 | 
						|
        # The link to open when the user clicks on the notification. For all URL values,
 | 
						|
        # HTTPS is required.
 | 
						|
        # Corresponds to the JSON property `link`
 | 
						|
        # @return [String]
 | 
						|
        attr_accessor :link
 | 
						|
      
 | 
						|
        def initialize(**args)
 | 
						|
           update!(**args)
 | 
						|
        end
 | 
						|
      
 | 
						|
        # Update properties of this object
 | 
						|
        def update!(**args)
 | 
						|
          @analytics_label = args[:analytics_label] if args.key?(:analytics_label)
 | 
						|
          @link = args[:link] if args.key?(:link)
 | 
						|
        end
 | 
						|
      end
 | 
						|
    end
 | 
						|
  end
 | 
						|
end
 |