Documentation

Overview

Package fcm provides access to the Firebase Cloud Messaging API.

For product documentation, see: https://firebase.google.com/docs/cloud-messaging

Creating a client

Usage example:

import "google.golang.org/api/fcm/v1"
...
ctx := context.Background()
fcmService, err := fcm.NewService(ctx)

In this example, Google Application Default Credentials are used for authentication.

For information on how to create and obtain Application Default Credentials, see https://developers.google.com/identity/protocols/application-default-credentials.

Other authentication options

To use an API key for authentication (note: some APIs do not support API keys), use option.WithAPIKey:

fcmService, err := fcm.NewService(ctx, option.WithAPIKey("AIza..."))

To use an OAuth token (e.g., a user token obtained via a three-legged OAuth flow), use option.WithTokenSource:

config := &oauth2.Config{...}
// ...
token, err := config.Exchange(ctx, ...)
fcmService, err := fcm.NewService(ctx, option.WithTokenSource(config.TokenSource(ctx, token)))

See https://godoc.org/google.golang.org/api/option/ for details on options.

Index

Constants

View Source
const (
	// View and manage your data across Google Cloud Platform services
	CloudPlatformScope = "https://www.googleapis.com/auth/cloud-platform"
)

    OAuth2 scopes used by this API.

    Variables

    This section is empty.

    Functions

    This section is empty.

    Types

    type AndroidConfig

    type AndroidConfig struct {
    	// CollapseKey: 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.
    	CollapseKey string `json:"collapseKey,omitempty"`
    
    	// Data: Arbitrary key/value payload. If present, it will
    	// override
    	// google.firebase.fcm.v1.Message.data.
    	Data map[string]string `json:"data,omitempty"`
    
    	// DirectBootOk: 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
    	// ).
    	DirectBootOk bool `json:"directBootOk,omitempty"`
    
    	// FcmOptions: Options for features provided by the FCM SDK for Android.
    	FcmOptions *AndroidFcmOptions `json:"fcmOptions,omitempty"`
    
    	// Notification: Notification to send to android devices.
    	Notification *AndroidNotification `json:"notification,omitempty"`
    
    	// Priority: Message priority. Can take "normal" and "high" values.
    	// For more information, see [Setting the priority of
    	// a
    	// message](https://goo.gl/GjONJv).
    	//
    	// Possible values:
    	//   "NORMAL" - Default priority for data messages. Normal priority
    	// messages won't open
    	// network connections on a sleeping device, and their delivery may
    	// be
    	// delayed to conserve the battery. For less time-sensitive messages,
    	// such
    	// as notifications of new email or other data to sync, choose
    	// normal
    	// delivery priority.
    	//   "HIGH" - Default priority for notification messages. FCM attempts
    	// to deliver high
    	// priority messages immediately, allowing the FCM service to wake
    	// a
    	// sleeping device when possible and open a network connection to your
    	// app
    	// server. Apps with instant messaging, chat, or voice call alerts,
    	// for
    	// example, generally need to open a network connection and make sure
    	// FCM
    	// delivers the message to the device without delay. Set high priority
    	// if
    	// the message is time-critical and requires the user's
    	// immediate
    	// interaction, but beware that setting your messages to high
    	// priority
    	// contributes more to battery drain compared with normal priority
    	// messages.
    	Priority string `json:"priority,omitempty"`
    
    	// RestrictedPackageName: Package name of the application where the
    	// registration token must match in
    	// order to receive the message.
    	RestrictedPackageName string `json:"restrictedPackageName,omitempty"`
    
    	// Ttl: 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.
    	Ttl string `json:"ttl,omitempty"`
    
    	// ForceSendFields is a list of field names (e.g. "CollapseKey") to
    	// unconditionally include in API requests. By default, fields with
    	// empty values are omitted from API requests. However, any non-pointer,
    	// non-interface field appearing in ForceSendFields will be sent to the
    	// server regardless of whether the field is empty or not. This may be
    	// used to include empty fields in Patch requests.
    	ForceSendFields []string `json:"-"`
    
    	// NullFields is a list of field names (e.g. "CollapseKey") to include
    	// in API requests with the JSON null value. By default, fields with
    	// empty values are omitted from API requests. However, any field with
    	// an empty value appearing in NullFields will be sent to the server as
    	// null. It is an error if a field in this list has a non-empty value.
    	// This may be used to include null fields in Patch requests.
    	NullFields []string `json:"-"`
    }

      AndroidConfig: Android specific options for messages sent through [FCM connection server](https://goo.gl/4GLdUl).

      func (*AndroidConfig) MarshalJSON

      func (s *AndroidConfig) MarshalJSON() ([]byte, error)

      type AndroidFcmOptions

      type AndroidFcmOptions struct {
      	// AnalyticsLabel: Label associated with the message's analytics data.
      	AnalyticsLabel string `json:"analyticsLabel,omitempty"`
      
      	// ForceSendFields is a list of field names (e.g. "AnalyticsLabel") to
      	// unconditionally include in API requests. By default, fields with
      	// empty values are omitted from API requests. However, any non-pointer,
      	// non-interface field appearing in ForceSendFields will be sent to the
      	// server regardless of whether the field is empty or not. This may be
      	// used to include empty fields in Patch requests.
      	ForceSendFields []string `json:"-"`
      
      	// NullFields is a list of field names (e.g. "AnalyticsLabel") to
      	// include in API requests with the JSON null value. By default, fields
      	// with empty values are omitted from API requests. However, any field
      	// with an empty value appearing in NullFields will be sent to the
      	// server as null. It is an error if a field in this list has a
      	// non-empty value. This may be used to include null fields in Patch
      	// requests.
      	NullFields []string `json:"-"`
      }

        AndroidFcmOptions: Options for features provided by the FCM SDK for Android.

        func (*AndroidFcmOptions) MarshalJSON

        func (s *AndroidFcmOptions) MarshalJSON() ([]byte, error)

        type AndroidNotification

        type AndroidNotification struct {
        	// Body: The notification's body text. If present, it will
        	// override
        	// google.firebase.fcm.v1.Notification.body.
        	Body string `json:"body,omitempty"`
        
        	// 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.
        	BodyLocArgs []string `json:"bodyLocArgs,omitempty"`
        
        	// BodyLocKey: 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.
        	BodyLocKey string `json:"bodyLocKey,omitempty"`
        
        	// ChannelId: The [notification's
        	// channel
        	// id](https://developer.android.com/guide/topics/ui/notifiers/no
        	// tifications#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.
        	ChannelId string `json:"channelId,omitempty"`
        
        	// ClickAction: 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.
        	ClickAction string `json:"clickAction,omitempty"`
        
        	// Color: The notification's icon color, expressed in #rrggbb format.
        	Color string `json:"color,omitempty"`
        
        	// DefaultLightSettings: 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/b
        	// ase/+/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.
        	DefaultLightSettings bool `json:"defaultLightSettings,omitempty"`
        
        	// DefaultSound: 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/b
        	// ase/+/master/core/res/res/values/config.xml).
        	DefaultSound bool `json:"defaultSound,omitempty"`
        
        	// DefaultVibrateTimings: 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/b
        	// ase/+/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`.
        	DefaultVibrateTimings bool `json:"defaultVibrateTimings,omitempty"`
        
        	// EventTime: 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-buff
        	// ers/docs/reference/java/com/google/protobuf/Timestamp).
        	EventTime string `json:"eventTime,omitempty"`
        
        	// Icon: 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.
        	Icon string `json:"icon,omitempty"`
        
        	// Image: 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.
        	Image string `json:"image,omitempty"`
        
        	// LightSettings: 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.
        	LightSettings *LightSettings `json:"lightSettings,omitempty"`
        
        	// LocalOnly: 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/notificati
        	// ons/bridger#existing-method-of-preventing-bridging)
        	LocalOnly bool `json:"localOnly,omitempty"`
        
        	// NotificationCount: 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-use
        	// r/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.
        	NotificationCount int64 `json:"notificationCount,omitempty"`
        
        	// NotificationPriority: 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/refe
        	// rence/fcm/rest/v1/projects.messages#androidmessagepriority)
        	// is an FCM concept that controls when the message is delivered.
        	//
        	// Possible values:
        	//   "PRIORITY_UNSPECIFIED" - If priority is unspecified, notification
        	// priority is set to
        	// `PRIORITY_DEFAULT`.
        	//   "PRIORITY_MIN" - Lowest notification priority. Notifications with
        	// this `PRIORITY_MIN`
        	// might not be shown to the user except under special
        	// circumstances,
        	// such as detailed notification logs.
        	//   "PRIORITY_LOW" - Lower notification priority. The UI may choose to
        	// show the notifications
        	// smaller, or at a different position in the list, compared
        	// with
        	// notifications with `PRIORITY_DEFAULT`.
        	//   "PRIORITY_DEFAULT" - Default notification priority. If the
        	// application does not prioritize its
        	// own notifications, use this value for all notifications.
        	//   "PRIORITY_HIGH" - Higher notification priority. Use this for more
        	// important notifications
        	// or alerts. The UI may choose to show these notifications larger, or
        	// at a
        	// different position in the notification lists, compared with
        	// notifications
        	// with `PRIORITY_DEFAULT`.
        	//   "PRIORITY_MAX" - Highest notification priority. Use this for the
        	// application's most
        	// important items that require the user's prompt attention or input.
        	NotificationPriority string `json:"notificationPriority,omitempty"`
        
        	// Sound: 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/.
        	Sound string `json:"sound,omitempty"`
        
        	// Sticky: 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.
        	Sticky bool `json:"sticky,omitempty"`
        
        	// Tag: 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.
        	Tag string `json:"tag,omitempty"`
        
        	// Ticker: 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.
        	Ticker string `json:"ticker,omitempty"`
        
        	// Title: The notification's title. If present, it will
        	// override
        	// google.firebase.fcm.v1.Notification.title.
        	Title string `json:"title,omitempty"`
        
        	// 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.
        	TitleLocArgs []string `json:"titleLocArgs,omitempty"`
        
        	// TitleLocKey: 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.
        	TitleLocKey string `json:"titleLocKey,omitempty"`
        
        	// 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`.
        	VibrateTimings []string `json:"vibrateTimings,omitempty"`
        
        	// Visibility: Set
        	// the
        	// [Notification.visibility](https://developer.android.com/reference/
        	// android/app/Notification.html#visibility)
        	// of the notification.
        	//
        	// Possible values:
        	//   "VISIBILITY_UNSPECIFIED" - If unspecified, default to
        	// `Visibility.PRIVATE`.
        	//   "PRIVATE" - Show this notification on all lockscreens, but conceal
        	// sensitive or
        	// private information on secure lockscreens.
        	//   "PUBLIC" - Show this notification in its entirety on all
        	// lockscreens.
        	//   "SECRET" - Do not reveal any part of this notification on a secure
        	// lockscreen.
        	Visibility string `json:"visibility,omitempty"`
        
        	// ForceSendFields is a list of field names (e.g. "Body") to
        	// unconditionally include in API requests. By default, fields with
        	// empty values are omitted from API requests. However, any non-pointer,
        	// non-interface field appearing in ForceSendFields will be sent to the
        	// server regardless of whether the field is empty or not. This may be
        	// used to include empty fields in Patch requests.
        	ForceSendFields []string `json:"-"`
        
        	// NullFields is a list of field names (e.g. "Body") to include in API
        	// requests with the JSON null value. By default, fields with empty
        	// values are omitted from API requests. However, any field with an
        	// empty value appearing in NullFields will be sent to the server as
        	// null. It is an error if a field in this list has a non-empty value.
        	// This may be used to include null fields in Patch requests.
        	NullFields []string `json:"-"`
        }

          AndroidNotification: Notification to send to android devices.

          func (*AndroidNotification) MarshalJSON

          func (s *AndroidNotification) MarshalJSON() ([]byte, error)

          type ApnsConfig

          type ApnsConfig struct {
          	// FcmOptions: Options for features provided by the FCM SDK for iOS.
          	FcmOptions *ApnsFcmOptions `json:"fcmOptions,omitempty"`
          
          	// Headers: HTTP request headers defined in Apple Push Notification
          	// Service. Refer to
          	// [APNs
          	// request
          	// headers](https://developer.apple.com/documentation/usernotific
          	// ations/setting_up_a_remote_notification_server/sending_notification_re
          	// quests_to_apns)
          	// for supported headers, e.g. "apns-priority": "10".
          	Headers map[string]string `json:"headers,omitempty"`
          
          	// Payload: APNs payload as a JSON object, including both `aps`
          	// dictionary and custom
          	// payload. See [Payload
          	// Key
          	// Reference](https://developer.apple.com/documentation/usernotificat
          	// ions/setting_up_a_remote_notification_server/generating_a_remote_notif
          	// ication).
          	// If present, it overrides
          	// google.firebase.fcm.v1.Notification.title
          	// and google.firebase.fcm.v1.Notification.body.
          	Payload googleapi.RawMessage `json:"payload,omitempty"`
          
          	// ForceSendFields is a list of field names (e.g. "FcmOptions") to
          	// unconditionally include in API requests. By default, fields with
          	// empty values are omitted from API requests. However, any non-pointer,
          	// non-interface field appearing in ForceSendFields will be sent to the
          	// server regardless of whether the field is empty or not. This may be
          	// used to include empty fields in Patch requests.
          	ForceSendFields []string `json:"-"`
          
          	// NullFields is a list of field names (e.g. "FcmOptions") to include in
          	// API requests with the JSON null value. By default, fields with empty
          	// values are omitted from API requests. However, any field with an
          	// empty value appearing in NullFields will be sent to the server as
          	// null. It is an error if a field in this list has a non-empty value.
          	// This may be used to include null fields in Patch requests.
          	NullFields []string `json:"-"`
          }

            ApnsConfig: [Apple Push Notification Service](https://goo.gl/MXRTPa) specific options.

            func (*ApnsConfig) MarshalJSON

            func (s *ApnsConfig) MarshalJSON() ([]byte, error)

            type ApnsFcmOptions

            type ApnsFcmOptions struct {
            	// AnalyticsLabel: Label associated with the message's analytics data.
            	AnalyticsLabel string `json:"analyticsLabel,omitempty"`
            
            	// Image: 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.
            	Image string `json:"image,omitempty"`
            
            	// ForceSendFields is a list of field names (e.g. "AnalyticsLabel") to
            	// unconditionally include in API requests. By default, fields with
            	// empty values are omitted from API requests. However, any non-pointer,
            	// non-interface field appearing in ForceSendFields will be sent to the
            	// server regardless of whether the field is empty or not. This may be
            	// used to include empty fields in Patch requests.
            	ForceSendFields []string `json:"-"`
            
            	// NullFields is a list of field names (e.g. "AnalyticsLabel") to
            	// include in API requests with the JSON null value. By default, fields
            	// with empty values are omitted from API requests. However, any field
            	// with an empty value appearing in NullFields will be sent to the
            	// server as null. It is an error if a field in this list has a
            	// non-empty value. This may be used to include null fields in Patch
            	// requests.
            	NullFields []string `json:"-"`
            }

              ApnsFcmOptions: Options for features provided by the FCM SDK for iOS.

              func (*ApnsFcmOptions) MarshalJSON

              func (s *ApnsFcmOptions) MarshalJSON() ([]byte, error)

              type Color

              type Color struct {
              	// Alpha: 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).
              	Alpha float64 `json:"alpha,omitempty"`
              
              	// Blue: The amount of blue in the color as a value in the interval [0,
              	// 1].
              	Blue float64 `json:"blue,omitempty"`
              
              	// Green: The amount of green in the color as a value in the interval
              	// [0, 1].
              	Green float64 `json:"green,omitempty"`
              
              	// Red: The amount of red in the color as a value in the interval [0,
              	// 1].
              	Red float64 `json:"red,omitempty"`
              
              	// ForceSendFields is a list of field names (e.g. "Alpha") to
              	// unconditionally include in API requests. By default, fields with
              	// empty values are omitted from API requests. However, any non-pointer,
              	// non-interface field appearing in ForceSendFields will be sent to the
              	// server regardless of whether the field is empty or not. This may be
              	// used to include empty fields in Patch requests.
              	ForceSendFields []string `json:"-"`
              
              	// NullFields is a list of field names (e.g. "Alpha") to include in API
              	// requests with the JSON null value. By default, fields with empty
              	// values are omitted from API requests. However, any field with an
              	// empty value appearing in NullFields will be sent to the server as
              	// null. It is an error if a field in this list has a non-empty value.
              	// This may be used to include null fields in Patch requests.
              	NullFields []string `json:"-"`
              }

                Color: 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.

                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(”);
                   };
                
                   // ...
                

                func (*Color) MarshalJSON

                func (s *Color) MarshalJSON() ([]byte, error)

                func (*Color) UnmarshalJSON

                func (s *Color) UnmarshalJSON(data []byte) error

                type FcmOptions

                type FcmOptions struct {
                	// AnalyticsLabel: Label associated with the message's analytics data.
                	AnalyticsLabel string `json:"analyticsLabel,omitempty"`
                
                	// ForceSendFields is a list of field names (e.g. "AnalyticsLabel") to
                	// unconditionally include in API requests. By default, fields with
                	// empty values are omitted from API requests. However, any non-pointer,
                	// non-interface field appearing in ForceSendFields will be sent to the
                	// server regardless of whether the field is empty or not. This may be
                	// used to include empty fields in Patch requests.
                	ForceSendFields []string `json:"-"`
                
                	// NullFields is a list of field names (e.g. "AnalyticsLabel") to
                	// include in API requests with the JSON null value. By default, fields
                	// with empty values are omitted from API requests. However, any field
                	// with an empty value appearing in NullFields will be sent to the
                	// server as null. It is an error if a field in this list has a
                	// non-empty value. This may be used to include null fields in Patch
                	// requests.
                	NullFields []string `json:"-"`
                }

                  FcmOptions: Platform independent options for features provided by the FCM SDKs.

                  func (*FcmOptions) MarshalJSON

                  func (s *FcmOptions) MarshalJSON() ([]byte, error)

                  type LightSettings

                  type LightSettings struct {
                  	// Color: Required. Set `color` of the LED
                  	// with
                  	// [google.type.Color](https://github.com/googleapis/googleapis/blob
                  	// /master/google/type/color.proto).
                  	Color *Color `json:"color,omitempty"`
                  
                  	// LightOffDuration: Required. Along with `light_on_duration `, define
                  	// the blink rate of LED
                  	// flashes. Resolution defined
                  	// by
                  	// [proto.Duration](https://developers.google.com/protocol-buffers/doc
                  	// s/reference/google.protobuf#google.protobuf.Duration)
                  	LightOffDuration string `json:"lightOffDuration,omitempty"`
                  
                  	// LightOnDuration: Required. Along with `light_off_duration`, define
                  	// the blink rate of LED
                  	// flashes. Resolution defined
                  	// by
                  	// [proto.Duration](https://developers.google.com/protocol-buffers/doc
                  	// s/reference/google.protobuf#google.protobuf.Duration)
                  	LightOnDuration string `json:"lightOnDuration,omitempty"`
                  
                  	// ForceSendFields is a list of field names (e.g. "Color") to
                  	// unconditionally include in API requests. By default, fields with
                  	// empty values are omitted from API requests. However, any non-pointer,
                  	// non-interface field appearing in ForceSendFields will be sent to the
                  	// server regardless of whether the field is empty or not. This may be
                  	// used to include empty fields in Patch requests.
                  	ForceSendFields []string `json:"-"`
                  
                  	// NullFields is a list of field names (e.g. "Color") to include in API
                  	// requests with the JSON null value. By default, fields with empty
                  	// values are omitted from API requests. However, any field with an
                  	// empty value appearing in NullFields will be sent to the server as
                  	// null. It is an error if a field in this list has a non-empty value.
                  	// This may be used to include null fields in Patch requests.
                  	NullFields []string `json:"-"`
                  }

                    LightSettings: Settings to control notification LED.

                    func (*LightSettings) MarshalJSON

                    func (s *LightSettings) MarshalJSON() ([]byte, error)

                    type Message

                    type Message struct {
                    	// Android: Input only. Android specific options for messages sent
                    	// through
                    	// [FCM connection server](https://goo.gl/4GLdUl).
                    	Android *AndroidConfig `json:"android,omitempty"`
                    
                    	// Apns: Input only. [Apple Push Notification
                    	// Service](https://goo.gl/MXRTPa)
                    	// specific options.
                    	Apns *ApnsConfig `json:"apns,omitempty"`
                    
                    	// Condition: Condition to send a message to,
                    	// e.g. "'foo' in topics && 'bar' in topics".
                    	Condition string `json:"condition,omitempty"`
                    
                    	// 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").
                    	Data map[string]string `json:"data,omitempty"`
                    
                    	// FcmOptions: Input only. Template for FCM SDK feature options to use
                    	// across all
                    	// platforms.
                    	FcmOptions *FcmOptions `json:"fcmOptions,omitempty"`
                    
                    	// Name: Output Only. The identifier of the message sent, in the format
                    	// of
                    	// `projects/*/messages/{message_id}`.
                    	Name string `json:"name,omitempty"`
                    
                    	// Notification: Input only. Basic notification template to use across
                    	// all platforms.
                    	Notification *Notification `json:"notification,omitempty"`
                    
                    	// Token: Registration token to send a message to.
                    	Token string `json:"token,omitempty"`
                    
                    	// Topic: Topic name to send a message to, e.g. "weather".
                    	// Note: "/topics/" prefix should not be provided.
                    	Topic string `json:"topic,omitempty"`
                    
                    	// Webpush: Input only. [Webpush
                    	// protocol](https://tools.ietf.org/html/rfc8030)
                    	// options.
                    	Webpush *WebpushConfig `json:"webpush,omitempty"`
                    
                    	// ServerResponse contains the HTTP response code and headers from the
                    	// server.
                    	googleapi.ServerResponse `json:"-"`
                    
                    	// ForceSendFields is a list of field names (e.g. "Android") to
                    	// unconditionally include in API requests. By default, fields with
                    	// empty values are omitted from API requests. However, any non-pointer,
                    	// non-interface field appearing in ForceSendFields will be sent to the
                    	// server regardless of whether the field is empty or not. This may be
                    	// used to include empty fields in Patch requests.
                    	ForceSendFields []string `json:"-"`
                    
                    	// NullFields is a list of field names (e.g. "Android") to include in
                    	// API requests with the JSON null value. By default, fields with empty
                    	// values are omitted from API requests. However, any field with an
                    	// empty value appearing in NullFields will be sent to the server as
                    	// null. It is an error if a field in this list has a non-empty value.
                    	// This may be used to include null fields in Patch requests.
                    	NullFields []string `json:"-"`
                    }

                      Message: Message to send by Firebase Cloud Messaging Service.

                      func (*Message) MarshalJSON

                      func (s *Message) MarshalJSON() ([]byte, error)

                      type Notification

                      type Notification struct {
                      	// Body: The notification's body text.
                      	Body string `json:"body,omitempty"`
                      
                      	// Image: 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
                      	Image string `json:"image,omitempty"`
                      
                      	// Title: The notification's title.
                      	Title string `json:"title,omitempty"`
                      
                      	// ForceSendFields is a list of field names (e.g. "Body") to
                      	// unconditionally include in API requests. By default, fields with
                      	// empty values are omitted from API requests. However, any non-pointer,
                      	// non-interface field appearing in ForceSendFields will be sent to the
                      	// server regardless of whether the field is empty or not. This may be
                      	// used to include empty fields in Patch requests.
                      	ForceSendFields []string `json:"-"`
                      
                      	// NullFields is a list of field names (e.g. "Body") to include in API
                      	// requests with the JSON null value. By default, fields with empty
                      	// values are omitted from API requests. However, any field with an
                      	// empty value appearing in NullFields will be sent to the server as
                      	// null. It is an error if a field in this list has a non-empty value.
                      	// This may be used to include null fields in Patch requests.
                      	NullFields []string `json:"-"`
                      }

                        Notification: Basic notification template to use across all platforms.

                        func (*Notification) MarshalJSON

                        func (s *Notification) MarshalJSON() ([]byte, error)

                        type ProjectsMessagesSendCall

                        type ProjectsMessagesSendCall struct {
                        	// contains filtered or unexported fields
                        }

                        func (*ProjectsMessagesSendCall) Context

                          Context sets the context to be used in this call's Do method. Any pending HTTP request will be aborted if the provided context is canceled.

                          func (*ProjectsMessagesSendCall) Do

                            Do executes the "fcm.projects.messages.send" call. Exactly one of *Message or error will be non-nil. Any non-2xx status code is an error. Response headers are in either *Message.ServerResponse.Header or (if a response was returned at all) in error.(*googleapi.Error).Header. Use googleapi.IsNotModified to check whether the returned error was because http.StatusNotModified was returned.

                            func (*ProjectsMessagesSendCall) Fields

                              Fields allows partial responses to be retrieved. See https://developers.google.com/gdata/docs/2.0/basics#PartialResponse for more information.

                              func (*ProjectsMessagesSendCall) Header

                              func (c *ProjectsMessagesSendCall) Header() http.Header

                                Header returns an http.Header that can be modified by the caller to add HTTP headers to the request.

                                type ProjectsMessagesService

                                type ProjectsMessagesService struct {
                                	// contains filtered or unexported fields
                                }

                                func NewProjectsMessagesService

                                func NewProjectsMessagesService(s *Service) *ProjectsMessagesService

                                func (*ProjectsMessagesService) Send

                                func (r *ProjectsMessagesService) Send(parentid string, sendmessagerequest *SendMessageRequest) *ProjectsMessagesSendCall

                                  Send: Send a message to specified target (a registration token, topic or condition).

                                  type ProjectsService

                                  type ProjectsService struct {
                                  	Messages *ProjectsMessagesService
                                  	// contains filtered or unexported fields
                                  }

                                  func NewProjectsService

                                  func NewProjectsService(s *Service) *ProjectsService

                                  type SendMessageRequest

                                  type SendMessageRequest struct {
                                  	// Message: Required. Message to send.
                                  	Message *Message `json:"message,omitempty"`
                                  
                                  	// ValidateOnly: Flag for testing the request without actually
                                  	// delivering the message.
                                  	ValidateOnly bool `json:"validateOnly,omitempty"`
                                  
                                  	// ForceSendFields is a list of field names (e.g. "Message") to
                                  	// unconditionally include in API requests. By default, fields with
                                  	// empty values are omitted from API requests. However, any non-pointer,
                                  	// non-interface field appearing in ForceSendFields will be sent to the
                                  	// server regardless of whether the field is empty or not. This may be
                                  	// used to include empty fields in Patch requests.
                                  	ForceSendFields []string `json:"-"`
                                  
                                  	// NullFields is a list of field names (e.g. "Message") to include in
                                  	// API requests with the JSON null value. By default, fields with empty
                                  	// values are omitted from API requests. However, any field with an
                                  	// empty value appearing in NullFields will be sent to the server as
                                  	// null. It is an error if a field in this list has a non-empty value.
                                  	// This may be used to include null fields in Patch requests.
                                  	NullFields []string `json:"-"`
                                  }

                                    SendMessageRequest: Request to send a message to specified target.

                                    func (*SendMessageRequest) MarshalJSON

                                    func (s *SendMessageRequest) MarshalJSON() ([]byte, error)

                                    type Service

                                    type Service struct {
                                    	BasePath  string // API endpoint base URL
                                    	UserAgent string // optional additional User-Agent fragment
                                    
                                    	Projects *ProjectsService
                                    	// contains filtered or unexported fields
                                    }

                                    func New

                                    func New(client *http.Client) (*Service, error)

                                      New creates a new Service. It uses the provided http.Client for requests.

                                      Deprecated: please use NewService instead. To provide a custom HTTP client, use option.WithHTTPClient. If you are using google.golang.org/api/googleapis/transport.APIKey, use option.WithAPIKey with NewService instead.

                                      func NewService

                                      func NewService(ctx context.Context, opts ...option.ClientOption) (*Service, error)

                                        NewService creates a new Service.

                                        type WebpushConfig

                                        type WebpushConfig struct {
                                        	// Data: Arbitrary key/value payload. If present, it will
                                        	// override
                                        	// google.firebase.fcm.v1.Message.data.
                                        	Data map[string]string `json:"data,omitempty"`
                                        
                                        	// FcmOptions: Options for features provided by the FCM SDK for Web.
                                        	FcmOptions *WebpushFcmOptions `json:"fcmOptions,omitempty"`
                                        
                                        	// 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".
                                        	Headers map[string]string `json:"headers,omitempty"`
                                        
                                        	// 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/Not
                                        	// ification). If
                                        	// present, "title" and "body" fields
                                        	// override
                                        	// [google.firebase.fcm.v1.Notification.title]
                                        	// and
                                        	// [google.firebase.fcm.v1.Notification.body].
                                        	Notification googleapi.RawMessage `json:"notification,omitempty"`
                                        
                                        	// ForceSendFields is a list of field names (e.g. "Data") to
                                        	// unconditionally include in API requests. By default, fields with
                                        	// empty values are omitted from API requests. However, any non-pointer,
                                        	// non-interface field appearing in ForceSendFields will be sent to the
                                        	// server regardless of whether the field is empty or not. This may be
                                        	// used to include empty fields in Patch requests.
                                        	ForceSendFields []string `json:"-"`
                                        
                                        	// NullFields is a list of field names (e.g. "Data") to include in API
                                        	// requests with the JSON null value. By default, fields with empty
                                        	// values are omitted from API requests. However, any field with an
                                        	// empty value appearing in NullFields will be sent to the server as
                                        	// null. It is an error if a field in this list has a non-empty value.
                                        	// This may be used to include null fields in Patch requests.
                                        	NullFields []string `json:"-"`
                                        }

                                          WebpushConfig: [Webpush protocol](https://tools.ietf.org/html/rfc8030) options.

                                          func (*WebpushConfig) MarshalJSON

                                          func (s *WebpushConfig) MarshalJSON() ([]byte, error)

                                          type WebpushFcmOptions

                                          type WebpushFcmOptions struct {
                                          	// AnalyticsLabel: Label associated with the message's analytics data.
                                          	AnalyticsLabel string `json:"analyticsLabel,omitempty"`
                                          
                                          	// Link: The link to open when the user clicks on the notification.
                                          	// For all URL values, HTTPS is required.
                                          	Link string `json:"link,omitempty"`
                                          
                                          	// ForceSendFields is a list of field names (e.g. "AnalyticsLabel") to
                                          	// unconditionally include in API requests. By default, fields with
                                          	// empty values are omitted from API requests. However, any non-pointer,
                                          	// non-interface field appearing in ForceSendFields will be sent to the
                                          	// server regardless of whether the field is empty or not. This may be
                                          	// used to include empty fields in Patch requests.
                                          	ForceSendFields []string `json:"-"`
                                          
                                          	// NullFields is a list of field names (e.g. "AnalyticsLabel") to
                                          	// include in API requests with the JSON null value. By default, fields
                                          	// with empty values are omitted from API requests. However, any field
                                          	// with an empty value appearing in NullFields will be sent to the
                                          	// server as null. It is an error if a field in this list has a
                                          	// non-empty value. This may be used to include null fields in Patch
                                          	// requests.
                                          	NullFields []string `json:"-"`
                                          }

                                            WebpushFcmOptions: Options for features provided by the FCM SDK for Web.

                                            func (*WebpushFcmOptions) MarshalJSON

                                            func (s *WebpushFcmOptions) MarshalJSON() ([]byte, error)

                                            Source Files