class Lowdown::Notification
A Notification
holds the data and metadata about a Remote Notification
.
@see developer.apple.com/library/ios/documentation/NetworkingInternet/Conceptual/RemoteNotificationsPG/Chapters/APNsProviderAPI.html#//apple_ref/doc/uid/TP40008194-CH101-SW15 @see developer.apple.com/library/ios/documentation/NetworkingInternet/Conceptual/RemoteNotificationsPG/Chapters/TheNotificationPayload.html
Constants
- APS_KEYS
@!visibility private
Attributes
@return [Time, nil]
the time until which to retry delivery of a notification. By default it is only tried once.
@return [Object, nil]
a object that uniquely identifies this notification and is coercable to a String.
@return [Hash]
the data payload for this notification.
@return [Integer, nil]
the priority at which to deliver this notification, which may be `10` or `5` if power consumption should be taken into consideration. Defaults to `10.
@return [String]
a device token.
@return [String, nil]
the ‘topic’ for this notification.
Public Class Methods
# File lib/lowdown/notification.rb, line 22 def self.format_id(id) padded = id.to_s.rjust(32, "0") [padded[0, 8], padded[8, 4], padded[12, 4], padded[16, 4], padded[20, 12]].join("-") end
# File lib/lowdown/notification.rb, line 16 def self.generate_id @id_mutex.synchronize do @id_counter += 1 end end
@param [Hash] params
a dictionary of keys described in the Instance Attribute Summary.
# File lib/lowdown/notification.rb, line 61 def initialize(params) params.each { |key, value| send("#{key}=", value) } end
Public Instance Methods
Formats the {#id} in the format required by the APN service, which is in groups of 8-4-4-12. It is padded with leading zeroes.
@return [String]
the formatted ID.
# File lib/lowdown/notification.rb, line 82 def formatted_id @formatted_id ||= self.class.format_id(id) end
Unless the payload contains an `aps` entry, the payload is assumed to be a mix of APN defined attributes and custom attributes and re-organized according to the specifications.
@return [Hash]
the payload organized according to the APN specification.
# File lib/lowdown/notification.rb, line 94 def formatted_payload if @payload.key?("aps") @payload else payload = {} payload["aps"] = aps = {} @payload.each do |key, value| next if value.nil? key = key.to_s if APS_KEYS.include?(key) aps[key] = value else payload[key] = value end end payload end end
@return [Boolean]
whether this notification holds enough data and metadata to be sent to the APN service.
# File lib/lowdown/notification.rb, line 68 def valid? !!(@token && @payload) end