class ApnsSimple::Notification
Constants
- PAYLOAD_MAX_BYTESIZE
Attributes
error[RW]
error_code[RW]
error_message[RW]
payload[R]
Public Class Methods
new(options, custom_payload = {})
click to toggle source
# File lib/apns_simple/notification.rb, line 11 def initialize(options, custom_payload = {}) token = options.fetch(:token) alert = options[:alert] badge = options[:badge] sound = options[:sound] content_available = options[:content_available] payload_hash = { aps: {} } payload_hash[:aps][:alert] = alert if alert payload_hash[:aps][:badge] = badge if badge payload_hash[:aps][:sound] = sound if sound payload_hash[:aps]['content-available'] = 1 if content_available payload_hash.merge! custom_payload token_item = pack_token_item(token) payload_item = pack_payload_item(payload_hash) frame = compose_frame(token_item, payload_item) @payload = pack_frame(frame) end
Private Instance Methods
compose_frame(*args)
click to toggle source
# File lib/apns_simple/notification.rb, line 37 def compose_frame(*args) args.compact.join end
pack_frame(frame)
click to toggle source
# File lib/apns_simple/notification.rb, line 33 def pack_frame(frame) [2, frame.bytesize, frame].pack('cNa*') end
pack_payload_item(hash)
click to toggle source
# File lib/apns_simple/notification.rb, line 45 def pack_payload_item(hash) json = hash.to_json.gsub(/\\u([\da-fA-F]{4})/) { |m| [$1].pack('H*').unpack('n*').pack('U*') } size = json.bytesize if size > PAYLOAD_MAX_BYTESIZE self.error = true self.error_message = "Payload size is #{size} bytes but maximum #{PAYLOAD_MAX_BYTESIZE} bytes allowed." end [2, size, json].pack('cna*') end
pack_token_item(token)
click to toggle source
# File lib/apns_simple/notification.rb, line 41 def pack_token_item(token) [1, 32, token.gsub(/[<\s>]/, '')].pack('cnH64') end