module Gcm::Connection

Public Class Methods

open() click to toggle source
# File lib/gcm_on_rails/libs/connection.rb, line 38
def open
  configatron.gcm_on_rails.api_key
end
send_notification(notification, api_key, format) click to toggle source
# File lib/gcm_on_rails/libs/connection.rb, line 7
def send_notification(notification, api_key, format)
  if format == 'json'
    headers = {"Content-Type" => "application/json",
               "Authorization" => "key=#{api_key}"}

    data = notification.data.merge({:collapse_key => notification.collapse_key}) unless notification.collapse_key.nil?
    data = data.merge({:delay_while_idle => notification.delay_while_idle}) unless notification.delay_while_idle.nil?
    data = data.merge({:time_to_live => notification.time_to_live}) unless notification.time_to_live.nil?
    data = data.to_json
  else   #plain text format
    headers = {"Content-Type" => "application/x-www-form-urlencoded;charset=UTF-8",
               "Authorization" => "key=#{api_key}"}

    post_data = notification.data[:data].map{|k, v| "&data.#{k}=#{URI.escape(v)}".reduce{|k, v| k + v}}[0]
    extra_data = "registration_id=#{notification.data[:registration_ids][0]}"
    extra_data = "#{extra_data}&collapse_key=#{notification.collapse_key}" unless notification.collapse_key.nil?
    extra_data = "#{extra_data}&delay_while_idle=1" if notification.delay_while_idle
    data = "#{extra_data}#{post_data}"
  end

  url_string = configatron.gcm_on_rails.api_url
  url = URI.parse url_string
  http = Net::HTTP.new(url.host, url.port)
  http.use_ssl = true
  http.verify_mode = OpenSSL::SSL::VERIFY_NONE

  resp, dat = http.post(url.path, data, headers)

  return {:code => resp.code.to_i, :message => dat }
end