feat(ios12): Add support for Summary arguments in notifications (#384)
* feat(ios12): Add support for Summary arguments in notifications * feat: upgrade go module
This commit is contained in:
parent
49a81edbd0
commit
375eec1d90
2
go.mod
2
go.mod
|
@ -38,7 +38,7 @@ require (
|
||||||
github.com/prometheus/client_model v0.0.0-20170216185247-6f3806018612 // indirect
|
github.com/prometheus/client_model v0.0.0-20170216185247-6f3806018612 // indirect
|
||||||
github.com/prometheus/common v0.0.0-20170218233558-3007b6072c17 // indirect
|
github.com/prometheus/common v0.0.0-20170218233558-3007b6072c17 // indirect
|
||||||
github.com/prometheus/procfs v0.0.0-20170216223256-a1dba9ce8bae // indirect
|
github.com/prometheus/procfs v0.0.0-20170216223256-a1dba9ce8bae // indirect
|
||||||
github.com/sideshow/apns2 v0.0.0-20180827055107-3c5d4af1700e
|
github.com/sideshow/apns2 v0.0.0-20181014012405-060d44b53d05
|
||||||
github.com/sirupsen/logrus v0.0.0-20170620144510-3d4380f53a34
|
github.com/sirupsen/logrus v0.0.0-20170620144510-3d4380f53a34
|
||||||
github.com/spf13/afero v0.0.0-20171021110813-5660eeed305f // indirect
|
github.com/spf13/afero v0.0.0-20171021110813-5660eeed305f // indirect
|
||||||
github.com/spf13/cast v1.1.0 // indirect
|
github.com/spf13/cast v1.1.0 // indirect
|
||||||
|
|
2
go.sum
2
go.sum
|
@ -74,6 +74,8 @@ github.com/prometheus/procfs v0.0.0-20170216223256-a1dba9ce8bae h1:4W6eGKy6DVCKy
|
||||||
github.com/prometheus/procfs v0.0.0-20170216223256-a1dba9ce8bae/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk=
|
github.com/prometheus/procfs v0.0.0-20170216223256-a1dba9ce8bae/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk=
|
||||||
github.com/sideshow/apns2 v0.0.0-20180827055107-3c5d4af1700e h1:L+MeVX9/PAI/RJkx5YSlwgYtIMNIF6uLb4SVoZsXgLU=
|
github.com/sideshow/apns2 v0.0.0-20180827055107-3c5d4af1700e h1:L+MeVX9/PAI/RJkx5YSlwgYtIMNIF6uLb4SVoZsXgLU=
|
||||||
github.com/sideshow/apns2 v0.0.0-20180827055107-3c5d4af1700e/go.mod h1:f7dArLPLbiZ3qPdzzrZXdCSlMp8FD0p6z7tHssDOLvk=
|
github.com/sideshow/apns2 v0.0.0-20180827055107-3c5d4af1700e/go.mod h1:f7dArLPLbiZ3qPdzzrZXdCSlMp8FD0p6z7tHssDOLvk=
|
||||||
|
github.com/sideshow/apns2 v0.0.0-20181014012405-060d44b53d05 h1:3M+RJyiSlS8LumIYw9HbwwhKMQzJZ1HzTbU3FVmXy8o=
|
||||||
|
github.com/sideshow/apns2 v0.0.0-20181014012405-060d44b53d05/go.mod h1:f7dArLPLbiZ3qPdzzrZXdCSlMp8FD0p6z7tHssDOLvk=
|
||||||
github.com/sirupsen/logrus v0.0.0-20170620144510-3d4380f53a34 h1:kVLTAexkb0RpvzqHGdmxz80/bPLGuZn4qnUR0a4sW9Y=
|
github.com/sirupsen/logrus v0.0.0-20170620144510-3d4380f53a34 h1:kVLTAexkb0RpvzqHGdmxz80/bPLGuZn4qnUR0a4sW9Y=
|
||||||
github.com/sirupsen/logrus v0.0.0-20170620144510-3d4380f53a34/go.mod h1:pMByvHTf9Beacp5x1UXfOR9xyW/9antXMhjMPG0dEzc=
|
github.com/sirupsen/logrus v0.0.0-20170620144510-3d4380f53a34/go.mod h1:pMByvHTf9Beacp5x1UXfOR9xyW/9antXMhjMPG0dEzc=
|
||||||
github.com/spf13/afero v0.0.0-20171021110813-5660eeed305f h1:+Dx5AA/mr18sj78olfUUNWiBBH18xbGhdXiOnLoKnzY=
|
github.com/spf13/afero v0.0.0-20171021110813-5660eeed305f h1:+Dx5AA/mr18sj78olfUUNWiBBH18xbGhdXiOnLoKnzY=
|
||||||
|
|
|
@ -30,16 +30,18 @@ const (
|
||||||
|
|
||||||
// Alert is APNs payload
|
// Alert is APNs payload
|
||||||
type Alert struct {
|
type Alert struct {
|
||||||
Action string `json:"action,omitempty"`
|
Action string `json:"action,omitempty"`
|
||||||
ActionLocKey string `json:"action-loc-key,omitempty"`
|
ActionLocKey string `json:"action-loc-key,omitempty"`
|
||||||
Body string `json:"body,omitempty"`
|
Body string `json:"body,omitempty"`
|
||||||
LaunchImage string `json:"launch-image,omitempty"`
|
LaunchImage string `json:"launch-image,omitempty"`
|
||||||
LocArgs []string `json:"loc-args,omitempty"`
|
LocArgs []string `json:"loc-args,omitempty"`
|
||||||
LocKey string `json:"loc-key,omitempty"`
|
LocKey string `json:"loc-key,omitempty"`
|
||||||
Title string `json:"title,omitempty"`
|
Title string `json:"title,omitempty"`
|
||||||
Subtitle string `json:"subtitle,omitempty"`
|
Subtitle string `json:"subtitle,omitempty"`
|
||||||
TitleLocArgs []string `json:"title-loc-args,omitempty"`
|
TitleLocArgs []string `json:"title-loc-args,omitempty"`
|
||||||
TitleLocKey string `json:"title-loc-key,omitempty"`
|
TitleLocKey string `json:"title-loc-key,omitempty"`
|
||||||
|
SummaryArg string `json:"summary-arg,omitempty"`
|
||||||
|
SummaryArgCount int `json:"summary-arg-count,omitempty"`
|
||||||
}
|
}
|
||||||
|
|
||||||
// RequestPush support multiple notification request.
|
// RequestPush support multiple notification request.
|
||||||
|
|
|
@ -148,11 +148,18 @@ func iosAlertDictionary(payload *payload.Payload, req PushNotification) *payload
|
||||||
}
|
}
|
||||||
|
|
||||||
// General
|
// General
|
||||||
|
|
||||||
if len(req.Category) > 0 {
|
if len(req.Category) > 0 {
|
||||||
payload.Category(req.Category)
|
payload.Category(req.Category)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if len(req.Alert.SummaryArg) > 0 {
|
||||||
|
payload.AlertSummaryArg(req.Alert.SummaryArg)
|
||||||
|
}
|
||||||
|
|
||||||
|
if req.Alert.SummaryArgCount > 0 {
|
||||||
|
payload.AlertSummaryArgCount(req.Alert.SummaryArgCount)
|
||||||
|
}
|
||||||
|
|
||||||
return payload
|
return payload
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -157,6 +157,38 @@ func TestIOSSoundAndVolume(t *testing.T) {
|
||||||
assert.Equal(t, int64(1), soundCritical)
|
assert.Equal(t, int64(1), soundCritical)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestIOSSummaryArg(t *testing.T) {
|
||||||
|
var dat map[string]interface{}
|
||||||
|
|
||||||
|
test := "test"
|
||||||
|
message := "Welcome notification Server"
|
||||||
|
req := PushNotification{
|
||||||
|
ApnsID: test,
|
||||||
|
Topic: test,
|
||||||
|
Priority: "normal",
|
||||||
|
Message: message,
|
||||||
|
Alert: Alert{
|
||||||
|
SummaryArg: "test",
|
||||||
|
SummaryArgCount: 3,
|
||||||
|
},
|
||||||
|
}
|
||||||
|
|
||||||
|
notification := GetIOSNotification(req)
|
||||||
|
|
||||||
|
dump, _ := json.Marshal(notification.Payload)
|
||||||
|
data := []byte(string(dump))
|
||||||
|
|
||||||
|
if err := json.Unmarshal(data, &dat); err != nil {
|
||||||
|
panic(err)
|
||||||
|
}
|
||||||
|
|
||||||
|
assert.Equal(t, test, notification.ApnsID)
|
||||||
|
assert.Equal(t, test, notification.Topic)
|
||||||
|
assert.Equal(t, ApnsPriorityLow, notification.Priority)
|
||||||
|
assert.Equal(t, "test", dat["aps"].(map[string]interface{})["alert"].(map[string]interface{})["summary-arg"])
|
||||||
|
assert.Equal(t, float64(3), dat["aps"].(map[string]interface{})["alert"].(map[string]interface{})["summary-arg-count"])
|
||||||
|
}
|
||||||
|
|
||||||
// Silent Notification which payload’s aps dictionary must not contain the alert, sound, or badge keys.
|
// Silent Notification which payload’s aps dictionary must not contain the alert, sound, or badge keys.
|
||||||
// ref: https://goo.gl/m9xyqG
|
// ref: https://goo.gl/m9xyqG
|
||||||
func TestSendZeroValueForBadgeKey(t *testing.T) {
|
func TestSendZeroValueForBadgeKey(t *testing.T) {
|
||||||
|
|
|
@ -22,16 +22,18 @@ type aps struct {
|
||||||
}
|
}
|
||||||
|
|
||||||
type alert struct {
|
type alert struct {
|
||||||
Action string `json:"action,omitempty"`
|
Action string `json:"action,omitempty"`
|
||||||
ActionLocKey string `json:"action-loc-key,omitempty"`
|
ActionLocKey string `json:"action-loc-key,omitempty"`
|
||||||
Body string `json:"body,omitempty"`
|
Body string `json:"body,omitempty"`
|
||||||
LaunchImage string `json:"launch-image,omitempty"`
|
LaunchImage string `json:"launch-image,omitempty"`
|
||||||
LocArgs []string `json:"loc-args,omitempty"`
|
LocArgs []string `json:"loc-args,omitempty"`
|
||||||
LocKey string `json:"loc-key,omitempty"`
|
LocKey string `json:"loc-key,omitempty"`
|
||||||
Title string `json:"title,omitempty"`
|
Title string `json:"title,omitempty"`
|
||||||
Subtitle string `json:"subtitle,omitempty"`
|
Subtitle string `json:"subtitle,omitempty"`
|
||||||
TitleLocArgs []string `json:"title-loc-args,omitempty"`
|
TitleLocArgs []string `json:"title-loc-args,omitempty"`
|
||||||
TitleLocKey string `json:"title-loc-key,omitempty"`
|
TitleLocKey string `json:"title-loc-key,omitempty"`
|
||||||
|
SummaryArg string `json:"summary-arg,omitempty"`
|
||||||
|
SummaryArgCount int `json:"summary-arg-count,omitempty"`
|
||||||
}
|
}
|
||||||
|
|
||||||
type sound struct {
|
type sound struct {
|
||||||
|
@ -235,13 +237,35 @@ func (p *Payload) AlertActionLocKey(key string) *Payload {
|
||||||
return p
|
return p
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// AlertSummaryArg sets the aps alert summary arg key on the payload.
|
||||||
|
// This is the string that is used as a key to fill in an argument
|
||||||
|
// at the bottom of a notification to provide more context, such as
|
||||||
|
// a name associated with the sender of the notification.
|
||||||
|
//
|
||||||
|
// {"aps":{"alert":{"summary-arg":key}}}
|
||||||
|
func (p *Payload) AlertSummaryArg(key string) *Payload {
|
||||||
|
p.aps().alert().SummaryArg = key
|
||||||
|
return p
|
||||||
|
}
|
||||||
|
|
||||||
|
// AlertSummaryArgCount sets the aps alert summary arg count key on the payload.
|
||||||
|
// This integer sets a custom "weight" on the notification, effectively
|
||||||
|
// allowing a notification to be viewed internally as two. For example if
|
||||||
|
// a notification encompasses 3 messages, you can set it to 3.
|
||||||
|
//
|
||||||
|
// {"aps":{"alert":{"summary-arg-count":key}}}
|
||||||
|
func (p *Payload) AlertSummaryArgCount(key int) *Payload {
|
||||||
|
p.aps().alert().SummaryArgCount = key
|
||||||
|
return p
|
||||||
|
}
|
||||||
|
|
||||||
// General
|
// General
|
||||||
|
|
||||||
// Category sets the aps category on the payload.
|
// Category sets the aps category on the payload.
|
||||||
// This is a string value that represents the identifier property of the
|
// This is a string value that represents the identifier property of the
|
||||||
// UIMutableUserNotificationCategory object you created to define custom actions.
|
// UIMutableUserNotificationCategory object you created to define custom actions.
|
||||||
//
|
//
|
||||||
// {"aps":{"alert":{"category":category}}}
|
// {"aps":{"category":category}}
|
||||||
func (p *Payload) Category(category string) *Payload {
|
func (p *Payload) Category(category string) *Payload {
|
||||||
p.aps().Category = category
|
p.aps().Category = category
|
||||||
return p
|
return p
|
||||||
|
|
|
@ -449,22 +449,22 @@
|
||||||
{
|
{
|
||||||
"checksumSHA1": "DL5vX9aOefzIAxMDdaQBtgRdR0Y=",
|
"checksumSHA1": "DL5vX9aOefzIAxMDdaQBtgRdR0Y=",
|
||||||
"path": "github.com/sideshow/apns2",
|
"path": "github.com/sideshow/apns2",
|
||||||
"revision": "3c5d4af1700ed9111ecb16a9a99a92a00c8b2f27",
|
"revision": "5c6f7afc0242dbeab1c0b26a1efd761a67228004",
|
||||||
"revisionTime": "2018-08-27T05:51:07Z",
|
"revisionTime": "2018-10-12T08:22:23Z",
|
||||||
"version": "master",
|
"version": "v0.15",
|
||||||
"versionExact": "master"
|
"versionExact": "v0.15"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"checksumSHA1": "EHOwwdWPJGt1vNVeJxyRDRHBhl8=",
|
"checksumSHA1": "EHOwwdWPJGt1vNVeJxyRDRHBhl8=",
|
||||||
"path": "github.com/sideshow/apns2/certificate",
|
"path": "github.com/sideshow/apns2/certificate",
|
||||||
"revision": "c6554aff77e6e5580dec977c8c33cc238f329ab0",
|
"revision": "060d44b53d05502e715958efde28063cd0746dba",
|
||||||
"revisionTime": "2018-04-13T21:53:35Z"
|
"revisionTime": "2018-10-14T01:24:05Z"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"checksumSHA1": "36bPwB1aiQCxfmdwfgYmI89I9nI=",
|
"checksumSHA1": "uwySZ0Z4LZ+9PIYqg7twpCQxv+I=",
|
||||||
"path": "github.com/sideshow/apns2/payload",
|
"path": "github.com/sideshow/apns2/payload",
|
||||||
"revision": "3c5d4af1700ed9111ecb16a9a99a92a00c8b2f27",
|
"revision": "060d44b53d05502e715958efde28063cd0746dba",
|
||||||
"revisionTime": "2018-08-27T05:51:07Z"
|
"revisionTime": "2018-10-14T01:24:05Z"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"checksumSHA1": "nkQ/1JoIY4jh8XlI8LClfFVux9U=",
|
"checksumSHA1": "nkQ/1JoIY4jh8XlI8LClfFVux9U=",
|
||||||
|
|
Loading…
Reference in New Issue