func (p Payload) MarshalJSON() ([]byte, error) {
	payloadMap := make(map[string]interface{})
	payloadMap["aps"] = p.APS
	for k, v := range p.Optional {
		payloadMap[k] = v
	}
	return json.Marshal(payloadMap)
}
MarshalJSON for Payload struct.
package apns
import (
	"encoding/json"
)
type Notification struct {
	Header  Header  `json:"header,omitempty"`
	Token   string  `json:"token"`
	Payload Payload `json:"payload"`
}
type Header struct {
	ApnsID         string `json:"apns-id,omitempty"`
	ApnsExpiration string `json:"apns-expiration,omitempty"`
	ApnsPriority   string `json:"apns-priority,omitempty"`
	ApnsTopic      string `json:"apns-topic,omitempty"`
	ApnsPushType   string `json:"apns-push-type,omitempty"`
}
type Payload struct {
	*APS     `json:"aps"`
	Optional map[string]interface{}
}
type APS struct {
	Alert            interface{} `json:"alert,omitempty"`
	Badge            int         `json:"badge,omitempty"`
	Sound            string      `json:"sound,omitempty"`
	ContentAvailable int         `json:"content-available,omitempty"`
	Category         string      `json:"category,omitempty"`
	ThreadID         string      `json:"thread-id,omitempty"`
	MutableContent   int         `json:"mutable-content,omitempty"`
	TargetContentID  string      `json:"target-content-id,omitempty"`
}
type Alert struct {
	Title        string   `json:"title,omitempty"`
	Body         string   `json:"body,omitempty"`
	TitleLocKey  string   `json:"title-loc-key,omitempty"`
	TitleLocArgs []string `json:"title-loc-args,omitempty"`
	ActionLocKey string   `json:"action-loc-key,omitempty"`
	LocKey       string   `json:"loc-key,omitempty"`
	LocArgs      []string `json:"loc-args,omitempty"`
	LaunchImage  string   `json:"launch-image,omitempty"`
}