简体   繁体   中英

Using VB.NET to sent notification to android emulator get error 401

I'm writing VB.NET code to send notification to android Emulator. I can successfully send test message from the firebase control. However, it failed when I tried to send message via VB.NET code in my local machine and get error "The remote server returned an error: (401) Unauthorized".

I have tried looking at the following link: FCM (Firebase Cloud Messaging) Push Notification with Asp.Net and following the instructions but it still not working.

Here is my code:

Imports System.Net
Imports Newtonsoft.Json

Public Class Notification

    Public Sub SendNotification(ByVal deviceIDList As List(Of String), ByVal title As String, ByVal bodyMsg As String)

        Dim fcmPath As String = "https://fcm.googleapis.com/fcm/send"
        Dim serverKey As String = "AIzaxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxoCAeI"
        Dim senderID As String = "35xxxxxxx37"

        Dim request As HttpWebRequest = CType(HttpWebRequest.Create(fcmPath), HttpWebRequest)
        With request
            .Method = "POST"
            .ContentType = "application/json"
            .Headers.Add(String.Format("Authorization: key={0}", serverKey))
            .Headers.Add(String.Format("Sender: id={0}", senderID))
        End With

        Using streamWriter = New StreamWriter(request.GetRequestStream())
            Dim webObject As New WebRequestFcmData
            With webObject
                .registration_ids = deviceIDList
                .notification.title = title
                .notification.body = bodyMsg
                .notification.content_available = True
                .notification.sound = "default"
                .notification.priority = "high"
            End With
            Dim body = JsonConvert.SerializeObject(webObject)
            With streamWriter
                .Write(body)
                .Flush()
                .Close()
            End With
        End Using
        Dim httpResponse = CType(request.GetResponse(), HttpWebResponse)
        Using streamReader As New StreamReader(httpResponse.GetResponseStream)
            Dim result = streamReader.ReadToEnd
        End Using
    End Sub
End Class

Public Class WebRequestFcmData
    Public Property registration_ids As List(Of String)
    Public Property notification As New NotificationData
End Class

Public Class NotificationData
    Public Property body As String
    Public Property content_available As Boolean
    Public Property priority As String
    Public Property title As String
    Public Property sound As String
End Class


The error occurred at the line:

Dim httpResponse = CType(request.GetResponse(), HttpWebResponse)

Here is the server key and sender ID that I use: 在此处输入图像描述

Updated: I tried sending web request from Postman application and it also gave the same error (401: Unauthorized) as shown in the figure below:

发布 Web 请求失败

OK. I made a silly mistake by using API Key which is not actual Server key. Even though I have read that I should go to cloud messaging tab in project setting, I misunderstood that I have to look in cloud messaging tab in the side bar which is wrong. Here is the step where I found server key:

  1. Click on the setting button near Project Overview

    在此处输入图像描述

  2. Choose the first option (Project setting)

    在此处输入图像描述

  3. Click on the second tab (Cloud messaging)

    在此处输入图像描述

  4. Use the server key and sender ID in this page

    在此处输入图像描述

At first, I tried looking for server key in cloud messaging tab in the sidebar which is wrong location.

在此处输入图像描述

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM