class MessagebusApnApi::Messagebus
Constants
- PLATFORM_ANDROID
- PLATFORM_IOS
Attributes
send_common_info[W]
Public Class Methods
new(api_key)
click to toggle source
# File lib/messagebus_ruby_apn_api/messagebus.rb, line 28 def initialize(api_key) @api_key = api_key init_http_connection(domain) @msg_buffer_size = 20 @msg_buffer = [] @msg_buffer_flushed = false @register_buffer_size = 20 @register_buffer = [] @register_buffer_flushed = false @send_common_info = {} @results = base_response_params @rest_endpoints = define_rest_endpoints @rest_http_errors = define_rest_http_errors end
Public Instance Methods
add_apn_register(params, app_key, flush_buffer = false)
click to toggle source
# File lib/messagebus_ruby_apn_api/messagebus.rb, line 107 def add_apn_register(params, app_key, flush_buffer = false) @register_buffer << base_apn_register_params.merge!(params) @register_buffer_flushed = false if flush_buffer || @register_buffer.size >= @register_buffer_size apn_register_flush(app_key) end return end
add_apn_send(params, app_key, flush_buffer = false)
click to toggle source
# File lib/messagebus_ruby_apn_api/messagebus.rb, line 78 def add_apn_send(params, app_key, flush_buffer = false) @msg_buffer << base_apn_send_params.merge!(params) @msg_buffer_flushed = false if flush_buffer || @msg_buffer.size >= @msg_buffer_size apn_send_flush(app_key) end return end
api_version()
click to toggle source
# File lib/messagebus_ruby_apn_api/messagebus.rb, line 74 def api_version make_api_get_call(@rest_endpoints[:version]) end
apn_register_flush(app_key)
click to toggle source
# File lib/messagebus_ruby_apn_api/messagebus.rb, line 117 def apn_register_flush(app_key) if (@register_buffer.size==0) @results=@empty_send_results return end endpoint = @rest_endpoints[:apn_register].gsub("%KEY%", app_key) json = json_apn_register_from_list(@register_buffer) if (@last_init_time < Time.now.utc - 60) init_http_connection(domain) end @results=make_api_post_call(endpoint, json) @register_buffer.clear @register_buffer_flushed = true return end
apn_send_flush(app_key)
click to toggle source
# File lib/messagebus_ruby_apn_api/messagebus.rb, line 88 def apn_send_flush(app_key) if (@msg_buffer.size==0) @results=@empty_send_results return end endpoint = @rest_endpoints[:apn_send].gsub("%KEY%", app_key) json = json_apn_send_from_list(@msg_buffer) if (@last_init_time < Time.now.utc - 60) init_http_connection(domain) end @results=make_api_post_call(endpoint, json) @msg_buffer.clear @msg_buffer_flushed = true return end
cacert_info(cert_file)
click to toggle source
# File lib/messagebus_ruby_apn_api/messagebus.rb, line 141 def cacert_info(cert_file) @http.verify_mode = OpenSSL::SSL::VERIFY_PEER if !File.exists?(cert_file) raise MessagebusApi::MissingFileError.new("Unable to read file #{cert_file}") end @http.ca_file = File.join(cert_file) end
get_apn_apps()
click to toggle source
# File lib/messagebus_ruby_apn_api/messagebus.rb, line 135 def get_apn_apps path = @rest_endpoints[:apn_apps] @results = make_api_get_call(path) @results end
register_buffer_size()
click to toggle source
# File lib/messagebus_ruby_apn_api/messagebus.rb, line 66 def register_buffer_size @register_buffer_size end
register_buffer_size=(size)
click to toggle source
# File lib/messagebus_ruby_apn_api/messagebus.rb, line 62 def register_buffer_size=(size) @register_buffer_size = size if (size >= 1 && size <= 100) end
register_flushed?()
click to toggle source
# File lib/messagebus_ruby_apn_api/messagebus.rb, line 70 def register_flushed? @register_buffer_flushed end
results()
click to toggle source
# File lib/messagebus_ruby_apn_api/messagebus.rb, line 46 def results @results end
send_buffer_size()
click to toggle source
# File lib/messagebus_ruby_apn_api/messagebus.rb, line 54 def send_buffer_size @msg_buffer_size end
send_buffer_size=(size)
click to toggle source
# File lib/messagebus_ruby_apn_api/messagebus.rb, line 50 def send_buffer_size=(size) @msg_buffer_size = size if (size >= 1 && size <= 100) end
send_flushed?()
click to toggle source
# File lib/messagebus_ruby_apn_api/messagebus.rb, line 58 def send_flushed? @msg_buffer_flushed end
Private Instance Methods
base_apn_register_params()
click to toggle source
# File lib/messagebus_ruby_apn_api/messagebus.rb, line 260 def base_apn_register_params { :userName => '', :deviceToken => '', :platform => '' } end
base_apn_send_params()
click to toggle source
# File lib/messagebus_ruby_apn_api/messagebus.rb, line 268 def base_apn_send_params { :userName => '', :alert => '', :platform => '', :customFields => {} } end
base_response_params()
click to toggle source
# File lib/messagebus_ruby_apn_api/messagebus.rb, line 277 def base_response_params {:statusCode => 0, :statusMessage => "", :statusTime => "1970-01-01T00:00:00.000Z"} end
check_response(response, symbolize_names=true)
click to toggle source
# File lib/messagebus_ruby_apn_api/messagebus.rb, line 195 def check_response(response, symbolize_names=true) case response when Net::HTTPSuccess begin return JSON.parse(response.body, :symbolize_names => symbolize_names) rescue JSON::ParserError => e raise MessagebusApi::RemoteServerError.new("JSON parsing error. Response started with #{response.body.slice(0..9)}") end when Net::HTTPClientError, Net::HTTPServerError if (response.body && response.body.size > 0) result = begin JSON.parse(response.body, :symbolize_names => symbolize_names) rescue JSON::ParserError nil end raise MessagebusApi::RemoteServerError.new("#{response.code.to_s}:#{rest_http_error_message(response.code.to_s)}") else raise MessagebusApi::RemoteServerError.new("#{response.code.to_s}:#{rest_http_error_message(response.code.to_s)}") end else raise "Unexpected HTTP Response: #{response.class.name}" end raise "Could not determine response" end
common_http_headers()
click to toggle source
# File lib/messagebus_ruby_apn_api/messagebus.rb, line 167 def common_http_headers {'User-Agent' => MessagebusApi::Info.get_user_agent, 'X-MessageBus-Key' => @api_key} end
define_rest_endpoints()
click to toggle source
# File lib/messagebus_ruby_apn_api/messagebus.rb, line 230 def define_rest_endpoints { :apn_register => "/api/v3/app/%KEY%/register", :apn_send => "/api/v3/app/%KEY%/send", :apn_apps => "/api/v3/apps", :version => "/api/version" } end
define_rest_http_errors()
click to toggle source
# File lib/messagebus_ruby_apn_api/messagebus.rb, line 239 def define_rest_http_errors { "400" => "Invalid Request", "401" => "Unauthorized-Missing API Key", "403" => "Unauthorized-Invalid API Key", "404" => "Incorrect URL", "405" => "Method not allowed", "406" => "Format not acceptable", "408" => "Request Timeout", "409" => "Conflict", "410" => "Object missing or deleted", "413" => "Too many messages in request", "415" => "POST JSON data invalid", "422" => "Unprocessable Entity", "500" => "Internal Server Error", "501" => "Not Implemented", "503" => "Service Unavailable", "507" => "Insufficient Storage" } end
domain()
click to toggle source
# File lib/messagebus_ruby_apn_api/messagebus.rb, line 163 def domain DEFAULT_API_APN_ENDPOINT_STRING end
init_http_connection(target_server)
click to toggle source
# File lib/messagebus_ruby_apn_api/messagebus.rb, line 151 def init_http_connection(target_server) if (@http and @http.started?) @http.finish end @last_init_time = Time.now.utc endpoint_url = URI.parse(target_server) @http = Net::HTTP.new(endpoint_url.host, endpoint_url.port) @http.use_ssl = true @http.verify_mode = OpenSSL::SSL::VERIFY_NONE @http end
json_apn_register_from_list(users)
click to toggle source
# File lib/messagebus_ruby_apn_api/messagebus.rb, line 179 def json_apn_register_from_list(users) {:users => users}.to_json end
json_apn_send_from_list(messages)
click to toggle source
# File lib/messagebus_ruby_apn_api/messagebus.rb, line 175 def json_apn_send_from_list(messages) {:messages => messages}.to_json end
make_api_get_call(path)
click to toggle source
# File lib/messagebus_ruby_apn_api/messagebus.rb, line 189 def make_api_get_call(path) headers = common_http_headers response = @http.request_get(path, headers) check_response(response) end
make_api_post_call(path, data)
click to toggle source
# File lib/messagebus_ruby_apn_api/messagebus.rb, line 183 def make_api_post_call(path, data) headers = common_http_headers.merge(rest_post_headers) response = @http.request_post(path, data, headers) check_response(response) end
rest_http_error?(status_code)
click to toggle source
# File lib/messagebus_ruby_apn_api/messagebus.rb, line 220 def rest_http_error?(status_code) @rest_http_errors.key?(status_code) end
rest_http_error_message(status_code)
click to toggle source
# File lib/messagebus_ruby_apn_api/messagebus.rb, line 224 def rest_http_error_message(status_code) message = "Unknown Error Code" message = @rest_http_errors[status_code] if rest_http_error?(status_code) message end
rest_post_headers()
click to toggle source
# File lib/messagebus_ruby_apn_api/messagebus.rb, line 171 def rest_post_headers {"Content-Type" => "application/json; charset=utf-8"} end