Apple Push Notification Library
Ruby
Switch branches/tags
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Permalink
Failed to load latest commit information.
lib
.gitignore
MIT-LICENSE
README.rdoc
Rakefile
VERSION
kw_apn.gemspec

README.rdoc

About

Push Notification Library with support for the extended format. This Library is designed to send thousands of APNs at once without dropping a lot of messages on errors. Since version 0.4 it supports the use of multiple App IDs with one process.

Getting Started

For Rails start the generator: kw_apn This will copy the configuration example into your project.

If you not working with Rails you need to specify either Rails.root and Rails.env or RACK_ROOT and RACK_ENV for the gem to work.

Manual: create the File <project_root>/config/kw_apn.yml

structure of the config file should look like this:

environment: 
  cert_file: path to ssl certificate file
  push_host: 'gateway.sandbox.push.apple.com' or 'gateway.push.apple.com' for live
  push_port: 2195
  feedback_host: 'feedback.sandbox.push.apple.com' or 'feedback.push.apple.com' for live
  feedback_port: 2196

Creating cert file

Export the key and the certificate as P12 files and run:

openssl pkcs12 -in apn-cert.p12 -out apn-cert.pem -nodes -clcerts
openssl pkcs12 -in apn-key.p12 -out apn-key.pem -nodes -clcerts

Example

users = MyAPNUsers.all
n = []
payload = {:aps => {:alert => "Something very important for everyone to read", :sound => 'annoying_beep'}}

users.each do |u|
  n << KwAPN::Notification.create(u.token, payload, 0)
end

status, ret = KwAPN::Sender.push(n, 'TestSession')

if status == :ok
  ret.each do |token|
    MyAPNUsers.delete_all('token'=>token)
  end
end

Multiple App IDs

Since version 0.4 it is possible to use kw_apn with multiple App IDs.

Configuration Example:

production:
  'com.mycompany.app1':
    cert_file: config/apn_certs/app1.pem
    cert_key: config/apn_certs/app1.pem
  'com.mycompany.app2':
    cert_file: config/apn_certs/app2.pem
    cert_key: config/apn_certs/app2.pem

Usage Example

... same as above...

status, ret = KwAPN::Sender.push(n, 'TestSession', 'com.mycompany.app1')

Copyright

Distributed under the MIT License. Based in part on Apns4r by Leonid Ponomarev (rdoc.info/projects/thegeekbird/Apns4r)