Sha256: 44c57e6cf01dd5a0e33657debd975b9760b40979e4c9398f8a2f43ae8a2939a4

Contents?: true

Size: 1.22 KB

Versions: 1

Compression:

Stored size: 1.22 KB

Contents

require 'json'

module ApnsSimple
  class Notification

    PAYLOAD_MAX_BYTESIZE = 2048

    attr_reader :payload
    attr_accessor :error, :error_message, :error_code

    def initialize(options, custom_payload = {})
      token = options.fetch(:token)
      alert = options[:alert]
      badge = options[:badge]
      sound = options[:sound] || 'default'
      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

      packed_token = [token.gsub(/[<\s>]/,'')].pack('H*')
      packed_message = payload_hash.to_json.gsub(/\\u([\da-fA-F]{4})/) {|m| [$1].pack("H*").unpack("n*").pack("U*")}
      payload_size = packed_message.bytesize

      if payload_size > PAYLOAD_MAX_BYTESIZE
        self.error = true
        self.error_message = "Payload size is #{payload_size} bytes but maximum #{PAYLOAD_MAX_BYTESIZE} bytes allowed."
      end

      self.payload = [0, 0, 32, packed_token, 0, payload_size, packed_message].pack("ccca*cca*")
    end

  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
apns_simple-2.0.0 lib/apns_simple/notification.rb