Rack::PushNotification
======================
**A Rack-mountable webservice for managing push notifications**
`Rack::PushNotification` generates API endpoints that can be consumed by iOS apps to register and unregister for push notifications.
## Example Record
token | "ce8be627 2e43e855 16033e24 b4c28922 0eeda487 9c477160 b2545e95 b68b5969" |
alias | mattt@heroku.com |
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 is used to keep 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, to ensure maximum impact (and minimum annoyance). `ip_address` as well as `lat` and `lng` allows you to specifically target users according to their geographic location.
**It is strongly recommended that you use `Rack::PushNotification` in conjunction with some sort of Rack authentication middleware, so that the administration endpoints are not accessible without some form of credentials.**
## Example Usage
Rack::PushNotification can be run as Rack middleware or as a single web application. All that is required is a connection to a Postgres database. You must define this with the environment variable `DATABASE_URL`. For rails, use the [`rails-database-url`](https://github.com/glenngillen/rails-database-url) gem to define this from the `database.yml`.
### config.ru
```ruby
require 'bundler'
Bundler.require
run Rack::PushNotification
```
An example application can be found in the `/example` directory of this repository.
## iOS Client Library
To get the full benefit of `Rack::PushNotification`, use the [Orbiter](https://github.com/mattt/Orbiter) library to register for Push Notifications on iOS.
```objective-c
#import "Orbiter.h"
- (void)application:(UIApplication *)application
didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken
{
NSURL *serverURL = [NSURL URLWithString:@"http://raging-notification-3556.herokuapp.com/"]
Orbiter *orbiter = [[Orbiter alloc] initWithBaseURL:serverURL credential:nil];
[orbiter registerDeviceToken:deviceToken withAlias:nil success:^(id responseObject) {
NSLog(@"Registration Success: %@", responseObject);
} failure:^(NSError *error) {
NSLog(@"Registration Error: %@", error);
}];
}
```
## Deployment
`Rack::PushNotification` can be deployed to Heroku with the following commands:
```
$ heroku create
$ git push heroku master
```
## Contact
Mattt Thompson
- http://github.com/mattt
- http://twitter.com/mattt
- m@mattt.me
## License
Rack::PushNotification is available under the MIT license. See the LICENSE file for more info.