我正在尝试从第 3 方服务器发送消息。当我在 shell 上使用 curl 命令发送 http 请求时,它可以工作,但是当我使用 Ruby 脚本做同样的事情时,我不断收到“缺少注册”错误。更具体地说,当我输入
curl --header "Authorization: key=MY_KEY" --header Content-Type:"application/json" https://android.googleapis.com/gcm/send -d "{\"registration_ids\":[\"MY_REGISTRATION_KEY\"], \"data\":{\"data1\":\"data1val\"}}"
我得到以下回复
{"multicast_id":5609541310450656515,"success":1,"failure":0,"canonical_ids":0,"results":[{"message_id":"0:1346184864739450%3083a1e3f9fd7ecd"}]} ,消息是Android 设备正确接收。
但是,如果我使用以下脚本,来自 GCM 服务器的响应会发送错误消息,例如“Error=MissingRegistration”。(使用 ruby 版本 1.9.3)
require "net/https"
require "uri"
uri = URI.parse("https://android.googleapis.com/gcm/send")
https = Net::HTTP.new(uri.host, 443)
https.use_ssl = true
https.verify_mode = OpenSSL::SSL::VERIFY_NONE
https.start{|https|
request = Net::HTTP::Post.new(uri.path)
request["Authorization"] = "key=MY_KEY"
request["Content-Type"] = "application/json"
request.set_form_data({:registration_ids => ["MY_REGISTRATION_KEY"],
:data => {data1:"data1_val"}
})
response = https.request(request)
p response.body
p response.header
}
我觉得字符编码存在一些问题。我在内容类型标题中定义了字符集并尝试了,但结果是一样的。谁能帮我?