If you ever wondered how to test that your push notifications work on Android without setting up any server here is how to do.
Install
npm install gulp node-gcm
Get Api key, Sender ID and Device ID
In order to be able to send push notifications we need only need the Google Cloud Api key, and the device ID(s).
To get the Api key and the senderID you can register there: https://developers.google.com/mobile/add
As for the device ID it can be found once your device is registered.
If you are using this Cordova plugin https://github.com/phonegap-build/PushPlugin you can get it like this (note that the senderID is used here):
document.addEventListener("deviceready", function() {
var pushNotification = window.plugins.pushNotification;
pushNotification.register(
successHandler,
errorHandler, {
"senderID": "replace_with_sender_id (12 digits number)",
"ecb": "onNotification"
});
function onNotification(e) {
switch (e.event) {
case 'registered':
if (e.regid.length > 0) {
// Your GCM push server needs to know the regID before it can push to this device
// here is where you might want to send it the regID for later use.
console.log('Device id', e.regid);
}
break;
}
}
function successHandler() {}
function errorHandler() {}
});
Script
Now that you have both Device ID and Api key let’s create a script that send push notifications.
gulp.task('push:android', function() {
if (!gutil.env.apiKey || gutil.env.apiKey === true) {
throw new Error('You must specify the android Api key, refer to the documentation');
}
if (!gutil.env.deviceId || gutil.env.deviceId === true) {
throw new Error('You must specify the android ID, refer to the documentation');
}
console.log('apiKey', gutil.env.apiKey);
console.log('deviceId', gutil.env.deviceId);
var gcm = require('node-gcm')
var message = new gcm.Message({
collapseKey: 'demo',
delayWhileIdle: true,
timeToLive: 3,
data: {
key1: 'message1',
key2: 'message2'
}
});
var sender = new gcm.Sender(gutil.env.apiKey);
sender.send(message, (gutil.env.deviceId instanceof Array) ? gutil.env.deviceId : [gutil.env.deviceId], 5, function(err, result) {
if (err) {
console.error('Failed, status code', err);
} else {
console.log('Success', result);
}
});
})
Run
You can run the script like like this on one or several devices:
# One device
gulp push:android --apiKey YOUR_API_KEY --deviceId YOUR_DEVICE_ID
# Two devices
gulp push:android --apiKey YOUR_API_KEY --deviceId YOUR_DEVICE_ID --deviceId YOUR_DEVICE_ID
If everything is fine you should have your push notifications working.
Commun error
If your api key and senderId are not ok you will get this error message:
Success { multicast_id: 7412383159195664000,
success: 0,
failure: 1,
canonical_ids: 0,
results: [ { error: 'MismatchSenderId' } ] }
If so regenerate a api key using this link https://github.com/phonegap-build/PushPlugin.