class UmengPush::Client

Attributes

app_master_secret[RW]
appkey[RW]
platform[RW]
production_mode[RW]

Public Class Methods

android() click to toggle source
# File lib/umeng_push/client.rb, line 24
def self.android
  Client.new(
    "android",
    UmengPush.configuration.android_appkey,
    UmengPush.configuration.android_app_master_secret,
    UmengPush.configuration.production_mode
  )
end
iOS() click to toggle source
# File lib/umeng_push/client.rb, line 15
def self.iOS
  Client.new(
    "iOS",
    UmengPush.configuration.ios_appkey,
    UmengPush.configuration.ios_app_master_secret,
    UmengPush.configuration.production_mode
  )
end
new(platform, appkey, app_master_secret, production_mode=false) click to toggle source
# File lib/umeng_push/client.rb, line 8
def initialize(platform, appkey, app_master_secret, production_mode=false)
  @platform = platform
  @appkey = appkey
  @app_master_secret = app_master_secret
  @production_mode = production_mode
end

Public Instance Methods

broadcast(params={}) click to toggle source

广播

# File lib/umeng_push/client.rb, line 59
def broadcast(params={})
  send_message(params.merge({
      type: "broadcast"
    }))
end
cancel_task(task_id) click to toggle source

取消任务

# File lib/umeng_push/client.rb, line 83
def cancel_task(task_id)
  post("/api/cancel", {
      appkey: appkey,
      timestamp: timestamp,
      task_id: task_id
    })
end
check_task(task_id) click to toggle source

查询任务

# File lib/umeng_push/client.rb, line 74
def check_task(task_id)
  post("/api/status", {
      appkey: appkey,
      timestamp: timestamp,
      task_id: task_id
    })
end
groupcast(filter={}, params={}) click to toggle source

组播

# File lib/umeng_push/client.rb, line 66
def groupcast(filter={}, params={})
  send_message(params.merge({
      type: "groupcast",
      filter: filter
    }))
end
listcast(device_tokens=[], params={}) click to toggle source

组播

# File lib/umeng_push/client.rb, line 51
def listcast(device_tokens=[], params={})
  send_message(params.merge({
      type: "listcast",
      device_tokens: device_tokens.join(",")
    }))
end
send_message(params={}) click to toggle source

消息发送

# File lib/umeng_push/client.rb, line 34
def send_message(params={})
  post("/api/send", params.merge({
      appkey: appkey,
      timestamp: timestamp,
      production_mode: production_mode
    }))
end
unicast(device_token, params={}) click to toggle source

单播

# File lib/umeng_push/client.rb, line 43
def unicast(device_token, params={})
  send_message(params.merge({
      type: "unicast",
      device_tokens: device_token
    }))
end

Private Instance Methods

check_response!(response_body_json) click to toggle source
# File lib/umeng_push/client.rb, line 107
def check_response!(response_body_json)
  if response_body_json['ret'] != 'SUCCESS'
    raise ResponseError.new(response_body_json['data']['error_code'], data: response_body_json['data'])
  end
end
compact_params(params) click to toggle source
# File lib/umeng_push/client.rb, line 121
def compact_params(params)
  custom_compact = Proc.new { |k, v| v.delete_if(&custom_compact) if v.kind_of?(Hash);  v.nil? }
  params.delete_if &custom_compact
end
post(url, payload) click to toggle source
# File lib/umeng_push/client.rb, line 92
def post(url, payload)
  params = compact_params(payload)
  sign = sign(url, params)
  response = nil
  request = HTTPI::Request.new
  request.url = "#{UmengPush::HOST}#{url}?sign=#{sign}"
  request.open_timeout = 5
  request.read_timeout = 5
  request.body = params.to_json
  response = HTTPI.post(request)
  response_body_json = JSON.load(response.body)
  check_response!(response_body_json)
  response_body_json
end
sign(url, payload) click to toggle source
# File lib/umeng_push/client.rb, line 113
def sign(url, payload)
  Digest::MD5.hexdigest('POST' + UmengPush::HOST + url + payload.to_json + app_master_secret)
end
timestamp() click to toggle source
# File lib/umeng_push/client.rb, line 117
def timestamp
  Time.now.to_i.to_s
end