Използването на VB.NET за изпращане на известие до емулатора на Android получава грешка 401

Пиша код на VB.NET, за да изпратя известие до емулатора на Android. Мога успешно да изпратя тестово съобщение от контрола на firebase. Не успя обаче, когато се опитах да изпратя съобщение чрез VB.NET код в моята локална машина и получих грешка „Отдалеченият сървър върна грешка: (401) Неупълномощен“.

Опитах се да разгледам следната връзка: FCM (Firebase Cloud Messaging ) Push Notification с 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 response Като 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 Key, който не е действителен сървърен ключ. Въпреки че прочетох, че трябва да отида в раздела за съобщения в облака в настройката на проекта, погрешно съм разбрал, че трябва да гледам в раздела за съобщения в облак в страничната лента, което е грешно. Ето стъпката, в която намерих сървърния ключ:

  1. Щракнете върху бутона за настройка до Общ преглед на проекта

    въведете описание на изображението тук

  2. Изберете първата опция (настройка на проекта)

    въведете описание на изображението тук

  3. Кликнете върху втория раздел (облачни съобщения)

    въведете описание на изображението тук

  4. Използвайте ключа на сървъра и идентификатора на изпращача на тази страница

    въведете описание на изображението тук

Първо се опитах да потърся сървърен ключ в раздела за съобщения в облак в страничната лента, което е грешно местоположение.

въведете описание на изображението тук

person Pawich S.    schedule 11.04.2019