Last active
July 2, 2018 19:07
-
-
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"
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<script type="text/javascript" src="js/PushNotification.js"></script> | |
<script type="text/javascript" src="//cdn.pubnub.com/pubnub-3.7.4.min.js"></script> |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
var pushNotification = window.plugins.pushNotification; | |
pushNotification.register( | |
tokenHandler, | |
errorHandler, | |
{ | |
'badge':'false', | |
'sound':'false', | |
'alert':'true', | |
'ecb':'onNotificationAPN' | |
} | |
); |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// 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 | |
} | |
... |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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 :-) | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/* 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(); | |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
var pubnub = PUBNUB.init({ | |
subscribe_key: 'your-sub-key', | |
publish_key: 'your-pub-key', | |
}); |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
function changeTemperature(e) { | |
var temp = input.value; | |
pubnub.publish({ | |
channel: 'apns-test', | |
message: { | |
temperature: temp | |
} | |
}); | |
if(temp >= 80) { | |
sendPush(); | |
} | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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 | |
}); | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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