0

サードパーティのサーバーからメッセージを送信しようとしています。シェルで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を定義して試してみましたが、結果は同じでした。誰でも私を助けることができますか?

4

1 に答える 1

4

それはエンコーディングについてです。リクエストのエンコーディングをUTF8に設定する必要があります。

于 2012-11-09T18:04:01.830 に答える