Project

resque-aps

0.0
No commit activity in last 3 years
No release in over 3 years
Queuing system for Apple's Push Service on top of Resque. Adds methods enqueue_aps to queue a notification message. Also includes helper classes and methods to format JSON.
2005
2006
2007
2008
2009
2010
2011
2012
2013
2014
2015
2016
2017
2018
2019
2020
2021
2022
2023
2024
 Dependencies

Development

 Project Readme

resque-aps

Resque-Aps is an extension to Resque that adds shortcuts to send notifications to Apple's Push System.

Installation and integration with callbacks

To install:

gem install resque-aps

You'll need to add this to your Rails rakefile to see the queue lengths:

require 'resque/plugins/aps/tasks'
task "resque:setup" => :environment

$ rake resque:aps:queue_lengths 

I use this to monitor the system in nagios.

To extend the system create an initializer:

require 'resque_aps'

Resque.aps_gateway_host = AppConfig.apn_gateway_host
Resque.aps_gateway_port = AppConfig.apn_gateway_port
Resque.aps_feedback_host = AppConfig.apn_feedback_host
Resque.aps_feedback_port = AppConfig.apn_feedback_port

module Resque::Plugins::Aps
  class Application
    def after_aps_write(notification)
      logger.info("Sent Notification [#{notification.application_name}] [#{notification.device_token}] [#{notification.payload}]") if logger
    end

    # It probably failed because there is something wrong with the device token
    # do not requeue.
    def failed_aps_write(notification, exception)
      logger.error "failed_aps_write: #{notification.inspect} - #{exception}"
      logger.error exception.backtrace.join("\n")
    end

    # Something is probably wrong with the certificate
    def notify_aps_admin(exception)
      # Notify once a minute
      unless Rails.cache.read("push_certificate:notify_admin:#{name}")
        logger.error("notification: #{exception.message}")
        # Email error to someone
        Rails.cache.write("push_certificate:notify_admin:#{name}", "true", :expires_in => 60)
      end
    rescue
      logger.error("#{$!} (#{name}): #{$!.backtrace.join("\n")}")
    end

    def aps_nil_notification_retry?(sent_count, start_time)
      # Live forever
      sleep 1
      true
      # Or not
      #false
    end

    def after_aps_read(feedback)
      # Remove the device token from the system for this application so we don't send to it anymore
      # feedback.application_name, feedback.device_token
    end
  end
end

Plagurism alert

This was intended to be an extension to resque and was based heavily on resque-scheduler, which resulted in a lot of the code looking very similar. One massive departure is the use of logging which resque and resque-scheduler do not use but I do.

Contributing

For bugs or suggestions, please just open an issue in github.