Использование VB.NET для отправки уведомления на эмулятор Android получить ошибку 401 - PullRequest
2 голосов
/ 09 апреля 2019

Я пишу код 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)

Вот ключ сервера и идентификатор отправителя, который я использую: enter image description here

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

Posting Web Request Failed

1 Ответ

0 голосов
/ 11 апреля 2019

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

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

    enter image description here

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

    enter image description here

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

    enter image description here

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

    enter image description here

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

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...