iOS: Allow message and title to be used together, without using the alert-payload (#553)
This PR will allow callers to use the Message & Title without the need of setting any values in the alert-payload, essentially making it easier to build cross-device-push for regular title+message pushes on different platforms. Co-authored-by: Alexander Widerberg <alexander.widerberg@xmreality.se>
This commit is contained in:
parent
f32e5e838b
commit
36bc4f0f4b
|
@ -201,6 +201,10 @@ func iosAlertDictionary(payload *payload.Payload, req PushNotification) *payload
|
|||
payload.AlertTitle(req.Title)
|
||||
}
|
||||
|
||||
if len(req.Message) > 0 && len(req.Title) > 0 {
|
||||
payload.AlertBody(req.Message)
|
||||
}
|
||||
|
||||
if len(req.Alert.Title) > 0 {
|
||||
payload.AlertTitle(req.Alert.Title)
|
||||
}
|
||||
|
@ -286,8 +290,8 @@ func GetIOSNotification(req PushNotification) *apns2.Notification {
|
|||
|
||||
payload := payload.NewPayload()
|
||||
|
||||
// add alert object if message length > 0
|
||||
if len(req.Message) > 0 {
|
||||
// add alert object if message length > 0 and title length == 0
|
||||
if len(req.Message) > 0 && len(req.Title) == 0 {
|
||||
payload.Alert(req.Message)
|
||||
}
|
||||
|
||||
|
|
|
@ -450,6 +450,62 @@ func TestAlertStringExample3ForIos(t *testing.T) {
|
|||
assert.Equal(t, test, dat["aps"].(map[string]interface{})["alert"])
|
||||
}
|
||||
|
||||
func TestMessageAndTitle(t *testing.T) {
|
||||
var dat map[string]interface{}
|
||||
|
||||
test := "test"
|
||||
message := "Welcome notification Server"
|
||||
title := "Welcome notification Server title"
|
||||
req := PushNotification{
|
||||
ApnsID: test,
|
||||
Topic: test,
|
||||
Priority: "normal",
|
||||
Message: message,
|
||||
Title: title,
|
||||
ContentAvailable: true,
|
||||
}
|
||||
|
||||
notification := GetIOSNotification(req)
|
||||
|
||||
dump, _ := json.Marshal(notification.Payload)
|
||||
data := []byte(string(dump))
|
||||
|
||||
if err := json.Unmarshal(data, &dat); err != nil {
|
||||
log.Println(err)
|
||||
panic(err)
|
||||
}
|
||||
|
||||
alert, _ := jsonparser.GetString(data, "aps", "alert")
|
||||
alertBody, _ := jsonparser.GetString(data, "aps", "alert", "body")
|
||||
alertTitle, _ := jsonparser.GetString(data, "aps", "alert", "title")
|
||||
|
||||
assert.Equal(t, test, notification.ApnsID)
|
||||
assert.Equal(t, ApnsPriorityLow, notification.Priority)
|
||||
assert.Equal(t, message, alertBody)
|
||||
assert.Equal(t, title, alertTitle)
|
||||
assert.NotEqual(t, message, alert)
|
||||
|
||||
// Add alert body
|
||||
messageOverride := "Welcome notification Server overridden"
|
||||
req.Alert.Body = messageOverride
|
||||
|
||||
notification = GetIOSNotification(req)
|
||||
|
||||
dump, _ = json.Marshal(notification.Payload)
|
||||
data = []byte(string(dump))
|
||||
|
||||
if err := json.Unmarshal(data, &dat); err != nil {
|
||||
log.Println(err)
|
||||
panic(err)
|
||||
}
|
||||
|
||||
alertBodyOverridden, _ := jsonparser.GetString(data, "aps", "alert", "body")
|
||||
alertTitle, _ = jsonparser.GetString(data, "aps", "alert", "title")
|
||||
assert.Equal(t, messageOverride, alertBodyOverridden)
|
||||
assert.NotEqual(t, message, alertBodyOverridden)
|
||||
assert.Equal(t, title, alertTitle)
|
||||
}
|
||||
|
||||
func TestIOSAlertNotificationStructure(t *testing.T) {
|
||||
var dat map[string]interface{}
|
||||
|
||||
|
|
Loading…
Reference in New Issue