81 lines
3.0 KiB
Go
81 lines
3.0 KiB
Go
package apns2
|
||
|
||
import (
|
||
"encoding/json"
|
||
"time"
|
||
)
|
||
|
||
const (
|
||
// PriorityLow will tell APNs to send the push message at a time that takes
|
||
// into account power considerations for the device. Notifications with this
|
||
// priority might be grouped and delivered in bursts. They are throttled, and
|
||
// in some cases are not delivered.
|
||
PriorityLow = 5
|
||
|
||
// PriorityHigh will tell APNs to send the push message immediately.
|
||
// Notifications with this priority must trigger an alert, sound, or badge on
|
||
// the target device. It is an error to use this priority for a push
|
||
// notification that contains only the content-available key.
|
||
PriorityHigh = 10
|
||
)
|
||
|
||
// Notification represents the the data and metadata for a APNs Remote Notification.
|
||
type Notification struct {
|
||
|
||
// An optional canonical UUID that identifies the notification. The canonical
|
||
// form is 32 lowercase hexadecimal digits, displayed in five groups separated
|
||
// by hyphens in the form 8-4-4-4-12. An example UUID is as follows:
|
||
//
|
||
// 123e4567-e89b-12d3-a456-42665544000
|
||
//
|
||
// If you don't set this, a new UUID is created by APNs and returned in the
|
||
// response.
|
||
ApnsID string
|
||
|
||
// A string which allows multiple notifications with the same collapse identifier
|
||
// to be displayed to the user as a single notification. The value should not
|
||
// exceed 64 bytes.
|
||
CollapseID string
|
||
|
||
// A string containing hexadecimal bytes of the device token for the target device.
|
||
DeviceToken string
|
||
|
||
// The topic of the remote notification, which is typically the bundle ID for
|
||
// your app. The certificate you create in the Apple Developer Member Center
|
||
// must include the capability for this topic. If your certificate includes
|
||
// multiple topics, you must specify a value for this header. If you omit this
|
||
// header and your APNs certificate does not specify multiple topics, the APNs
|
||
// server uses the certificate’s Subject as the default topic.
|
||
Topic string
|
||
|
||
// An optional time at which the notification is no longer valid and can be
|
||
// discarded by APNs. If this value is in the past, APNs treats the
|
||
// notification as if it expires immediately and does not store the
|
||
// notification or attempt to redeliver it. If this value is left as the
|
||
// default (ie, Expiration.IsZero()) an expiration header will not added to the
|
||
// http request.
|
||
Expiration time.Time
|
||
|
||
// The priority of the notification. Specify ether apns.PriorityHigh (10) or
|
||
// apns.PriorityLow (5) If you don't set this, the APNs server will set the
|
||
// priority to 10.
|
||
Priority int
|
||
|
||
// A byte array containing the JSON-encoded payload of this push notification.
|
||
// Refer to "The Remote Notification Payload" section in the Apple Local and
|
||
// Remote Notification Programming Guide for more info.
|
||
Payload interface{}
|
||
}
|
||
|
||
// MarshalJSON converts the notification payload to JSON.
|
||
func (n *Notification) MarshalJSON() ([]byte, error) {
|
||
switch n.Payload.(type) {
|
||
case string:
|
||
return []byte(n.Payload.(string)), nil
|
||
case []byte:
|
||
return n.Payload.([]byte), nil
|
||
default:
|
||
return json.Marshal(n.Payload)
|
||
}
|
||
}
|