diff options
Diffstat (limited to 'examples')
| -rw-r--r-- | examples/index.js | 28 | ||||
| -rw-r--r-- | examples/lib/okpush/apn.js | 77 | ||||
| -rw-r--r-- | examples/lib/okpush/index.js | 34 | ||||
| -rw-r--r-- | examples/lib/okpush/package.json | 4 |
4 files changed, 74 insertions, 69 deletions
diff --git a/examples/index.js b/examples/index.js index 10bcbd7..15de909 100644 --- a/examples/index.js +++ b/examples/index.js @@ -90,26 +90,24 @@ var app = okcms.createApp({ lib: require("./lib/okpush"), mongodbUrl: "mongodb://localhost/okpush_example", apn: { + cert: path.join(__dirname, "./lib/okpush/test_certs/overlayer_dev_cert.pem"), + key: path.join(__dirname, "./lib/okpush/test_certs/overlayer_dev_key.pem"), connection: { gateway: "gateway.sandbox.push.apple.com", - cert: "/path/to/cert.pem", - key: "/path/to/key.pem" - }, - feedback: { - address: "feedback.sandbox.push.apple.com", - cert: "/path/to/cert.pem", - key: "/path/to/key.pem", - interval: 43200, - batchFeedback: true } }, + bundleId: "us.okfoc.overlayer", notifications: { - note.expiry = Math.floor(Date.now() / 1000) + 3600; // Expires 1 hour from now. - note.badge = 3; - note.sound = "ping.aiff"; - note.alert = "\uD83D\uDCE7 \u2709 You have a new message"; - note.payload = {'messageFrom': 'John Appleseed'}; - note.topic = "<your-app-bundle-id>"; + // expiry (in seconds) + // badge (int) + // alert (message) + // payload (raw json) + hub: { + alert: "The hub has been updated.", + }, + store: { + alert: "The store is now open.", + }, } }, }, diff --git a/examples/lib/okpush/apn.js b/examples/lib/okpush/apn.js index 050a466..5e13e15 100644 --- a/examples/lib/okpush/apn.js +++ b/examples/lib/okpush/apn.js @@ -1,54 +1,49 @@ -var config = require('./Config') var apn = require('apn') var db = require('./db') -var apnConnection, apnFeedback +var apnProvider, apnFeedback function init (config) { - apnConnection = new apn.Connection(config.apn.connection) - apnConnection.on('transmissionError', onTransmissionError) - - apnFeedback = new apn.Feedback(config.apn.feedback) - apnFeedback.on('feedback', onFeedback) - - return apnConnection -} - -function onTransmissionError (errorCode, notification, recipient) { - console.error('Error while pushing to APN: ' + errorCode) - - if (errorCode === 8 && recipient.token) { - var token = recipient.token.toString('hex').toUpperCase() - - console.log('Invalid token: removing device ' + token) - db.remove(token) - } + config.apn.connection.key = config.apn.key + config.apn.connection.cert = config.apn.cert + apnProvider = new apn.Provider(config.apn.connection) } -function onFeedback (deviceInfos) { - console.log('Feedback service, number of devices to remove: ' + deviceInfos.length) - - if (deviceInfos.length > 0) { - db.removeDevices(deviceInfos.map(function (deviceInfo) { - return deviceInfo.device.token.toString('hex') +function push (tokens, note) { + tokens.forEach(function(token){ + connection.send(note, token).then( function (response) { + response.sent.forEach( function (token) { + // notificationSent(user, token) + }) + response.failed.forEach( function (failure) { + if (failure.error) { + // A transport-level error occurred (e.g. network problem) + // notificationError(user, token, failure.error); + } else { + // `failure.status` is the HTTP status code + // `failure.response` is the JSON payload + // notificationFailed(token, failure.status, failure.response); + db.removeDevice(token) + } + }) }) - } -} - -function push (tokens, payload) { - apnConnection.pushNotification(payload, tokens) + }) } -function buildPayload (options) { - var notif = new apn.Notification() - - notif.expiry = options.expiry || 0 - notif.alert = options.alert - notif.badge = options.badge - notif.payload = options.payload - notif.sound = options.sound - - return notif +function buildPayload (options, bundleId) { + var note = new apn.Notification() + note.topic = bundleId + if (options.expiry) + note.expiry = Math.floor(Date.now() / 1000) + options.expiry + if (options.alert) + note.alert = options.alert + if (options.badge) + note.badge = options.badge + if (options.payload) + note.payload = options.payload + if (options.sound) + note.sound = options.sound + return note } module.exports = { diff --git a/examples/lib/okpush/index.js b/examples/lib/okpush/index.js index e8b6549..a39cd35 100644 --- a/examples/lib/okpush/index.js +++ b/examples/lib/okpush/index.js @@ -1,8 +1,10 @@ /** */ -var OKTemplate = require('../../../app/node_modules/oktemplate') +var path = require('path') var passport = require('passport') +var DigestStrategy = require('passport-http').DigestStrategy; +var OKTemplate = require('../../../app/node_modules/oktemplate') var apn = require('./apn') var db = require('./db') @@ -23,7 +25,9 @@ function OKPush (options) { if (!options.config) throw new Error('Configuration not provided to OKPush') if (!options.config.notifications) - throw new Error('Notifications not defined in OKPush') + throw new Error('Notifications not provided to OKPush') + if (!options.config.bundleId) + throw new Error('bundleId not provided to OKPush') var express = options.express var router = express.Router() @@ -31,7 +35,7 @@ function OKPush (options) { var meta = options.meta var error = options.errorHandler // var okcms_db = options.db - + var templateProvider = this._templateProvider = new OKTemplate({ root: path.join(__dirname, './templates'), debug: meta.debug @@ -39,14 +43,20 @@ function OKPush (options) { var templates = {} templates['index'] = templateProvider.getTemplate('index') - - apn.init() - db.init() - router.use('/admin/', passport.initialize()) - router.all('/admin/(:path*)?', passport.authenticate('digest', { - session: false - })) + apn.init(config) + db.init(config) + +// router.use('/admin/', passport.initialize()) +// router.all('/admin/(:path*)?', passport.authenticate('digest', { +// session: false +// })) + + var notifications = {} + Object.keys(options.config.notifications).forEach(function(key){ + var opt = options.config.notifications[key] + var note = apn.buildPayload(opt, options.config.bundleId) + }) // pass in admin middleware! router.get('/admin/', function (req, res) { @@ -71,8 +81,8 @@ function OKPush (options) { this._router = router } -OKExample.prototype.middleware = function () { +OKPush.prototype.middleware = function () { return this._router } -module.exports = OKExample +module.exports = OKPush diff --git a/examples/lib/okpush/package.json b/examples/lib/okpush/package.json index 4c2f4a1..b5a52c7 100644 --- a/examples/lib/okpush/package.json +++ b/examples/lib/okpush/package.json @@ -11,6 +11,8 @@ "dependencies": { "apn": "^2.1.1", "lodash": "^4.16.3", - "mongoose": "^4.6.2" + "mongoose": "^4.6.2", + "passport": "^0.3.2", + "passport-http": "^0.3.0" } } |
