Skip to content

Instantly share code, notes, and snippets.

@girliemac
Last active July 2, 2018 19:07
Show Gist options
  • Save girliemac/61fc122b7df844563c5f to your computer and use it in GitHub Desktop.
Save girliemac/61fc122b7df844563c5f to your computer and use it in GitHub Desktop.
Snippets for blog, "Sending iOS Push Notifications via APNS in JavaScript using PhoneGap and PubNub"
<script type="text/javascript" src="js/PushNotification.js"></script>
<script type="text/javascript" src="//cdn.pubnub.com/pubnub-3.7.4.min.js"></script>
var pushNotification = window.plugins.pushNotification;
pushNotification.register(
tokenHandler,
errorHandler,
{
'badge':'false',
'sound':'false',
'alert':'true',
'ecb':'onNotificationAPN'
}
);
// You must install Cordova Device Plugin to be able to use the method
if(device.platform == 'iOS') {
// call the registration function for iOS
} else if (device.platform == 'Android' || device.platform == 'amazon-fireos') {
// Android
}
...
function tokenHandler (result) {
console.log('device token: '+ result);
// This is a device token you will need later to send a push
// Store this to PubNub to make your life easier :-)
}
/* Cordova Push Notification Demo
* index.js - this file should be in your_cordova_app_root/www/js
* Also, you need PushNotification.js and PubNub.js in the dir too.
*
* Install Cordova Deivce Plugin w/ CLI...
* $ cordova plugin add https://git-wip-us.apache.org/repos/asf/cordova-plugin-device.git
*
* Install Cordova Push Plugin w/ CLI...
* $ cordova plugin add https://github.com/phonegap-build/PushPlugin.git
*/
var channel = '';
var t = document.getElementById('temperature');
var pushNotification;
var pubnub = PUBNUB.init({
subscribe_key: 'sub-c-......',
publish_key: 'pub-c-......',
});
function initialize() {
bindEvents();
}
function bindEvents() {
document.addEventListener('deviceready', init, false);
}
function init() {
pushNotification = window.plugins.pushNotification;
if (device.platform == 'android' || device.platform == 'Android' || device.platform == 'amazon-fireos' ) {
pushNotification.register(successHandler, errorHandler, {
'senderID':'837099162939',
'ecb':'onNotificationGCM'
});
} else { // iOS
pushNotification.register(tokenHandler, errorHandler, {
'badge':'false',
'sound':'false',
'alert':'true',
'ecb':'onNotificationAPN'
});
}
}
// Android
function successHandler(result) {
console.log('Success: '+ result);
}
// iOS
function tokenHandler (result) {
console.log('device token: '+ result);
// Your iOS push server needs to know the token before it can push to this device
channel = result.substr(result.length - 7).toLowerCase();
var c = document.querySelector('.channel');
c.innerHTML = 'Your Device ID: <strong>' + channel + '</strong>';
c.classList.remove('blink');
pubnub.publish({
channel: channel,
message: {
regid: result
},
callback: function(m) {console.log(m);}
});
pubnub.subscribe({
channel: channel,
callback: function(m) {
console.log(m);
t.classList.remove('gears');
if(m.setting) {
t.textContent = m.setting + '°';
}
}
});
}
function errorHandler(error) {
console.log('Error: '+ error);
}
function onNotificationGCM(e) {
switch( e.event ){
case 'registered':
if ( e.regid.length > 0 ){
console.log('regid = '+e.regid);
deviceRegistered(e.regid);
}
break;
case 'message':
console.log(e);
if (e.foreground){
alert('The room temperature is set too high')
}
break;
case 'error':
console.log('Error: '+e.msg);
break;
default:
console.log('An unknown event was received');
break;
}
}
function onNotificationAPN(e) {
// Event callback that gets called when your device receives a notification
console.log('onNotificationAPN called!');
console.log(e);
if (e.badge) {
pushNotification.setApplicationIconBadgeNumber(successHandler, e.badge);
}
if (e.sound) {
var sound = new Media(e.sound);
sound.play();
}
if (e.alert) {
navigator.notification.alert(e.alert);
}
}
// Publish the channel name and regid to PubNub
function deviceRegistered(regid) {
channel = regid.substr(regid.length - 8).toLowerCase();
var c = document.querySelector('.channel');
c.innerHTML = 'Your Device ID: <strong>' + channel + '</strong>';
c.classList.remove('blink');
pubnub.publish({
channel: channel,
message: {
regid: regid
}
});
pubnub.subscribe({
channel: channel,
callback: function(m) {
console.log(m);
t.classList.remove('gears');
if(m.setting) {
t.textContent = m.setting + '°';
}
}
});
}
initialize();
var pubnub = PUBNUB.init({
subscribe_key: 'your-sub-key',
publish_key: 'your-pub-key',
});
function changeTemperature(e) {
var temp = input.value;
pubnub.publish({
channel: 'apns-test',
message: {
temperature: temp
}
});
if(temp >= 80) {
sendPush();
}
}
function sendPush() {
pubnub.mobile_gw_provision ({
device_id: '24c99cd5c39b283c58b554509c999999937aadb7b4bxxx0043cb363af6....', // Reg ID you got on your device
channel : 'apns-test',
op: 'add',
gw_type: 'apns',
error : function(msg){console.log(msg);},
callback : successCallback
});
}
function successCallback() {
var message = PNmessage();
message.pubnub = pubnub;
message.callback = function(msg){ console.log(msg); };
message.error = function (msg){ console.log(msg); };
message.channel = channel;
message.apns = {
alert: 'The room temperature is set too high'
};
message.publish();
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment