Skip to content

Commit 201f37b

Browse files
committed
Merge pull request #239 from ToothlessGear/v1-remove-message
V1: remove Message
2 parents dce3ae7 + f3208cf commit 201f37b

8 files changed

Lines changed: 146 additions & 455 deletions

File tree

README.md

Lines changed: 28 additions & 57 deletions
Original file line numberDiff line numberDiff line change
@@ -33,17 +33,14 @@ If you are new to GCM you should probably look into the [documentation](https://
3333
According to below **Usage** reference, we could create such application:
3434

3535
```js
36-
var gcm = require('node-gcm');
36+
var gcm = require('node-gcm')('YOUR_API_KEY_HERE');
3737

38-
var message = new gcm.Message({
38+
var message = {
3939
data: { key1: 'msg1' }
40-
});
41-
42-
// Set up the sender with you API key, prepare your recipients' registration tokens.
43-
var sender = new gcm.Sender('YOUR_API_KEY_HERE');
40+
};
4441
var regTokens = ['YOUR_REG_TOKEN_HERE'];
4542

46-
sender.send(message, { registrationTokens: regTokens }, function (err, response) {
43+
gcm.send(message, { registrationTokens: regTokens }, function (err, response) {
4744
if(err) console.error(err);
4845
else console.log(response);
4946
});
@@ -52,21 +49,17 @@ sender.send(message, { registrationTokens: regTokens }, function (err, response)
5249
## Usage
5350

5451
```js
55-
var gcm = require('node-gcm');
52+
var gcm = require('node-gcm')('insert Google Server API Key here');
5653

57-
// Create a message
58-
// ... with default values
59-
var message = new gcm.Message();
60-
61-
// ... or some given values
62-
var message = new gcm.Message({
63-
collapseKey: 'demo',
54+
// Create a message (all possible values shown)
55+
var message = {
56+
collapse_key: 'demo',
6457
priority: 'high',
65-
contentAvailable: true,
66-
delayWhileIdle: true,
67-
timeToLive: 3,
68-
restrictedPackageName: "somePackageName",
69-
dryRun: true,
58+
content_available: true,
59+
delay_while_idle: true,
60+
time_to_live: 3,
61+
restricted_package_name: "somePackageName",
62+
dry_run: true,
7063
data: {
7164
key1: 'message1',
7265
key2: 'message2'
@@ -76,21 +69,7 @@ var message = new gcm.Message({
7669
icon: "ic_launcher",
7770
body: "This is a notification that will be displayed ASAP."
7871
}
79-
});
80-
81-
// Change the message data
82-
// ... as key-value
83-
message.addData('key1','message1');
84-
message.addData('key2','message2');
85-
86-
// ... or as a data object (overwrites previous data object)
87-
message.addData({
88-
key1: 'message1',
89-
key2: 'message2'
90-
});
91-
92-
// Set up the sender with you API key
93-
var sender = new gcm.Sender('insert Google Server API Key here');
72+
};
9473

9574
// Add the registration tokens of the devices you want to send to
9675
var registrationTokens = [];
@@ -99,28 +78,28 @@ registrationTokens.push('regToken2');
9978

10079
// Send the message
10180
// ... trying only once
102-
sender.sendNoRetry(message, { registrationTokens: registrationTokens }, function(err, response) {
81+
gcm.sendNoRetry(message, { registrationTokens: registrationTokens }, function(err, response) {
10382
if(err) console.error(err);
10483
else console.log(response);
10584
});
10685

10786
// ... or retrying
108-
sender.send(message, { registrationTokens: registrationTokens }, function (err, response) {
87+
gcm.send(message, { registrationTokens: registrationTokens }, function (err, response) {
10988
if(err) console.error(err);
11089
else console.log(response);
11190
});
11291

11392
// ... or retrying a specific number of times (10)
114-
sender.send(message, { registrationTokens: registrationTokens }, 10, function (err, response) {
93+
gcm.send(message, { registrationTokens: registrationTokens }, 10, function (err, response) {
11594
if(err) console.error(err);
11695
else console.log(response);
11796
});
11897
```
98+
11999
## Recipients
120100

121101
You can send push notifications to various recipient types by providing one of the following recipient keys:
122102

123-
124103
|Key|Type|Description|
125104
|---|---|---|
126105
|to|String|A single [registration token](https://developers.google.com/cloud-messaging/android/client#sample-register), [notification key](https://developers.google.com/cloud-messaging/notifications), or [topic](https://developers.google.com/cloud-messaging/topic-messaging).
@@ -137,21 +116,13 @@ This is due to [a restriction](http://developer.android.com/training/cloudsync/g
137116
## Notification usage
138117

139118
```js
140-
141-
var message = new gcm.Message();
142-
143-
// Add notification payload as key value
144-
message.addNotification('title', 'Alert!!!');
145-
message.addNotification('body', 'Abnormal data access');
146-
message.addNotification('icon', 'ic_launcher');
147-
148-
// as object
149-
message.addNotification({
150-
title: 'Alert!!!',
151-
body: 'Abnormal data access',
152-
icon: 'ic_launcher'
153-
});
154-
119+
var message = {
120+
notification: {
121+
title: 'Alert!!!',
122+
body: 'Abnormal data access',
123+
icon: 'ic_launcher'
124+
}
125+
};
155126
```
156127

157128
### Notification payload option table
@@ -184,13 +155,13 @@ var requestOptions = {
184155
timeout: 5000
185156
};
186157

187-
// Set up the sender with your API key and request options
188-
var sender = new gcm.Sender('YOUR_API_KEY_HERE', requestOptions);
158+
// Set up gcm with your API key and request options
159+
var gcm = require("node-gcm")('YOUR_API_KEY_HERE', requestOptions);
189160

190161
// Prepare a GCM message...
191162

192163
// Send it to GCM endpoint with modified request options
193-
sender.send(message, { registrationTokens: regTokens }, function (err, response) {
164+
gcm.send(message, { registrationTokens: regTokens }, function (err, response) {
194165
if(err) console.error(err);
195166
else console.log(response);
196167
});

examples/notification.js

Lines changed: 13 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,19 +1,21 @@
1-
var gcm = require('../lib/node-gcm');
2-
3-
var message = new gcm.Message();
4-
5-
message.addData('hello', 'world');
6-
message.addNotification('title', 'Hello');
7-
message.addNotification('icon', 'ic_launcher');
8-
message.addNotification('body', 'World');
1+
//Replace your developer API key with GCM enabled here
2+
var gcm = require('../index')('AIza*******************5O6FM');
93

4+
var message = {
5+
data: {
6+
hello: 'world'
7+
},
8+
notification: {
9+
title: 'Hello',
10+
icon: 'ic_launcher',
11+
body: 'World'
12+
}
13+
};
1014

1115
//Add your mobile device registration tokens here
1216
var regTokens = ['ecG3ps_bNBk:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxXl7TDJkW'];
13-
//Replace your developer API key with GCM enabled here
14-
var sender = new gcm.Sender('AIza*******************5O6FM');
1517

16-
sender.send(message, regTokens, function (err, response) {
18+
gcm.send(message, regTokens, function (err, response) {
1719
if(err) {
1820
console.error(err);
1921
} else {

lib/message-options.js

Lines changed: 8 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -1,43 +1,31 @@
11
/**
22
* This module defines all the arguments that may be passed to a message.
3-
*
4-
* Each argument may contain a field `__argName`, if the name of the field
5-
* should be different when sent to the server.
6-
*
7-
* The argument may also contain a field `__argType`, if the given
3+
*
4+
* Each argument may contain a field `__argType`, in which case the given
85
* argument must be of that type. The types are the strings resulting from
96
* calling `typeof <arg>` where `<arg>` is the argument.
10-
*
11-
* Other than that, the arguments are expected to follow the indicated
12-
* structure.
137
*/
148

159
module.exports = {
16-
collapseKey: {
17-
__argName: "collapse_key",
10+
collapse_key: {
1811
__argType: "string"
1912
},
2013
priority: {
2114
__argType: "string"
2215
},
23-
contentAvailable: {
24-
__argName: "content_available",
16+
content_available: {
2517
__argType: "boolean"
2618
},
27-
delayWhileIdle: {
28-
__argName: "delay_while_idle",
19+
delay_while_idle: {
2920
__argType: "boolean"
3021
},
31-
timeToLive: {
32-
__argName: "time_to_live",
22+
time_to_live: {
3323
__argType: "number"
3424
},
35-
restrictedPackageName: {
36-
__argName: "restricted_package_name",
25+
restricted_package_name: {
3726
__argType: "string"
3827
},
39-
dryRun: {
40-
__argName: "dry_run",
28+
dry_run: {
4129
__argType: "boolean"
4230
},
4331
data: {

lib/message.js

Lines changed: 0 additions & 66 deletions
This file was deleted.

lib/node-gcm.js

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1 @@
1-
exports.Constants = require('./constants');
2-
exports.Message = require('./message');
3-
exports.Sender = require('./sender');
1+
module.exports = require("./sender");

lib/sender.js

Lines changed: 17 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ var Constants = require('./constants');
22
var _ = require('lodash');
33
var request = require('request');
44
var debug = require('debug')('node-gcm');
5+
var messageOptions = require("./message-options");
56

67
function Sender(key, options) {
78
if (!(this instanceof Sender)) {
@@ -168,7 +169,7 @@ Sender.prototype.sendNoRetry = function(message, recipient, callback) {
168169
};
169170

170171
function getRequestBody(message, recipient, callback) {
171-
var body = message.toJson();
172+
var body = cleanParams(message);
172173

173174
if(typeof recipient == "string") {
174175
body.to = recipient;
@@ -201,6 +202,21 @@ function getRequestBody(message, recipient, callback) {
201202
return nextTick(callback, 'Invalid recipient (' + recipient + ', type ' + typeof recipient + ') provided!');
202203
}
203204

205+
function cleanParams(raw) {
206+
var params = {};
207+
Object.keys(raw).forEach(function(param) {
208+
var paramOptions = messageOptions[param];
209+
if(!paramOptions) {
210+
return console.warn("node-gcm ignored unknown message parameter " + param);
211+
}
212+
if(paramOptions.__argType != typeof raw[param]) {
213+
return console.warn("node-gcm ignored wrongly typed message parameter " + param + " (was " + typeof raw[param] + ", expected " + paramOptions.__argType + ")");
214+
}
215+
params[param] = raw[param];
216+
});
217+
return params;
218+
}
219+
204220
function nextTick(func) {
205221
var args = Array.prototype.slice.call(arguments, 1);
206222
process.nextTick(function() {

0 commit comments

Comments
 (0)