From 5cae4c8fe5b9a71a4e044034fb824658947bfc6c Mon Sep 17 00:00:00 2001 From: Vladislav Veselskiy Date: Sat, 25 Jan 2025 11:30:24 +0300 Subject: [PATCH] Move code for message to file message.go. --- fcm.go | 213 ---------------------------------------------------- message.go | 214 +++++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 214 insertions(+), 213 deletions(-) create mode 100644 message.go diff --git a/fcm.go b/fcm.go index f791ef5..409349b 100644 --- a/fcm.go +++ b/fcm.go @@ -483,216 +483,3 @@ type MultiSendResponse struct { Sent int Failed int } - -type Message struct { - Token string `json:"token,omitempty"` - Topic string `json:"topic,omitempty"` - Condition string `json:"condition,omitempty"` - Data map[string]string `json:"data,omitempty"` - Notification *Notification `json:"notification,omitempty"` - FcmOptions *FcmOptions `json:"fcm_options,omitempty"` - Android *AndroidConfig `json:"android,omitempty"` - Webpush *WebpushConfig `json:"webpush,omitempty"` - Apns *ApnsConfig `json:"apns,omitempty"` -} - -// Basic notification template to use across all platforms. -type Notification struct { - Title string `json:"title,omitempty"` - Body string `json:"body,omitempty"` - Image string `json:"image,omitempty"` -} - -type FcmOptions struct { - // Label associated with the message's analytics data. - // Format: ^[a-zA-Z0-9-_.~%]{1,50}$ - AnalyticsLabel string `json:"analytics_label,omitempty"` -} - -type AndroidConfig struct { - CollapseKey string `json:"collapse_key,omitempty"` - Priority AndroidMessagePriority `json:"priority,omitempty"` - TTL string `json:"ttl,omitempty"` - RestrictedPackageName string `json:"restricted_package_name,omitempty"` - Data map[string]string `json:"data,omitempty"` - Notification *AndroidNotification `json:"notification,omitempty"` - FcmOptions *AndroidFcmOptions `json:"fcm_options,omitempty"` - DirectBootOk bool `json:"direct_boot_ok,omitempty"` -} - -type AndroidMessagePriority uint8 - -const ( - // 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. - AndroidMessagePriority_NORMAL AndroidMessagePriority = 0 - - // 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. - AndroidMessagePriority_HIGH AndroidMessagePriority = 1 -) - -type AndroidFcmOptions struct { - AnalyticsLabel string `json:"analytics_label,omitempty"` -} - -type NotificationPriority uint8 - -const ( - NotificationPriority_UNSPECIFIED NotificationPriority = 0 - - // Notifications might not be shown to the user except under special circumstances, such as detailed notification logs. - NotificationPriority_MIN NotificationPriority = 1 - - // The UI may choose to show the notifications smaller, or at a different position in the list, compared with notifications with DEFAULT. - NotificationPriority_LOW NotificationPriority = 2 - - // If the application does not prioritize its own notifications, use this value for all notifications. - NotificationPriority_DEFAULT NotificationPriority = 3 - - // 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 DEFAULT. - NotificationPriority_HIGH NotificationPriority = 4 - - // Use this for the application's most important items that require the user's prompt attention or input. - NotificationPriority_MAX NotificationPriority = 5 -) - -type NotificationVisibility uint8 - -const ( - NotificationVisibility_UNSPECIFIED NotificationVisibility = 0 - - // Show this notification on all lockscreens, but conceal sensitive or private information on secure lockscreens. - NotificationVisibility_PRIVATE NotificationVisibility = 1 - - // Show this notification in its entirety on all lockscreens. - NotificationVisibility_PUBLIC NotificationVisibility = 2 - - // Do not reveal any part of this notification on a secure lockscreen. - NotificationVisibility_SECRET NotificationVisibility = 3 -) - -type LightSettings struct { - Color Color `json:"color,omitempty"` - OnDuration string `json:"light_on_duration,omitempty"` - OffDuration string `json:"light_off_duration,omitempty"` -} - -type Color struct { - Red float32 `json:"red,omitempty"` - Green float32 `json:"green,omitempty"` - Blue float32 `json:"blue,omitempty"` - Alpha float32 `json:"alpha,omitempty"` -} - -type AndroidNotification struct { - Title string `json:"title,omitempty"` - Body string `json:"body,omitempty"` - Image string `json:"image,omitempty"` - Icon string `json:"icon,omitempty"` - Color string `json:"color,omitempty"` - Sound string `json:"sound,omitempty"` - Tag string `json:"tag,omitempty"` - ClickAction string `json:"click_action,omitempty"` - ChannelID string `json:"channel_id,omitempty"` - BodyLocalizationKey string `json:"body_loc_key,omitempty"` - BodyLocalizationArgs []string `json:"body_loc_args,omitempty"` - TitleLocalizationKey string `json:"title_loc_key,omitempty"` - TitleLocalizationArgs []string `json:"title_loc_args,omitempty"` - Ticker string `json:"ticker,omitempty"` - Sticky bool `json:"sticky,omitempty"` - EventTime string `json:"event_time,omitempty"` - LocalOnly bool `json:"local_only,omitempty"` - Priority NotificationPriority `json:"notification_priority,omitempty"` - UseDefaultSound bool `json:"default_sound,omitempty"` - UseDefaultVibrateTimings bool `json:"default_vibrate_timings,omitempty"` - UseDefaultLightSettings bool `json:"default_light_settings,omitempty"` - VibrateTimings []string `json:"vibrate_timings,omitempty"` - Visibility NotificationVisibility `json:"visibility,omitempty"` - Count int `json:"notification_count,omitempty"` - LightSettings *LightSettings `json:"light_settings,omitempty"` -} - -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"` -} - -type WebpushNotification struct{} - -type WebpushFcmOptions struct { - Link string `json:"link,omitempty"` - AnalyticsLabel string `json:"analytics_label,omitempty"` -} - -// Apple specific options for message -type ApnsConfig struct { - Headers *ApnsHeaders `json:"headers,omitempty"` - Notification *ApnsPayload `json:"payload,omitempty"` - FcmOptions *ApnsFcmOptions `json:"fcm_options,omitempty"` -} - -type ApnsHeaders struct { - PushType string `json:"apns-push-type,omitempty"` - Id string `json:"apns-id,omitempty"` - Expiration int64 `json:"apns-expiration,omitempty"` - Priority uint8 `json:"apns-priority,omitempty"` - Topic string `json:"apns-topic,omitempty"` - CollapseId string `json:"apns-collapse-id,omitempty"` -} - -type ApnsPayload struct { - Aps ApnsPayloadKeys `json:"aps"` - - // TODO: add support for custom keys - // https://developer.apple.com/documentation/usernotifications/setting_up_a_remote_notification_server/generating_a_remote_notification - customKeys map[string]interface{} -} - -type ApnsPayloadKeys struct { - Alert *ApnsAlert `json:"alert,omitempty"` - Badge int `json:"badge,omitempty"` - Sound string `json:"sound,omitempty"` - ThreadId string `json:"thread-id,omitempty"` - Category string `json:"category,omitempty"` - ContentAvailable int `json:"content-available,omitempty"` - MutableContent int `json:"mutable-content,omitempty"` - TargetContentId string `json:"target-content-id,omitempty"` - InterruptionLevel string `json:"interruption-level,omitempty"` - RelevanceScore int `json:"relevance-score,omitempty"` - - CriticalSound *ApnsCriticalSound `json:"-"` -} - -type ApnsAlert struct { - Title string `json:"title,omitempty"` - Subtitle string `json:"subtitle,omitempty"` - Body string `json:"body,omitempty"` - LaunchImg string `json:"launch-image,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"` - LocKey string `json:"loc-key,omitempty"` - LocArgs []string `json:"loc-args,omitempty"` -} - -type ApnsCriticalSound struct { - Critical int `json:"critical,omitempty"` - Name string `json:"name,omitempty"` - Volume int `json:"volume,omitempty"` -} - -type ApnsFcmOptions struct { - AnalyticsLabel string `json:"analytics_label,omitempty"` - Image string `json:"image,omitempty"` -} diff --git a/message.go b/message.go new file mode 100644 index 0000000..b80b82a --- /dev/null +++ b/message.go @@ -0,0 +1,214 @@ +package fcm + +type Message struct { + Token string `json:"token,omitempty"` + Topic string `json:"topic,omitempty"` + Condition string `json:"condition,omitempty"` + Data map[string]string `json:"data,omitempty"` + Notification *Notification `json:"notification,omitempty"` + FcmOptions *FcmOptions `json:"fcm_options,omitempty"` + Android *AndroidConfig `json:"android,omitempty"` + Webpush *WebpushConfig `json:"webpush,omitempty"` + Apns *ApnsConfig `json:"apns,omitempty"` +} + +// Basic notification template to use across all platforms. +type Notification struct { + Title string `json:"title,omitempty"` + Body string `json:"body,omitempty"` + Image string `json:"image,omitempty"` +} + +type FcmOptions struct { + // Label associated with the message's analytics data. + // Format: ^[a-zA-Z0-9-_.~%]{1,50}$ + AnalyticsLabel string `json:"analytics_label,omitempty"` +} + +type AndroidConfig struct { + CollapseKey string `json:"collapse_key,omitempty"` + Priority AndroidMessagePriority `json:"priority,omitempty"` + TTL string `json:"ttl,omitempty"` + RestrictedPackageName string `json:"restricted_package_name,omitempty"` + Data map[string]string `json:"data,omitempty"` + Notification *AndroidNotification `json:"notification,omitempty"` + FcmOptions *AndroidFcmOptions `json:"fcm_options,omitempty"` + DirectBootOk bool `json:"direct_boot_ok,omitempty"` +} + +type AndroidMessagePriority uint8 + +const ( + // 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. + AndroidMessagePriority_NORMAL AndroidMessagePriority = 0 + + // 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. + AndroidMessagePriority_HIGH AndroidMessagePriority = 1 +) + +type AndroidFcmOptions struct { + AnalyticsLabel string `json:"analytics_label,omitempty"` +} + +type NotificationPriority uint8 + +const ( + NotificationPriority_UNSPECIFIED NotificationPriority = 0 + + // Notifications might not be shown to the user except under special circumstances, such as detailed notification logs. + NotificationPriority_MIN NotificationPriority = 1 + + // The UI may choose to show the notifications smaller, or at a different position in the list, compared with notifications with DEFAULT. + NotificationPriority_LOW NotificationPriority = 2 + + // If the application does not prioritize its own notifications, use this value for all notifications. + NotificationPriority_DEFAULT NotificationPriority = 3 + + // 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 DEFAULT. + NotificationPriority_HIGH NotificationPriority = 4 + + // Use this for the application's most important items that require the user's prompt attention or input. + NotificationPriority_MAX NotificationPriority = 5 +) + +type NotificationVisibility uint8 + +const ( + NotificationVisibility_UNSPECIFIED NotificationVisibility = 0 + + // Show this notification on all lockscreens, but conceal sensitive or private information on secure lockscreens. + NotificationVisibility_PRIVATE NotificationVisibility = 1 + + // Show this notification in its entirety on all lockscreens. + NotificationVisibility_PUBLIC NotificationVisibility = 2 + + // Do not reveal any part of this notification on a secure lockscreen. + NotificationVisibility_SECRET NotificationVisibility = 3 +) + +type LightSettings struct { + Color Color `json:"color,omitempty"` + OnDuration string `json:"light_on_duration,omitempty"` + OffDuration string `json:"light_off_duration,omitempty"` +} + +type Color struct { + Red float32 `json:"red,omitempty"` + Green float32 `json:"green,omitempty"` + Blue float32 `json:"blue,omitempty"` + Alpha float32 `json:"alpha,omitempty"` +} + +type AndroidNotification struct { + Title string `json:"title,omitempty"` + Body string `json:"body,omitempty"` + Image string `json:"image,omitempty"` + Icon string `json:"icon,omitempty"` + Color string `json:"color,omitempty"` + Sound string `json:"sound,omitempty"` + Tag string `json:"tag,omitempty"` + ClickAction string `json:"click_action,omitempty"` + ChannelID string `json:"channel_id,omitempty"` + BodyLocalizationKey string `json:"body_loc_key,omitempty"` + BodyLocalizationArgs []string `json:"body_loc_args,omitempty"` + TitleLocalizationKey string `json:"title_loc_key,omitempty"` + TitleLocalizationArgs []string `json:"title_loc_args,omitempty"` + Ticker string `json:"ticker,omitempty"` + Sticky bool `json:"sticky,omitempty"` + EventTime string `json:"event_time,omitempty"` + LocalOnly bool `json:"local_only,omitempty"` + Priority NotificationPriority `json:"notification_priority,omitempty"` + UseDefaultSound bool `json:"default_sound,omitempty"` + UseDefaultVibrateTimings bool `json:"default_vibrate_timings,omitempty"` + UseDefaultLightSettings bool `json:"default_light_settings,omitempty"` + VibrateTimings []string `json:"vibrate_timings,omitempty"` + Visibility NotificationVisibility `json:"visibility,omitempty"` + Count int `json:"notification_count,omitempty"` + LightSettings *LightSettings `json:"light_settings,omitempty"` +} + +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"` +} + +type WebpushNotification struct{} + +type WebpushFcmOptions struct { + Link string `json:"link,omitempty"` + AnalyticsLabel string `json:"analytics_label,omitempty"` +} + +// Apple specific options for message +type ApnsConfig struct { + Headers *ApnsHeaders `json:"headers,omitempty"` + Notification *ApnsPayload `json:"payload,omitempty"` + FcmOptions *ApnsFcmOptions `json:"fcm_options,omitempty"` +} + +type ApnsHeaders struct { + PushType string `json:"apns-push-type,omitempty"` + Id string `json:"apns-id,omitempty"` + Expiration int64 `json:"apns-expiration,omitempty"` + Priority uint8 `json:"apns-priority,omitempty"` + Topic string `json:"apns-topic,omitempty"` + CollapseId string `json:"apns-collapse-id,omitempty"` +} + +type ApnsPayload struct { + Aps ApnsPayloadKeys `json:"aps"` + + // TODO: add support for custom keys + // https://developer.apple.com/documentation/usernotifications/setting_up_a_remote_notification_server/generating_a_remote_notification + customKeys map[string]interface{} +} + +type ApnsPayloadKeys struct { + Alert *ApnsAlert `json:"alert,omitempty"` + Badge int `json:"badge,omitempty"` + Sound string `json:"sound,omitempty"` + ThreadId string `json:"thread-id,omitempty"` + Category string `json:"category,omitempty"` + ContentAvailable int `json:"content-available,omitempty"` + MutableContent int `json:"mutable-content,omitempty"` + TargetContentId string `json:"target-content-id,omitempty"` + InterruptionLevel string `json:"interruption-level,omitempty"` + RelevanceScore int `json:"relevance-score,omitempty"` + + CriticalSound *ApnsCriticalSound `json:"-"` +} + +type ApnsAlert struct { + Title string `json:"title,omitempty"` + Subtitle string `json:"subtitle,omitempty"` + Body string `json:"body,omitempty"` + LaunchImg string `json:"launch-image,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"` + LocKey string `json:"loc-key,omitempty"` + LocArgs []string `json:"loc-args,omitempty"` +} + +type ApnsCriticalSound struct { + Critical int `json:"critical,omitempty"` + Name string `json:"name,omitempty"` + Volume int `json:"volume,omitempty"` +} + +type ApnsFcmOptions struct { + AnalyticsLabel string `json:"analytics_label,omitempty"` + Image string `json:"image,omitempty"` +}