v0.22.10 Latest Latest

This package is not in the latest version of its module.

Go to latest
Published: Aug 14, 2023 License: GPL-3.0 Imports: 4 Imported by: 15



Package push contains interfaces to be implemented by push notification plugins.



View Source
const (
	// New message.
	ActMsg = "msg"
	// New subscription.
	ActSub = "sub"
	// Messages read: clear unread count.
	ActRead = "read"

Push actions

View Source
const MaxPayloadLength = 128

MaxPayloadLength is the maximum length of push payload in multibyte characters.


This section is empty.


func ChannelSub added in v0.16.8

func ChannelSub(msg *ChannelReq)

ChannelSub handles a channel (FCM topic) subscription/unsubscription request.

func Init

func Init(jsconfig json.RawMessage) ([]string, error)

Init initializes registered handlers.

func Push

func Push(msg *Receipt)

Push a single message to devices.

func Register

func Register(name string, hnd Handler)

Register a push handler

func Stop

func Stop()

Stop all pushes


type ChannelReq added in v0.16.8

type ChannelReq struct {
	// Uid is the ID of the user making request.
	Uid t.Uid
	// DeviceID is the device-provided token in case a single device is being subscribed to all channels.
	DeviceID string
	// Channel to subscribe to or unsubscribe from.
	Channel string
	// Unsub is set to true to unsubscribe devices, otherwise subscribe them.
	Unsub bool

ChannelReq is a request to subscribe/unsubscribe device ID(s) to channel(s) (FCM topic). - If DeviceID is provided, it's subscribed/unsubscribed to all user's channels. - If Channel is provided, then all user's devices are subscribed/unsubscribed from the channel.

type Handler added in v0.14.2

type Handler interface {
	// Init initializes the handler.
	Init(jsonconf json.RawMessage) (bool, error)

	// IsReady сhecks if the handler is initialized.
	IsReady() bool

	// Push returns a channel that the server will use to send messages to.
	// The message will be dropped if the channel blocks.
	Push() chan<- *Receipt

	// Subscribe/unsubscribe device from FCM topic (channel).
	Channel() chan<- *ChannelReq

	// Stop terminates the handler's worker and stops sending pushes.

Handler is an interface which must be implemented by handlers.

type Payload

type Payload struct {
	// Action type of the push: new message (msg), new subscription (sub), etc.
	What string `json:"what"`
	// If this is a silent push: perform action but do not show a notification to the user.
	Silent bool `json:"silent"`
	// Topic which was affected by the action.
	Topic string `json:"topic"`
	// Timestamp of the action.
	Timestamp time.Time `json:"ts"`

	// Message sender 'usrXXX'
	From string `json:"from"`
	// Sequential ID of the message.
	SeqId int `json:"seq"`
	// MIME-Type of the message content, text/x-drafty or text/plain
	ContentType string `json:"mime"`
	// Actual Data.Content of the message, if requested
	Content interface{} `json:"content,omitempty"`
	// State of the video call (available in video call messages only).
	Webrtc string `json:"webrtc,omitempty"`
	// If call is audio-only (available only if Webrtc is present).
	AudioOnly bool `json:"aonly,omitempty"`
	// Seq id the message is supposed to replace.
	Replace string `json:"replace,omitempty"`

	// New access mode when notifying of a subscription change.
	// ModeNone for both means the subscription is removed.
	ModeWant  t.AccessMode `json:"want,omitempty"`
	ModeGiven t.AccessMode `json:"given,omitempty"`

Payload is content of the push.

type Receipt

type Receipt struct {
	// List of individual recipients, including those who did not receive the message.
	To map[t.Uid]Recipient `json:"to"`
	// Push topic for group notifications.
	Channel string `json:"channel"`
	// Actual content to be delivered to the client.
	Payload Payload `json:"payload"`

Receipt is the push payload with a list of recipients.

type Recipient added in v0.14.2

type Recipient struct {
	// Count of user's connections that were live when the packet was dispatched from the server
	Delivered int `json:"delivered"`
	// List of user's devices that the packet was delivered to (if known). Len(Devices) >= Delivered
	Devices []string `json:"devices,omitempty"`
	// Unread count to include in the push
	Unread int `json:"unread"`
	// Indicates whether unread counter in the cache should be incremented before sending the push.
	ShouldIncrementUnreadCountInCache bool `json:"-"`

Recipient is a user targeted by the push.


Path Synopsis
Package fcm implements push notification plugin for Google FCM backend.
Package fcm implements push notification plugin for Google FCM backend.
Package stdout is a sample implementation of a push plugin.
Package stdout is a sample implementation of a push plugin.
Package tnpg implements push notification plugin for Tinode Push Gateway.
Package tnpg implements push notification plugin for Tinode Push Gateway.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL