Project

apnmachine

0.03
No commit activity in last 3 years
No release in over 3 years
An APN server & library in which EventMachine daemons maintain a persistent connection to Apple servers and Redis acts as the glue with your Apps. See Readme for more info :)
2005
2006
2007
2008
2009
2010
2011
2012
2013
2014
2015
2016
2017
2018
2019
2020
2021
2022
2023
2024
 Dependencies

Development

~> 1.0.0
~> 1.8.3
~> 3.12

Runtime

>= 0.3.1
>= 0
>= 2.2.0
 Project Readme

Apn Server & Library for Ruby

Description

I want:
- persistent connection to APN Servers (as Apple recommends)
- real-time notifications (no regular polling a la Resque)
- super easy to use in Ruby and any languages (as easy as enqueuing a serialized JSON hash in Redis)
- persist and queue messages when server is down
- horizontal scalability and out-of-the-box load-balancing
- fast daemons

So I built ApnMachine. We’re running it in production at zapkast.com and find it very reliable.

Remaining Tasks

  • Implement feedback service mechanism
  • Write real tests

ApnMachine Daemon

To start ApnMachine, tell it where is your redis server and the complete path to your PEM file.
That’s it.

  
Usage: apnmachined [options] --pem /full/path/to/pem
  --redis-host bind address (defaults to 127.0.0.1)
    address of your redis server

  --redis-port port
    the port of your redis server (defaults to)

  --apn-host host
    APN Server host (defaults to gateway.push.apple.com)
    Use 'sandbox' to connect to gateway.sandbox.push.apple.com

  --apn-port port of the APN Server
    APN server port (defaults to 2195)

  --pem pem file path
    The PEM encoded private key and certificate.
    To export a PEM ecoded file execute
    # openssl pkcs12 -in cert.p12 -out cert.pem -nodes -clcerts

  --pem-passphrase passphrase
    The PEM passphrase to decode key.
    Default to nil

  --help
    usage message

  --daemon or -d
    Runs process as daemon, not available on Windows
  

Sending Notifications from Ruby

To send a notification, you just need a working Redis client that responds to rpush. It doesn’t matter if you’re
in an EventMachine program or a plain vanilla Rails app.

  
  ApnMachine::Config.redis = @any_redis_client
  ApnMachine::Config.logger = Rails.logger
  

Finally:

  
  notification = ApnMachine::Notification.new
  notification.device_token = apns_token
  notification.alert = message
  notification.badge = 1
  notification.sound = 'default'
  notification.push
  

Installation

Apnserver is hosted on rubygems


  $ gem install apnmachine

Adding apnmachine to your Rails application

  
  gem 'apnmachine'
  

License

The MIT License – Copyright © 2012 Julien Nakache
Widely Inspired from groupme/em-apn and bpoweski/apnserver