An http server written in Node.js to send apple push notifications
JavaScript
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Permalink
Failed to load latest commit information.
couch_views
lib update to express 3.0.0rc3 and organize like the template app Aug 22, 2012
public
routes
test start adding integration tests Jan 11, 2013
views save new users to couch Jan 9, 2013
.gitignore store the certs in couchdb Apr 11, 2012
LICENSE added LICENSE May 2, 2011
Procfile
README.md rename index.js to app.js Aug 21, 2012
app.js
package.json update bcrypt dependency Jul 19, 2013

README.md

Purpose:

Provide an http based API that you can send POST requests to and it will send a push notification to apple's notification service.

Prerequisites

Goal Usage:

 node app.js
 curl -d "appId=<your-app-id>&appSecret=<your-app-secret>&deviceToken=760ff5e341de1ca9209bcfbd320625b047b44f5b394c191899dd5885a1f65bf2&notificationText=What%3F&badgeNumber=4&sound=default&payload=5+and+7" http://localhost:3000/

Getting Started:

  • Start couchdb
  • Create a node_apn database in couch
  • Create the pre-requisite data needed to support the server
    • Add the couch_views/users_all.js content as a view called "_design/users" with the name "all"
    • Add the couch_views/applications_secrets.js content as a view called "_design/applications" with the name "secrets"
    • Add a user document and configure that user's applications
    • There is an example document with one user and one application configured shown below
    • Pay attention to the certData and keyData entries in the settings hash, the server currently provides a way for you to upload the certificate and key, but it's ugly. The plan is to possibly use a different front end to manage the things that might be easier to do in a blocking environment.

 git clone git@github.com:adamvduke/node-apn-server.git
 cd node-apn-server
 npm install
 node app.js

Example Document:

 {
  "_id": "0aead832d8a8e5f57e0c10b5ff000565",
  "_rev": "11-92625b691c7e8203250de95fea65ada2",
  "username": "adamvduke",
  "password": "password",
  "type": "user",
  "applications": [
   {
    "app_id": "1",
    "app_secret": "1",
    "settings": {
                 "certData": "Your Cert Data goes here",
                 "keyData": "Your Key Data goes here",
                 "gateway": "gateway.push.apple.com",
                 "port": 2195,
                 "enhanced": true,
                 "cacheLength": 5
                }
   }
  ]
 }

Sending Notifications:

There are three required parameters:

  • appId - Your application's appId
  • appSecret - Your application's appSecret
  • deviceToken - The device token to send the notification to

Optional parameters are:

  • notificationText - The text that will display on the device.
  • badgeNumber - The value of the badge to be set on the application's icon.
  • sound - The sound to be played with the notification
  • payload - Extra data to included in the notification, formatted as a json dictionary
    • Passed in the options dictionary, with the key: info, during -application:didFinishLaunchingWithOptions:

Certificates:

  • Do the dance to get the production push notification certificate from the iOS provisioning portal
  • Download and install the certificate into Keychain Access.app
  • Export the certificate and private key separately as apns-prod-cert.p12 and apns-prod-key.p12 respectively
  • For both exports, you will be asked to specify a password, then asked for your keychain password. Do not specify a password on the first prompt.
  • Run the following commands to convert the certificate and private key to .pem format

openssl pkcs12 -clcerts -nokeys -out apns-prod-cert.pem -in apns-prod-cert.p12
openssl pkcs12 -nocerts -out apns-prod-key.pem -in apns-prod-key.p12

You will be forced to set a PEM passphrase on the second command, so execute the following command to remove it:

openssl rsa -in apns-prod-key.pem -out apns-prod-key-noenc.pem

See this blog entry for more details on setting up the certificates.

Credits: