Skip to content

Commit cbd1b87

Browse files
committed
Add pushId back to GCM payload
1 parent 2414675 commit cbd1b87

File tree

2 files changed

+17
-6
lines changed

2 files changed

+17
-6
lines changed

spec/GCM.spec.js

Lines changed: 12 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -23,15 +23,17 @@ describe('GCM', () => {
2323
var data = {
2424
'alert': 'alert'
2525
};
26+
var pushId = 'pushId';
2627
var timeStamp = 1454538822113;
2728
var timeStampISOStr = new Date(timeStamp).toISOString();
2829

29-
var payload = GCM.generateGCMPayload(data, timeStamp);
30+
var payload = GCM.generateGCMPayload(data, pushId, timeStamp);
3031

3132
expect(payload.priority).toEqual('normal');
3233
expect(payload.timeToLive).toEqual(undefined);
3334
var dataFromPayload = payload.data;
3435
expect(dataFromPayload.time).toEqual(timeStampISOStr);
36+
expect(dataFromPayload['push_id']).toEqual(pushId);
3537
var dataFromUser = JSON.parse(dataFromPayload.data);
3638
expect(dataFromUser).toEqual(data);
3739
done();
@@ -42,16 +44,18 @@ describe('GCM', () => {
4244
var data = {
4345
'alert': 'alert'
4446
};
47+
var pushId = 'pushId';
4548
var timeStamp = 1454538822113;
4649
var timeStampISOStr = new Date(timeStamp).toISOString();
4750
var expirationTime = 1454538922113
4851

49-
var payload = GCM.generateGCMPayload(data, timeStamp, expirationTime);
52+
var payload = GCM.generateGCMPayload(data, pushId, timeStamp, expirationTime);
5053

5154
expect(payload.priority).toEqual('normal');
5255
expect(payload.timeToLive).toEqual(Math.floor((expirationTime - timeStamp) / 1000));
5356
var dataFromPayload = payload.data;
5457
expect(dataFromPayload.time).toEqual(timeStampISOStr);
58+
expect(dataFromPayload['push_id']).toEqual(pushId);
5559
var dataFromUser = JSON.parse(dataFromPayload.data);
5660
expect(dataFromUser).toEqual(data);
5761
done();
@@ -62,16 +66,18 @@ describe('GCM', () => {
6266
var data = {
6367
'alert': 'alert'
6468
};
69+
var pushId = 'pushId';
6570
var timeStamp = 1454538822113;
6671
var timeStampISOStr = new Date(timeStamp).toISOString();
6772
var expirationTime = 1454538822112;
6873

69-
var payload = GCM.generateGCMPayload(data, timeStamp, expirationTime);
74+
var payload = GCM.generateGCMPayload(data, pushId, timeStamp, expirationTime);
7075

7176
expect(payload.priority).toEqual('normal');
7277
expect(payload.timeToLive).toEqual(0);
7378
var dataFromPayload = payload.data;
7479
expect(dataFromPayload.time).toEqual(timeStampISOStr);
80+
expect(dataFromPayload['push_id']).toEqual(pushId);
7581
var dataFromUser = JSON.parse(dataFromPayload.data);
7682
expect(dataFromUser).toEqual(data);
7783
done();
@@ -82,17 +88,19 @@ describe('GCM', () => {
8288
var data = {
8389
'alert': 'alert'
8490
};
91+
var pushId = 'pushId';
8592
var timeStamp = 1454538822113;
8693
var timeStampISOStr = new Date(timeStamp).toISOString();
8794
var expirationTime = 2454538822113;
8895

89-
var payload = GCM.generateGCMPayload(data, timeStamp, expirationTime);
96+
var payload = GCM.generateGCMPayload(data, pushId, timeStamp, expirationTime);
9097

9198
expect(payload.priority).toEqual('normal');
9299
// Four week in second
93100
expect(payload.timeToLive).toEqual(4 * 7 * 24 * 60 * 60);
94101
var dataFromPayload = payload.data;
95102
expect(dataFromPayload.time).toEqual(timeStampISOStr);
103+
expect(dataFromPayload['push_id']).toEqual(pushId);
96104
var dataFromUser = JSON.parse(dataFromPayload.data);
97105
expect(dataFromUser).toEqual(data);
98106
done();

src/GCM.js

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@ function GCM(args) {
2222
* @returns {Object} A promise which is resolved after we get results from gcm
2323
*/
2424
GCM.prototype.send = function(data, devices) {
25+
let pushId = cryptoUtils.newObjectId();
2526
// Make a new array
2627
devices = new Array(...devices);
2728
let timestamp = Date.now();
@@ -52,7 +53,8 @@ GCM.prototype.send = function(data, devices) {
5253
expirationTime = data['expiration_time'];
5354
}
5455
// Generate gcm payload
55-
let gcmPayload = generateGCMPayload(data.data, timestamp, expirationTime);
56+
// PushId is not a formal field of GCM, but Parse Android SDK uses this field to deduplicate push notifications
57+
let gcmPayload = generateGCMPayload(data.data, pushId, timestamp, expirationTime);
5658
// Make and send gcm request
5759
let message = new gcm.Message(gcmPayload);
5860

@@ -107,9 +109,10 @@ GCM.prototype.send = function(data, devices) {
107109
* @param {Number|undefined} expirationTime A number whose format is the Unix Epoch or undefined
108110
* @returns {Object} A promise which is resolved after we get results from gcm
109111
*/
110-
function generateGCMPayload(coreData, timeStamp, expirationTime) {
112+
function generateGCMPayload(coreData, pushId, timeStamp, expirationTime) {
111113
let payloadData = {
112114
'time': new Date(timeStamp).toISOString(),
115+
'push_id': pushId,
113116
'data': JSON.stringify(coreData)
114117
}
115118
let payload = {

0 commit comments

Comments
 (0)