Skip to content

Commit cb8c98f

Browse files
Amnellflovilmart
authored andcommitted
Add support for passing collapse-id to APNS (#79)
* Add support for passing collapseId to APNS * Rename appIdentifier header to topic
1 parent 709dbf1 commit cb8c98f

File tree

2 files changed

+20
-7
lines changed

2 files changed

+20
-7
lines changed

spec/APNS.spec.js

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -169,8 +169,9 @@ describe('APNS', () => {
169169
'keyAgain': 'valueAgain'
170170
};
171171
let expirationTime = 1454571491354;
172+
let collapseId = "collapseIdentifier";
172173

173-
let notification = APNS._generateNotification(data, expirationTime);
174+
let notification = APNS._generateNotification(data, { expirationTime: expirationTime, collapseId: collapseId });
174175

175176
expect(notification.aps.alert).toEqual(data.alert);
176177
expect(notification.aps.badge).toEqual(data.badge);
@@ -183,6 +184,7 @@ describe('APNS', () => {
183184
'keyAgain': 'valueAgain'
184185
});
185186
expect(notification.expiry).toEqual(expirationTime / 1000);
187+
expect(notification.collapseId).toEqual(collapseId);
186188
done();
187189
});
188190

@@ -239,7 +241,9 @@ describe('APNS', () => {
239241
});
240242
// Mock data
241243
let expirationTime = 1454571491354;
244+
let collapseId = "collapseIdentifier";
242245
let data = {
246+
'collapse_id': collapseId,
243247
'expiration_time': expirationTime,
244248
'data': {
245249
'alert': 'alert'
@@ -270,6 +274,7 @@ describe('APNS', () => {
270274
let notification = calledArgs[0];
271275
expect(notification.aps.alert).toEqual(data.data.alert);
272276
expect(notification.expiry).toEqual(data['expiration_time'] / 1000);
277+
expect(notification.collapseId).toEqual(data['collapse_id']);
273278
let apnDevices = calledArgs[1];
274279
expect(apnDevices.length).toEqual(4);
275280
done();
@@ -306,7 +311,9 @@ describe('APNS', () => {
306311
apns.providers = [provider, providerDev];
307312
// Mock data
308313
let expirationTime = 1454571491354;
314+
let collapseId = "collapseIdentifier";
309315
let data = {
316+
'collapse_id': collapseId,
310317
'expiration_time': expirationTime,
311318
'data': {
312319
'alert': 'alert'
@@ -343,6 +350,7 @@ describe('APNS', () => {
343350
let notification = calledArgs[0];
344351
expect(notification.aps.alert).toEqual(data.data.alert);
345352
expect(notification.expiry).toEqual(data['expiration_time'] / 1000);
353+
expect(notification.collapseId).toEqual(data['collapse_id']);
346354
let apnDevices = calledArgs[1];
347355
expect(apnDevices.length).toBe(3);
348356

@@ -351,6 +359,7 @@ describe('APNS', () => {
351359
notification = calledArgs[0];
352360
expect(notification.aps.alert).toEqual(data.data.alert);
353361
expect(notification.expiry).toEqual(data['expiration_time'] / 1000);
362+
expect(notification.collapseId).toEqual(data['collapse_id']);
354363
apnDevices = calledArgs[1];
355364
expect(apnDevices.length).toBe(2);
356365
done();

src/APNS.js

Lines changed: 10 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -72,6 +72,7 @@ export class APNS {
7272
send(data, allDevices) {
7373
let coreData = data.data;
7474
let expirationTime = data['expiration_time'];
75+
let collapseId = data['collapse_id'];
7576
let allPromises = [];
7677

7778
let devicesPerAppIdentifier = {};
@@ -95,7 +96,8 @@ export class APNS {
9596
continue;
9697
}
9798

98-
let notification = APNS._generateNotification(coreData, expirationTime, appIdentifier);
99+
let headers = { expirationTime: expirationTime, topic: appIdentifier, collapseId: collapseId }
100+
let notification = APNS._generateNotification(coreData, headers);
99101
const deviceIds = devices.map(device => device.deviceToken);
100102
let promise = this.sendThroughProvider(notification, deviceIds, providers);
101103
allPromises.push(promise.then(this._handlePromise.bind(this)));
@@ -164,11 +166,10 @@ export class APNS {
164166
/**
165167
* Generate the apns Notification from the data we get from api request.
166168
* @param {Object} coreData The data field under api request body
167-
* @param {number} expirationTime The expiration time in milliseconds since Jan 1 1970
168-
* @param {String} topic Topic the Notification is sent to
169+
* @param {Object} headers The header properties for the notification (topic, expirationTime, collapseId)
169170
* @returns {Object} A apns Notification
170171
*/
171-
static _generateNotification(coreData, expirationTime, topic) {
172+
static _generateNotification(coreData, headers) {
172173
let notification = new apn.Notification();
173174
let payload = {};
174175
for (let key in coreData) {
@@ -198,9 +199,12 @@ export class APNS {
198199
break;
199200
}
200201
}
201-
notification.topic = topic;
202+
202203
notification.payload = payload;
203-
notification.expiry = expirationTime / 1000;
204+
205+
notification.topic = headers.topic;
206+
notification.expiry = headers.expirationTime / 1000;
207+
notification.collapseId = headers.collapseId;
204208
return notification;
205209
}
206210

0 commit comments

Comments
 (0)