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

expiration[RW]

@return [Time, nil]

the time until which to retry delivery of a notification. By default it is only tried once.
id[RW]

@return [Object, nil]

a object that uniquely identifies this notification and is coercable to a String.
payload[RW]

@return [Hash]

the data payload for this notification.
priority[RW]

@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.
token[RW]

@return [String]

a device token.
topic[RW]

@return [String, nil]

the ‘topic’ for this notification.

Public Class Methods

format_id(id) click to toggle source
# 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
generate_id() click to toggle source
# File lib/lowdown/notification.rb, line 16
def self.generate_id
  @id_mutex.synchronize do
    @id_counter += 1
  end
end
new(params) click to toggle source

@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

formatted_id() click to toggle source

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
formatted_payload() click to toggle source

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.

@see developer.apple.com/library/ios/documentation/NetworkingInternet/Conceptual/RemoteNotificationsPG/Chapters/TheNotificationPayload.html#//apple_ref/doc/uid/TP40008194-CH107-SW1

@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
valid?() click to toggle source

@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