nifCody
nifCody

Reputation: 2444

Making POST Request to GCM server for notification key fails from Rails Controller

I have try to making a POST request to google cloud messaging server as follow from my Rails controller using httparty gem

@response = HTTParty.post("https://android.googleapis.com/gcm/notification",
                               :body => {
                                   :text => '{
                                    "operation" : "remove",
                                    "notification_key_name": "43",
                                    "registration_ids": [
                                        "dmfbvTrqeSo:APA91bFmk_zTryZi-2-BrjZK-zxN3nmQxl8tIUJriTl7EwRZsnHq3UAMNQ2O_mxLVes7WLHnW6INx21UdKwm64ReUpd5bKTE0uinrPau2WVrAUkfUyRKxlIGLD2xLKbNiSGjAeNIDAhe"
                                      ]
                                    }'.to_json
                               },
                               :headers => {
                                   'Content-Type' => 'application/json',
                                   'Authorization' => 'key=AIzaSyDQiBiYk433JhWKWFZZGAU3c08tWjCzU5o',
                                   'project_id' => '857642310184'
                               }
      )
      @json = JSON.parse(@response.body)
      render :json => @json

The response I got it not a notification key. It is

{
  "error": "BadJsonFormat"
}

What's wrong in my code?

My Rails controller request format is

POST /api/fcm HTTP/1.1
Host: localhost:3000
Content-Type: application/json
Cache-Control: no-cache
Postman-Token: cfd40d1e-81f4-5402-a3cd-f6749f868291
{
    "user_id" : "42"
}

Upvotes: 0

Views: 177

Answers (2)

Sajin
Sajin

Reputation: 1638

I guess httparty gem expects json data

So replace

:body => {
                                   :text => '{
                                    "operation" : "remove",
                                    "notification_key_name": "43",
                                    "registration_ids": [
                                        "dmfbvTrqeSo:APA91bFmk_zTryZi-2-BrjZK-zxN3nmQxl8tIUJriTl7EwRZsnHq3UAMNQ2O_mxLVes7WLHnW6INx21UdKwm64ReUpd5bKTE0uinrPau2WVrAUkfUyRKxlIGLD2xLKbNiSGjAeNIDAhe"
                                      ]
                                    }'.to_json
                               },
                               :headers => {
                                   'Content-Type' => 'application/json',
                                   'Authorization' => 'key=AIzaSyDQiBiYk433JhWKWFZZGAU3c08tWjCzU5o',
                                   'project_id' => '857642310184'
                               }

with

:body => {
                                   :text => {
                                    :operation => "remove",
                                    :notification_key_name => "43",
                                    :registration_ids => [
                                        "dmfbvTrqeSo:APA91bFmk_zTryZi-2-BrjZK-zxN3nmQxl8tIUJriTl7EwRZsnHq3UAMNQ2O_mxLVes7WLHnW6INx21UdKwm64ReUpd5bKTE0uinrPau2WVrAUkfUyRKxlIGLD2xLKbNiSGjAeNIDAhe"
                                      ]
                                    }
                               }.to_json,
                               :headers => {
                                   'Content-Type' => 'application/json',
                                   'Authorization' => 'key=AIzaSyDQiBiYk433JhWKWFZZGAU3c08tWjCzU5o',
                                   'project_id' => '857642310184'
                               }

Upvotes: 1

gwcodes
gwcodes

Reputation: 5690

Try removing to to_json on post. This would work if you were calling it for a Hash, but what it's doing here is double-escaping your string (which is already valid JSON).

If you want to send a minimal JSON request (i.e. without the extra spaces and carriage returns), you can also use

JSON.parse('{
  "operation" : "remove",
  ...
  }').to_json

Upvotes: 0

Related Questions