class KakaoPush::Client

Constants

API_HOST

Attributes

connection[RW]
rest_api_key[RW]

Public Class Methods

new(rest_api_key: ENV['KAKAO_PUSH_CLIENT_ID']) click to toggle source
# File lib/kakao_push/client.rb, line 7
def initialize(rest_api_key: ENV['KAKAO_PUSH_CLIENT_ID'])
  self.rest_api_key = rest_api_key
  self.connection = build_connection
end

Public Instance Methods

build_connection(&block) click to toggle source
# File lib/kakao_push/client.rb, line 67
def build_connection(&block)
  Faraday.new(faraday_client_options) do |builder|
    builder.request :retry,
                    max: 2,
                    interval: 0.05,
                    interval_randomness: 0.5,
                    backoff_factor: 2,
                    methods: [:delete, :get, :head, :options, :put, :post],
                    exceptions: [
                      ::Errno::ETIMEDOUT,
                      'Timeout::Error',
                      ::Faraday::Error::TimeoutError,
                      'Net::OpenTimeout',
                      'Net::ReadTimeout',
                      ::Faraday::TimeoutError
                    ]
    builder.request :url_encoded
    if block.nil?
      builder.adapter Faraday.default_adapter
    else
      block.call(builder)
    end
  end
end
deregister(uuid:, push_type:, device_id:) click to toggle source
# File lib/kakao_push/client.rb, line 28
def deregister(uuid:, push_type:, device_id:)
  body = {
    'uuid' => uuid,
    'device_id' => device_id,
    'push_type' => push_type
  }

  KakaoPush::Response.new(
    connection.post do |req|
      req.url url_for('/deregister')
      req.body = body
    end
  )
end
register(uuid:, push_type:, device_id:, push_token:) click to toggle source
# File lib/kakao_push/client.rb, line 12
def register(uuid:, push_type:, device_id:, push_token:)
  body = {
    'uuid' => uuid,
    'device_id' => device_id,
    'push_type' => push_type,
    'push_token' => push_token
  }

  KakaoPush::Response.new(
    connection.post do |req|
      req.url url_for('/register')
      req.body = body
    end
  )
end
send(uuids: [], apns:, gcm:, bypass: false) click to toggle source
# File lib/kakao_push/client.rb, line 52
def send(uuids: [], apns:, gcm:, bypass: false)
  body = {
    'uuids' => uuids.to_json,
    'push_message' => build_message(apns: apns, gcm: gcm).to_json,
    'bypass' => bypass
  }

  KakaoPush::Response.new(
    connection.post do |req|
      req.url url_for('/send')
      req.body = body
    end
  )
end
tokens(uuid:) click to toggle source
# File lib/kakao_push/client.rb, line 43
def tokens(uuid:)
  KakaoPush::Response.new(
    connection.get do |req|
      req.url url_for('/tokens')
      req.params['uuid'] = uuid
    end
  )
end

Private Instance Methods

build_message(apns:, gcm:) click to toggle source
# File lib/kakao_push/client.rb, line 113
def build_message(apns:, gcm:)
  {
    "for_apns" => apns.to_hash,
    "for_gcm" => gcm.to_hash
  }
end
faraday_client_options() click to toggle source
# File lib/kakao_push/client.rb, line 96
def faraday_client_options
  {
    headers: {
      "Authorization" => "KakaoAK #{rest_api_key}"
    },
    url: API_HOST,
    request: {
      timeout: 5, 
      open_timeout: 5
    }
  }
end
url_for(path) click to toggle source
# File lib/kakao_push/client.rb, line 109
def url_for(path)
  "/v1/push#{path}"
end