Rack::PushNotification

A Rack-mountable webservice for managing push notifications

Rack::PushNotification is Rack middleware that generates API endpoints that can be consumed by iOS apps to register and unregister for push notifications.

Example Record

Field Value
token "ce8be627 2e43e855 16033e24 b4c28922 0eeda487 9c477160 b2545e95 b68b5969"
alias [email protected]
badge 0
locale en_US
language en
timezone America/Los_Angeles
ip_address 0.0.0.0
lat 37.7716
lng -122.4137
tags ["iPhone OS 6.0", "v1.0", "iPhone"]
  • Each device has a token, which uniquely identifies the app installation on a particular device.
  • This token can be associated with an alias, which can be a domain-specific piece of identifying information, such as a username or e-mail address.
  • A running badge count keeps track of the badge count to show on the app icon.
  • A device's locale & language can be used to localize outgoing communications to that particular user.
  • Having timezone information gives you the ability to schedule messages for an exact time of day and to ensure maximum impact (and minimum annoyance).
  • An ip_address --- along with lat and lng --- lets you to specifically target users according to their geographic location.

Important Use Rack::PushNotification in conjunction with some kind of authentication, so that the administration endpoints aren't publicly accessible.

Usage

Rack::PushNotification can be run as Rack middleware or as a single web application. All that's required is a connection to a Postgres database. Define this with the environment variable DATABASE_URL.

For rails, use the rails-database-url gem to define this from the database.yml.

An example application can be found in the /example directory of this repository.

config.ru

require 'bundler'
Bundler.require

run Rack::PushNotification

Deployment

Rack::PushNotification can be deployed to Heroku with the following commands:

$ heroku create
$ git push heroku master

Contact

Mattt

License

Rack::PushNotification is available under the MIT license. See the LICENSE file for more info.