Google Cloud Messaging第三方服务器在发送邮件时出现“Missing Registration”错误

时间:2012-08-28 21:15:40

标签: google-cloud-messaging

我正在尝试从第三方服务器发送消息。当我在shell上使用curl命令发送http请求时,它可以正常工作,但是当我使用Ruby脚本做同样的事情时,我继续收到“Missing Registration”错误。更具体地说,当我输入

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, “成功”:1, “失败”:0, “canonical_ids”:0 “结果”:[{ “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
}

我觉得char编码存在一些问题。我在内容类型标题中定义了charset并尝试过,但结果是一样的。 任何人都可以帮助我吗?

1 个答案:

答案 0 :(得分:4)

这是关于编码。您必须将请求的编码设置为UTF8。