サードパーティのサーバーからメッセージを送信しようとしています。シェルで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,"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
}
文字エンコーディングに問題があるように感じます。content-typeヘッダにcharsetを定義して試してみましたが、結果は同じでした。誰でも私を助けることができますか?