Documentation
¶
Overview ¶
Example ¶
package main
import (
"context"
_ "embed"
"github.com/cristalhq/fcm"
)
func main() {
ctx := context.Background()
creds := []byte("...") // your JSON file from Firebase project settings
cfg := fcm.Config{
ProjectID: "example-android-app",
Credentials: creds,
}
client, err := fcm.NewClient(cfg)
if err != nil {
panic(err)
}
deviceToken := "..."
msg := &fcm.Message{
Data: map[string]string{
"force_show": "1",
},
Notification: &fcm.Notification{
Title: "Test",
Body: "Push from https://github.com/cristalhq/fcm",
},
Token: deviceToken,
}
response, err := client.Send(ctx, msg)
if err != nil {
// skipping error handling for example test
panic(err)
}
_ = response.Name // notification ID
}
Index ¶
- type APNSConfig
- type APNSFCMOptions
- type APNSPayload
- type AndroidConfig
- type AndroidFCMOptions
- type AndroidNotification
- type AndroidNotificationPriority
- type AndroidNotificationProxy
- type AndroidNotificationVisibility
- type Aps
- type ApsAlert
- type Client
- type Config
- type CriticalSound
- type FCMOptions
- type LightSettings
- type Message
- type Notification
- type Response
- type WebpushConfig
- type WebpushFCMOptions
- type WebpushNotification
- type WebpushNotificationAction
Examples ¶
Constants ¶
This section is empty.
Variables ¶
This section is empty.
Functions ¶
This section is empty.
Types ¶
type APNSConfig ¶ added in v0.3.0
type APNSConfig struct {
Headers map[string]string `json:"headers,omitempty"`
Payload *APNSPayload `json:"payload,omitempty"`
FCMOptions *APNSFCMOptions `json:"fcm_options,omitempty"`
LiveActivityToken string `json:"live_activity_token,omitempty"`
}
APNSConfig contains messaging options specific to the Apple Push Notification Service (APNS). https://firebase.google.com/docs/reference/fcm/rest/v1/projects.messages#apnsconfig
type APNSFCMOptions ¶ added in v0.3.0
type APNSFCMOptions struct {
AnalyticsLabel string `json:"analytics_label,omitempty"`
ImageURL string `json:"image,omitempty"`
}
APNSFCMOptions contains additional options for features provided by the FCM Aps SDK.
See https://firebase.google.com/docs/reference/fcm/rest/v1/projects.messages#apnsfcmoptions
type APNSPayload ¶ added in v0.3.0
APNSPayload is the payload that can be included in an APNS message.
The payload mainly consists of the aps dictionary. Additionally it may contain arbitrary key-values pairs as custom data fields.
func (*APNSPayload) MarshalJSON ¶ added in v0.3.0
func (p *APNSPayload) MarshalJSON() ([]byte, error)
func (*APNSPayload) UnmarshalJSON ¶ added in v0.3.0
func (p *APNSPayload) UnmarshalJSON(b []byte) error
type AndroidConfig ¶ added in v0.3.0
type AndroidConfig struct {
CollapseKey string `json:"collapse_key,omitempty"`
Priority string `json:"priority,omitempty"` // one of "normal" or "high"
TTL *time.Duration `json:"-"`
RestrictedPackageName string `json:"restricted_package_name,omitempty"`
Data map[string]string `json:"data,omitempty"` // if set, overrides [Message.Data] field.
Notification *AndroidNotification `json:"notification,omitempty"`
FCMOptions *AndroidFCMOptions `json:"fcm_options,omitempty"`
DirectBootOK bool `json:"direct_boot_ok,omitempty"`
}
AndroidConfig contains messaging options specific to the Android platform.
See https://firebase.google.com/docs/reference/fcm/rest/v1/projects.messages#androidconfig
func (*AndroidConfig) MarshalJSON ¶ added in v0.3.0
func (a *AndroidConfig) MarshalJSON() ([]byte, error)
func (*AndroidConfig) UnmarshalJSON ¶ added in v0.3.0
func (a *AndroidConfig) UnmarshalJSON(b []byte) error
type AndroidFCMOptions ¶ added in v0.3.0
type AndroidFCMOptions struct {
AnalyticsLabel string `json:"analytics_label,omitempty"`
}
AndroidFCMOptions contains additional options for features provided by the FCM Android SDK.
See https://firebase.google.com/docs/reference/fcm/rest/v1/projects.messages#androidfcmoptions
type AndroidNotification ¶ added in v0.3.0
type AndroidNotification struct {
Title string `json:"title,omitempty"` // if set, overrides [Notification.Title] field.
Body string `json:"body,omitempty"` // if set, overrides [Notification.Body] field.
Icon string `json:"icon,omitempty"`
Color string `json:"color,omitempty"` // #RRGGBB format
Sound string `json:"sound,omitempty"`
Tag string `json:"tag,omitempty"`
ClickAction string `json:"click_action,omitempty"`
BodyLocKey string `json:"body_loc_key,omitempty"`
BodyLocArgs []string `json:"body_loc_args,omitempty"`
TitleLocKey string `json:"title_loc_key,omitempty"`
TitleLocArgs []string `json:"title_loc_args,omitempty"`
ChannelID string `json:"channel_id,omitempty"`
Ticker string `json:"ticker,omitempty"`
Sticky bool `json:"sticky,omitempty"`
EventTimestamp *time.Time `json:"-"`
LocalOnly bool `json:"local_only,omitempty"`
Priority AndroidNotificationPriority `json:"-"`
DefaultSound bool `json:"default_sound,omitempty"`
DefaultVibrateTimings bool `json:"default_vibrate_timings,omitempty"`
DefaultLightSettings bool `json:"default_light_settings,omitempty"`
VibrateTimingMillis []int64 `json:"-"`
Visibility AndroidNotificationVisibility `json:"-"`
NotificationCount *int `json:"notification_count,omitempty"`
LightSettings *LightSettings `json:"light_settings,omitempty"`
ImageURL string `json:"image,omitempty"`
Proxy AndroidNotificationProxy `json:"-"`
}
AndroidNotification is a notification to send to Android devices.
See https://firebase.google.com/docs/reference/fcm/rest/v1/projects.messages#androidnotification
func (*AndroidNotification) MarshalJSON ¶ added in v0.3.0
func (a *AndroidNotification) MarshalJSON() ([]byte, error)
func (*AndroidNotification) UnmarshalJSON ¶ added in v0.3.0
func (a *AndroidNotification) UnmarshalJSON(b []byte) error
type AndroidNotificationPriority ¶ added in v0.3.0
type AndroidNotificationPriority int
AndroidNotificationPriority represents the priority levels of a notification.
const ( // PriorityMin is the lowest notification priority. // Notifications with this priority might not be shown to the user except under special circumstances, such as detailed notification logs. PriorityMin AndroidNotificationPriority = 1 // PriorityLow is a lower notification priority. // The UI may choose to show the notifications smaller, or at a different position in the list, compared with notifications with PriorityDefault. PriorityLow AndroidNotificationPriority = 2 // PriorityDefault is the default notification priority. // If the application does not prioritize its own notifications, use this value for all notifications. PriorityDefault AndroidNotificationPriority = 3 // PriorityHigh is a 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 PriorityDefault. PriorityHigh AndroidNotificationPriority = 4 // PriorityMax is the highest notification priority. // Use this for the application's most important items that require the user's prompt attention or input. PriorityMax AndroidNotificationPriority = 5 )
type AndroidNotificationProxy ¶ added in v0.3.0
type AndroidNotificationProxy int
AndroidNotificationProxy to control when a notification may be proxied.
const ( // ProxyAllow tries to proxy this notification. ProxyAllow AndroidNotificationProxy = 1 // ProxyDeny does not proxy this notification. ProxyDeny AndroidNotificationProxy = 2 // ProxyIfPriorityLowered only tries to proxy this notification if its AndroidConfig's Priority was lowered from high to normal on the device. ProxyIfPriorityLowered AndroidNotificationProxy = 3 )
type AndroidNotificationVisibility ¶ added in v0.3.0
type AndroidNotificationVisibility int
AndroidNotificationVisibility represents the different visibility levels of a notification.
const ( // VisibilityPrivate shows this notification on all lockscreens, but conceal sensitive or private information on secure lockscreens. VisibilityPrivate AndroidNotificationVisibility = 1 // VisibilityPublic shows this notification in its entirety on all lockscreens. VisibilityPublic AndroidNotificationVisibility = 2 // VisibilitySecret does not reveal any part of this notification on a secure lockscreen. VisibilitySecret AndroidNotificationVisibility = 3 )
type Aps ¶ added in v0.3.0
type Aps struct {
AlertString string `json:"-"`
Alert *ApsAlert `json:"-"`
Badge *int `json:"badge,omitempty"`
Sound string `json:"-"`
CriticalSound *CriticalSound `json:"-"`
ContentAvailable bool `json:"-"`
MutableContent bool `json:"-"`
Category string `json:"category,omitempty"`
ThreadID string `json:"thread-id,omitempty"`
CustomData map[string]any `json:"-"`
}
Aps represents the aps dictionary that may be included in an APNSPayload.
Alert may be specified as a string (via the AlertString field), or as a struct (via the Alert field).
func (*Aps) MarshalJSON ¶ added in v0.3.0
func (*Aps) UnmarshalJSON ¶ added in v0.3.0
type ApsAlert ¶ added in v0.3.0
type ApsAlert struct {
Title string `json:"title,omitempty"` // if set, overrides [Notification.Title] field.
SubTitle string `json:"subtitle,omitempty"`
Body string `json:"body,omitempty"` // if set, overrides [Notification.Body] field.
LocKey string `json:"loc-key,omitempty"`
LocArgs []string `json:"loc-args,omitempty"`
TitleLocKey string `json:"title-loc-key,omitempty"`
TitleLocArgs []string `json:"title-loc-args,omitempty"`
SubTitleLocKey string `json:"subtitle-loc-key,omitempty"`
SubTitleLocArgs []string `json:"subtitle-loc-args,omitempty"`
ActionLocKey string `json:"action-loc-key,omitempty"`
LaunchImage string `json:"launch-image,omitempty"`
}
ApsAlert is the alert payload that can be included in an Aps.
type Client ¶
type Client struct {
// contains filtered or unexported fields
}
Client for the Firebase Cloud Messaging (FCM) service.
type CriticalSound ¶ added in v0.3.0
type CriticalSound struct {
Critical bool `json:"-"`
Name string `json:"name,omitempty"`
Volume float64 `json:"volume,omitempty"`
}
CriticalSound is the sound payload that can be included in an Aps.
func (*CriticalSound) MarshalJSON ¶ added in v0.3.0
func (cs *CriticalSound) MarshalJSON() ([]byte, error)
func (*CriticalSound) UnmarshalJSON ¶ added in v0.3.0
func (cs *CriticalSound) UnmarshalJSON(b []byte) error
type FCMOptions ¶ added in v0.3.0
type FCMOptions struct {
AnalyticsLabel string `json:"analytics_label,omitempty"`
}
FCMOptions contains additional options to use across all platforms.
See https://firebase.google.com/docs/reference/fcm/rest/v1/projects.messages#fcmoptions
type LightSettings ¶ added in v0.3.0
LightSettings to control notification LED.
func (*LightSettings) MarshalJSON ¶ added in v0.3.0
func (l *LightSettings) MarshalJSON() ([]byte, error)
func (*LightSettings) UnmarshalJSON ¶ added in v0.3.0
func (l *LightSettings) UnmarshalJSON(b []byte) error
type Message ¶
type Message struct {
Data map[string]string `json:"data,omitempty"`
Notification *Notification `json:"notification,omitempty"`
Android *AndroidConfig `json:"android,omitempty"`
Webpush *WebpushConfig `json:"webpush,omitempty"`
APNS *APNSConfig `json:"apns,omitempty"`
FCMOptions *FCMOptions `json:"fcm_options,omitempty"`
Token string `json:"token,omitempty"`
Topic string `json:"-"`
Condition string `json:"condition,omitempty"`
}
Message to be sent via Firebase Cloud Messaging (FCM). A Message must specify exactly one of Token, Topic or Condition fields.
See https://firebase.google.com/docs/reference/fcm/rest/v1/projects.messages
func (*Message) MarshalJSON ¶
func (*Message) UnmarshalJSON ¶
type Notification ¶
type Notification struct {
Title string `json:"title,omitempty"`
Body string `json:"body,omitempty"`
ImageURL string `json:"image,omitempty"`
}
Notification is the basic notification template to use across all platforms.
See https://firebase.google.com/docs/reference/fcm/rest/v1/projects.messages#notification
type WebpushConfig ¶ added in v0.3.0
type WebpushConfig struct {
Headers map[string]string `json:"headers,omitempty"`
Data map[string]string `json:"data,omitempty"`
Notification *WebpushNotification `json:"notification,omitempty"`
FCMOptions *WebpushFCMOptions `json:"fcm_options,omitempty"`
}
WebpushConfig contains messaging options specific to the WebPush protocol. https://firebase.google.com/docs/reference/fcm/rest/v1/projects.messages#webpushconfig
type WebpushFCMOptions ¶ added in v0.3.0
type WebpushFCMOptions struct {
Link string `json:"link,omitempty"`
}
WebpushFCMOptions contains additional options for features provided by the FCM web SDK.
See https://firebase.google.com/docs/reference/fcm/rest/v1/projects.messages#webpushfcmoptions
type WebpushNotification ¶ added in v0.3.0
type WebpushNotification struct {
Actions []*WebpushNotificationAction `json:"actions,omitempty"`
Title string `json:"title,omitempty"` // if set, overrides [Notification.Title] field.
Body string `json:"body,omitempty"` // if set, overrides [Notification.Body] field.
Icon string `json:"icon,omitempty"`
Badge string `json:"badge,omitempty"`
Direction string `json:"dir,omitempty"` // one of 'ltr' or 'rtl'
Data any `json:"data,omitempty"`
Image string `json:"image,omitempty"`
Language string `json:"lang,omitempty"`
Renotify bool `json:"renotify,omitempty"`
RequireInteraction bool `json:"requireInteraction,omitempty"`
Silent bool `json:"silent,omitempty"`
Tag string `json:"tag,omitempty"`
TimestampMillis *int64 `json:"timestamp,omitempty"`
Vibrate []int `json:"vibrate,omitempty"`
CustomData map[string]any
}
WebpushNotification is a notification to send via WebPush protocol.
See https://developer.mozilla.org/en-US/docs/Web/API/notification/Notification
func (*WebpushNotification) MarshalJSON ¶ added in v0.3.0
func (n *WebpushNotification) MarshalJSON() ([]byte, error)
func (*WebpushNotification) UnmarshalJSON ¶ added in v0.3.0
func (n *WebpushNotification) UnmarshalJSON(b []byte) error
type WebpushNotificationAction ¶ added in v0.3.0
type WebpushNotificationAction struct {
Action string `json:"action,omitempty"`
Title string `json:"title,omitempty"`
Icon string `json:"icon,omitempty"`
}
WebpushNotificationAction represents an action that can be performed upon receiving a WebPush notification.