Class: C2dm::Notification
- Extended by:
- ActionView::Helpers::TextHelper
- Includes:
- ActionView::Helpers::TextHelper
- Defined in:
- lib/c2dm_on_rails/app/models/c2dm/notification.rb
Overview
Represents the message you wish to send. An C2dm::Notification belongs to an C2dm::Device.
Example:
c2dm = C2dm::Notification.new
c2dm.key = "value"
c2dm.device = APN::Device.find(1)
c2dm.save
To deliver call the following method:
C2dm::Notification.send_notifications
As each C2dm::Notification is sent the sent_at
column will be timestamped, so as to not be sent again.
Class Method Summary collapse
-
.send_notifications(notifications = C2dm::Notification.all(:conditions => {:sent_at => nil}, :joins => :device, :readonly => false)) ⇒ Object
Opens a connection to the Google C2dm server and attempts to batch deliver an Array of notifications.
Class Method Details
.send_notifications(notifications = C2dm::Notification.all(:conditions => {:sent_at => nil}, :joins => :device, :readonly => false)) ⇒ Object
Opens a connection to the Google C2dm server and attempts to batch deliver an Array of notifications.
This method expects an Array of C2dm::Notifications. If no parameter is passed in then it will use the following:
C2dm::Notification.all(:conditions => {:sent_at => nil})
As each C2dm::Notification is sent the sent_at
column will be timestamped, so as to not be sent again.
This can be run from the following Rake task:
$ rake c2dm:notifications:deliver
43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 |
# File 'lib/c2dm_on_rails/app/models/c2dm/notification.rb', line 43 def send_notifications(notifications = C2dm::Notification.all(:conditions => {:sent_at => nil}, :joins => :device, :readonly => false)) unless notifications.nil? || notifications.empty? C2dm::Connection.open do |token| notifications.each do |noty| puts "sending notification #{noty.id} to device #{noty.device.registration_id}" response = C2dm::Connection.send_notification(noty, token) puts "response: #{response[:code]}; #{response.inspect}" if response[:code] == 200 case response[:message] when "Error=QuotaExceeded" raise C2dm::Errors::QuotaExceeded.new(response[:message]) when "Error=DeviceQuotaExceeded" ex = C2dm::Errors::DeviceQuotaExceeded.new(response[:message]) logger.warn(ex.) when "Error=InvalidRegistration" ex = C2dm::Errors::InvalidRegistration.new(response[:message]) logger.warn("#{ex.}, destroying c2dm_device with id #{noty.device.id}") noty.device.destroy when "Error=NotRegistered" ex = C2dm::Errors::NotRegistered.new(response[:message]) logger.warn("#{ex.}, destroying c2dm_device with id #{noty.device.id}") noty.device.destroy when "Error=MessageTooBig" ex = C2dm::Errors::MessageTooBig.new(response[:message]) logger.warn(ex.) when "Error=MissingCollapseKey" ex = C2dm::Errors::MissingCollapseKey.new(response[:message]) logger.warn(ex.) else noty.sent_at = Time.now noty.save! end elsif response[:code] == 503 raise C2dm::Errors:ServiceUnavailable.new(response[:message]) elsif response[:code] == 401 raise C2dm::Errors::InvalidAuthToken.new(response[:message]) else end end end end end |