Использование VB.NET для отправки уведомления эмулятору Android с ошибкой 401

Я пишу код VB.NET для отправки уведомления эмулятору Android. Я могу успешно отправить тестовое сообщение из элемента управления firebase. Однако это не удалось, когда я попытался отправить сообщение через код VB.NET на своем локальном компьютере и получил ошибку «Удаленный сервер вернул ошибку: (401) Несанкционировано».

Я попытался просмотреть следующую ссылку: FCM (Firebase Cloud Messaging ) Push-уведомление с помощью Asp.Net и следуя инструкциям, но оно все еще не работает.

Вот мой код:

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


Ошибка произошла в строке:

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

Вот ключ сервера и идентификатор отправителя, которые я использую: введите здесь описание изображения

Обновлено: я попытался отправить веб-запрос из приложения Postman, и он также дал ту же ошибку (401: Unauthorized), как показано на рисунке ниже:

Ошибка публикации веб-запроса


person Pawich S.    schedule 09.04.2019    source источник
comment
какую ошибку вы получаете? вы должны хотя бы написать ответ Dim As HttpWebResponse = CType(request.GetResponse(), HttpWebResponse) и использовать ответ вместо httpResponse   -  person nbk    schedule 10.04.2019
comment
Я получил ошибку Удаленный сервер вернул ошибку: (401) Неавторизованный. Это все еще происходит, хотя я исправил код, как вы упомянули.   -  person Pawich S.    schedule 10.04.2019
comment
401 означает, что данные вашей учетной записи недействительны. вы должны проверить идентификатор и ключ сервера   -  person nbk    schedule 10.04.2019
comment
ХОРОШО. Я совершил глупую ошибку, найдя ключ не в том месте. Теперь я нашел решение и обновил ответ. Спасибо НБК за помощь :D   -  person Pawich S.    schedule 11.04.2019


Ответы (1)


ХОРОШО. Я сделал глупую ошибку, используя ключ API, который не является фактическим ключом сервера. Несмотря на то, что я читал, что мне следует перейти на вкладку облачных сообщений в настройках проекта, я неправильно понял, что мне нужно искать вкладку облачных сообщений на боковой панели, что неверно. Вот шаг, на котором я нашел ключ сервера:

  1. Нажмите кнопку настройки рядом с обзором проекта.

    введите здесь описание изображения

  2. Выберите первый вариант (настройка проекта)

    введите здесь описание изображения

  3. Нажмите на вторую вкладку (Облачные сообщения)

    введите здесь описание изображения

  4. Используйте ключ сервера и идентификатор отправителя на этой странице

    введите здесь описание изображения

Сначала я попытался найти ключ сервера на вкладке облачных сообщений на боковой панели, которая находится в неправильном месте.

введите здесь описание изображения

person Pawich S.    schedule 11.04.2019