Hi,
As you may have experienced or seen the cordova push plugin is not always simple to get
started with, there are still some things that are platform specific even though compared
to the ‘original’ it has improved there is room for improvement. Here are some suggestions
to make it even simpler:
Right now the API looks like this:
var pushConfig = {
// senderID is only used in the Android/GCM case
senderID: "<senderID e.g Google Project ID only for android>",
pushServerURL: "<pushServerURL e.g http(s)//host:port/context >",
variantID: "<variantID e.g. 1234456-234320>",
variantSecret: "<variantSecret e.g. 1234456-234320>",
alias: "<alias e.g. a username or an email address optional>"
}
//badge and sound are iOS specific, and ignored on Android
push.register(successHandler, errorHandler, {"badge": "true",
"sound": "true",
"ecb": "onNotification", pushConfig: pushConfig});
Suggestion number one, is to remove the successHandler and use that as the callback for
notifications:
push.register(onNotification, errorHandler, {"badge": "true",
"sound": "true", pushConfig: pushConfig});
Now the Javascript can verify that the callback is a function because it’s no longer a
string and the need for a separate successHandler is overrated as you will either get
messages or your errorHandler gets invoked.
For iOS we have these badge and sound flags we could we get rid of those as well? When you
don’t want a badge then just don’t send it in the message!? Then the pushConfig can be
inlined making it look like this:
push.register(onNotification, errorHandler, {
// senderID is only used in the Android/GCM case
senderID: "<senderID e.g Google Project ID only for android>",
pushServerURL: "<pushServerURL e.g http(s)//host:port/context >",
variantID: "<variantID e.g. 1234456-234320>",
variantSecret: "<variantSecret e.g. 1234456-234320>",
alias: "<alias e.g. a username or an email address optional>"
});
Till now all these changes can be made on the plugin, but we could take it even further.
Two things that are still platform dependent the senderId and the variantID/secret. Now
senderId is ‘known’ by UPS so why do we need to specify it here? We could make senderId
part of the response when registering a device on UPS then the client doesn’t need to
specify it and all configuration is in one place.
That leaves variantID/secret and that is the boldest proposal. How about we make it
possible to register for an application instead for a specific variant? Then based on the
meta information (deviceType, operatingSystem and osVersion) we choose the right variant.
If we do all of the above there will be no platform specific code at all and the final
script could look as simple as this:
push.register(function(event) {
alert(event.alert);
},
function(error) {
throw error;
}, {
pushServerURL: "<pushServerURL e.g http(s)//host:port/context >",
applicationID: "<applicationID e.g. 1234456-234320>",
secret: "<secret e.g. 1234456-234320>",
alias: "<alias e.g. a username or an email address optional>"
});
Push notifications in one statement for all devices :)
WDYT
Erik Jan