Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with
or
.
Download ZIP
A Rack-mountable webservice for managing push notifications
branch: master

This branch is 41 commits behind mattt:master

Fetching latest commit…

Cannot retrieve the latest commit at this time

Failed to load latest commit information.
example
lib/rack
Gemfile
Gemfile.lock
LICENSE
README.md
Rakefile
rack-push-notification.gemspec

README.md

Rack::PushNotification

A Rack-mountable webservice for managing push notifications

This is still in early stages of development, so proceed with caution when using this in a production application. Any bug reports, feature requests, or general feedback at this point would be greatly appreciated.

Rack::PushNotification generates API endpoints that can be consumed by iOS apps to register and unregister for push notifications. Along with the registration API, Rack::PushNotification spawns an admin console that gives you a convenient interface to manage device tokens and compose targeted push notification messages.

Screenshots

Devices Screenshot


Compose Screenshot

Example Record

token"ce8be627 2e43e855 16033e24 b4c28922 0eeda487 9c477160 b2545e95 b68b5969"
aliasmattt@heroku.com
badge0
localeen_US
languageen
timezoneAmerica/Los_Angeles
ip_address0.0.0.0
lat37.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.

config.ru

require 'bundler'
Bundler.require

Rack::PushNotification::Admin.use Rack::Auth::Basic do |username, password|
  [username, password] == ['admin', ENV['ADMIN_CONSOLE_PASSWORD'] || ""]
end

use Rack::PushNotification::Admin, certificate: "/path/to/apn_certificate.pem",
                                   environment: :production
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 library to register for Push Notifications on iOS.

#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
$ heroku credentials:add ADMIN_CONSOLE_PASSWORD="YourPa55wordG0esH3r3"
$ git push heroku master

Contact

Mattt Thompson

License

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

Something went wrong with that request. Please try again.