This plugin helps you use the Apple Push Notification system.
Install as a gem:
# Add to config/environment.rb:
config.gem "apple_push_notification", :source => "http://gemcutter.org/"
# At command prompt:
$ sudo rake gems:install
or as a plugin:
$ script/plugin install git://github.com/samsoffes/apple_push_notification.git
Once you have installed ApplePushNotification, run the following command:
$ rake apn:migrate
Once you have the certificate from Apple for your application, export your key and the apple certificate as p12 files. Here's how:
- Click the disclosure arrow next to your certificate in Keychain Access and select the certificate and the key.
- Right click and choose
Export 2 items...
. - Choose the p12 format from the drop down and name it
cert.p12
.
Now covert the p12 file to a pem file:
$ openssl pkcs12 -in cert.p12 -out apn_development.pem -nodes -clcerts && rm -f cert.p12
Put apn_development.pem
in config/certs
in your rails app. For production, name your certificate apn_production.pem
and put it in the same directory. See the environment section for more about environments.
By default, the development environment will always be used. This makes it easy to test your app in production before your iPhone application is approved and your production certificate is active. You can easily override this by adding this line in an initializer or environment file.
ApplePushNotification.enviroment = Rails.env.to_sym
You can also simply set ApplePushNotification.enviroment
to :development
or :production
. Setting the ApplePushNotification.enviroment
chooses the appropriate certificate in your certs
folder and Apple push notification server.
You can use ApplePushNotification with an ActiveRecord model, standalone, or on any object.
Just add acts_as_pushable
to your model.
class Device < ActiveRecord::Base
acts_as_pushable
end
You can then send a notification like this
d.send_notification :alert => "I heart Rails"
The send_notification
method accepts a hash of options for the notification parameters. See the Parameters section for more information.
Your model must have a device_token
attribute. If you wish to change this to something else (like device
for example), simply pass it like this acts_as_pushable :device
.
Simply call ApplePushNotification.send_notification
and pass the device token as the first parameter and the hash of notification options as the second (see the Parameters section for more information).
$ script/console
>> token = "XXXXXXXX XXXXXXXX XXXXXXXX XXXXXXXX XXXXXXXX XXXXXXXX XXXXXXXX XXXXXXXX"
>> ApplePushNotification.send_notification token, :alert => "Hello World!", :badge => 5, :sound => true
=> nil
You can extend ApplePushNotification with any class. It will look for the device_token
method when sending the notification. When ApplePushNotification is extended, if device_token=
isn't defined, getters and setters are generated.
$ script/console
>> token = "XXXXXXXX XXXXXXXX XXXXXXXX XXXXXXXX XXXXXXXX XXXXXXXX XXXXXXXX XXXXXXXX"
>> d = Object.new
>> d.extend ApplePushNotification
>> d.device_token = token
>> d.send_notification :alert => "So flexible"
=> nil
See the Parameters section for more information on what send_notification
accepts.
The following notification parameters can be defined in the options hash:
alert
- text displayed to the usesound
- this can be the filename (i.e.explosion.aiff
) ortrue
which will play the default notification soundbadge
- this must be an integer
- The spaces in
device_token
are optional and will be ignored.
Copyright (c) 2009 Sam Soffes. Released under the MIT license. Forked from Fabien Penso.