From 5b2e9dd13058e352d9050cfb4beae8bd2dd7796d Mon Sep 17 00:00:00 2001 From: Stefan Trauth Date: Mon, 24 Jun 2019 18:20:03 +0200 Subject: [PATCH] add support for apns-priority key --- spec/APNS.spec.js | 10 ++++++++-- src/APNS.js | 9 +++++++-- 2 files changed, 15 insertions(+), 4 deletions(-) diff --git a/spec/APNS.spec.js b/spec/APNS.spec.js index 9b9a6d8..679cacb 100644 --- a/spec/APNS.spec.js +++ b/spec/APNS.spec.js @@ -172,8 +172,9 @@ describe('APNS', () => { }; let expirationTime = 1454571491354; let collapseId = "collapseIdentifier"; + let priority = 5; - let notification = APNS._generateNotification(data, { expirationTime: expirationTime, collapseId: collapseId }); + let notification = APNS._generateNotification(data, { expirationTime: expirationTime, collapseId: collapseId, priority: priority }); expect(notification.aps.alert).toEqual({ body: 'alert', title: 'title' }); expect(notification.aps.badge).toEqual(data.badge); @@ -188,6 +189,7 @@ describe('APNS', () => { }); expect(notification.expiry).toEqual(Math.round(expirationTime / 1000)); expect(notification.collapseId).toEqual(collapseId); + expect(notification.priority).toEqual(priority); done(); }); @@ -208,11 +210,13 @@ describe('APNS', () => { }; let expirationTime = 1454571491354; let collapseId = "collapseIdentifier"; + let priority = 5 - let notification = APNS._generateNotification(data, { expirationTime: expirationTime, collapseId: collapseId }); + let notification = APNS._generateNotification(data, { expirationTime: expirationTime, collapseId: collapseId, priority: priority }); expect(notification.expiry).toEqual(Math.round(expirationTime / 1000)); expect(notification.collapseId).toEqual(collapseId); + expect(notification.priority).toEqual(priority); let stringifiedJSON = notification.compile(); let jsonObject = JSON.parse(stringifiedJSON); @@ -283,6 +287,7 @@ describe('APNS', () => { let data = { 'collapse_id': collapseId, 'expiration_time': expirationTime, + 'priority': 6, 'data': { 'alert': 'alert' } @@ -313,6 +318,7 @@ describe('APNS', () => { expect(notification.aps.alert).toEqual(data.data.alert); expect(notification.expiry).toEqual(Math.round(data['expiration_time'] / 1000)); expect(notification.collapseId).toEqual(data['collapse_id']); + expect(notification.priority).toEqual(data['priority']); let apnDevices = calledArgs[1]; expect(apnDevices.length).toEqual(4); done(); diff --git a/src/APNS.js b/src/APNS.js index 8783e54..0458f76 100644 --- a/src/APNS.js +++ b/src/APNS.js @@ -73,6 +73,7 @@ export class APNS { let coreData = data.data; let expirationTime = data['expiration_time']; let collapseId = data['collapse_id']; + let priority = data['priority']; let allPromises = []; let devicesPerAppIdentifier = {}; @@ -96,7 +97,7 @@ export class APNS { continue; } - let headers = { expirationTime: expirationTime, topic: appIdentifier, collapseId: collapseId } + let headers = { expirationTime: expirationTime, topic: appIdentifier, collapseId: collapseId, priority: priority } let notification = APNS._generateNotification(coreData, headers); const deviceIds = devices.map(device => device.deviceToken); let promise = this.sendThroughProvider(notification, deviceIds, providers); @@ -166,7 +167,7 @@ export class APNS { /** * Generate the apns Notification from the data we get from api request. * @param {Object} coreData The data field under api request body - * @param {Object} headers The header properties for the notification (topic, expirationTime, collapseId) + * @param {Object} headers The header properties for the notification (topic, expirationTime, collapseId, priority) * @returns {Object} A apns Notification */ static _generateNotification(coreData, headers) { @@ -214,6 +215,10 @@ export class APNS { notification.topic = headers.topic; notification.expiry = Math.round(headers.expirationTime / 1000); notification.collapseId = headers.collapseId; + if (headers.priority) { + // if headers priority is not set 'node-apn' defaults it to 5 which is min. required value for background pushes to launch the app in background. + notification.priority = headers.priority + } return notification; }