summaryrefslogtreecommitdiff
path: root/lib/okpush/apn.js
diff options
context:
space:
mode:
Diffstat (limited to 'lib/okpush/apn.js')
-rw-r--r--lib/okpush/apn.js62
1 files changed, 62 insertions, 0 deletions
diff --git a/lib/okpush/apn.js b/lib/okpush/apn.js
new file mode 100644
index 0000000..c143001
--- /dev/null
+++ b/lib/okpush/apn.js
@@ -0,0 +1,62 @@
+
+var apn = require('apn')
+var db = require('./db')
+var apnProvider, apnFeedback
+
+function init (data) {
+ var apn_config = data.production ? data.apn_production : data.apn_development
+ config = {}
+ config.key = apn_config.key
+ config.cert = apn_config.cert
+ config.production = data.production
+ apnProvider = new apn.Provider(config)
+}
+
+function push (channel, note) {
+ db.getAllIOSTokens(channel, function(err, tokens){
+ if (err) {
+ console.error("Error fetching devices:", err)
+ return
+ }
+ // console.log(note, tokens)
+ apnProvider.send(note, tokens).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 if (failure.status == 410) {
+ // `failure.status` is the HTTP status code
+ // `failure.response` is the JSON payload
+ // notificationFailed(token, failure.status, failure.response);
+ console.log(failure)
+ // db.removeToken(token)
+ }
+ })
+ })
+ })
+}
+
+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 = {
+ init: init,
+ push: push,
+ buildPayload: buildPayload
+}