Використання 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: неавторизовано), як показано на малюнку нижче:

Помилка публікації веб-запиту


person Pawich S.    schedule 09.04.2019    source джерело
comment
яку помилку ви отримуєте? вам слід принаймні написати відповідь Dim як 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
В ПОРЯДКУ. Я зробив дурну помилку, шукаючи ключ не в тому місці. Тепер я знайшов рішення та оновив відповідь. Дякую nbk за допомогу :D   -  person Pawich S.    schedule 11.04.2019


Відповіді (1)


В ПОРЯДКУ. Я зробив дурну помилку, використавши ключ API, який не є справжнім ключем сервера. Незважаючи на те, що я читав, що мені слід перейти на вкладку хмарних повідомлень у налаштуваннях проекту, я неправильно зрозумів, що мені потрібно дивитися на вкладку хмарних повідомлень на бічній панелі, що неправильно. Ось крок, на якому я знайшов ключ сервера:

  1. Натисніть кнопку налаштувань біля Огляду проекту

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

  2. Виберіть перший варіант (налаштування проекту)

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

  3. Натисніть на другу вкладку (обмін повідомленнями в хмарі)

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

  4. Використовуйте ключ сервера та ідентифікатор відправника на цій сторінці

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

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

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

person Pawich S.    schedule 11.04.2019