1

I used this code to send push notification and it works well. Now i'm trying to send a notification to multiple devices, but im unable to do it, im getting "400 Bad Request Error".

Here is my modified code:

Shared Function sendPush(ByVal value As String) As String

        Dim toret As String = ""


        Dim regid As String = "[""XXXXXX"",""ZZZZZZ""]"

        Dim applicationID = "YYYYYYY"
        Dim SENDER_ID = "SSSSSSS"

        Dim tRequest As WebRequest
        tRequest = WebRequest.Create("https://android.googleapis.com/gcm/send")
        tRequest.Method = "post"
        tRequest.ContentType = " application/json"
        tRequest.Headers.Add(String.Format("Authorization: key={0}", applicationID))

        tRequest.Headers.Add(String.Format("Sender: id={0}", SENDER_ID))

        Dim postData As String = "{""collapse_key"":""score_update"",""time_to_live"":108,""delay_while_idle"":1,""data"":{""message"":""" & Convert.ToString(value) & """,""time"":""" & System.DateTime.Now.ToString() & """},""registration_ids"":" & regid & "}"
        Console.WriteLine(postData)
        Dim byteArray As [Byte]() = Encoding.UTF8.GetBytes(postData)
        tRequest.ContentLength = byteArray.Length

        Dim dataStream As Stream = tRequest.GetRequestStream()
        dataStream.Write(byteArray, 0, byteArray.Length)
        dataStream.Close()

        Dim tResponse As WebResponse = tRequest.GetResponse()

        dataStream = tResponse.GetResponseStream()

        Dim tReader As New StreamReader(dataStream)

        Dim sResponseFromServer As [String] = tReader.ReadToEnd()

        toret = sResponseFromServer
        tReader.Close()
        dataStream.Close()
        tResponse.Close()

        Return toret
    End Function
Community
  • 1
  • 1
Redder
  • 146
  • 1
  • 5
  • 17

1 Answers1

1

I solved this.

The problem was in the parameter: ""delay_while_idle"":1

This parameter only accepts JSON Boolean, so it must be: ""delay_while_idle"":true OR ""delay_while_idle"":false. I decided to remove it because the default value is false, and is what I wanted.

Here is the full parameter list.

I'm posting here the working code for future copy-paste:

Shared Function sendPush(ByVal value As String) As String

    Dim toret As String = ""

    'Change these values
    Dim regid As String = "[""XXXXXX"",""ZZZZZZ""]"
    Dim applicationID = "YYYYYYY"
    Dim SENDER_ID = "SSSSSSS"

    Dim tRequest As WebRequest
    tRequest = WebRequest.Create("https://android.googleapis.com/gcm/send")
    tRequest.Method = "post"
    tRequest.ContentType = " application/json"
    tRequest.Headers.Add(String.Format("Authorization: key={0}", applicationID))

    tRequest.Headers.Add(String.Format("Sender: id={0}", SENDER_ID))

    Dim postData As String = "{""collapse_key"":""score_update"",""time_to_live"":108,""data"":{""message"":""" & Convert.ToString(value) & """,""time"":""" & System.DateTime.Now.ToString() & """},""registration_ids"":" & regid & "}"
    Console.WriteLine(postData)
    Dim byteArray As [Byte]() = Encoding.UTF8.GetBytes(postData)
    tRequest.ContentLength = byteArray.Length

    Dim dataStream As Stream = tRequest.GetRequestStream()
    dataStream.Write(byteArray, 0, byteArray.Length)
    dataStream.Close()

    Dim tResponse As WebResponse = tRequest.GetResponse()

    dataStream = tResponse.GetResponseStream()

    Dim tReader As New StreamReader(dataStream)

    Dim sResponseFromServer As [String] = tReader.ReadToEnd()

    toret = sResponseFromServer
    tReader.Close()
    dataStream.Close()
    tResponse.Close()

    Return toret
End Function
Redder
  • 146
  • 1
  • 5
  • 17