Ahmedfci_90 Ответов: 5

Используйте C# FCM для Android push notification


Я пытаюсь использовать FCM для отправки уведомлений на Android-устройство, но мне кажется, что я что-то упускаю. Вот шаги, которым я следовал

1-Используя обычный аккаунт google, я создал новый проект в https://console.firebase.google.com
2-На вкладке Настройки - & gt; облачные сообщения я получил ключ сервера и идентификатор отправителя
3 - я использовал код ниже

Я всегда получаю ошибку несоответствия идентификатора отправителя. Неужели я пропустил какие-то шаги? или мне нужно что-то сделать в мобильном приложении, чтобы соответствовать идентификатору отправителя?

Что я уже пробовал:

<pre lang="c#">
var regId = "device id";
string SERVER_API_KEY = "Firebase Server key";
        var SENDER_ID = "Sender ID";
        var value = "Test Notification";
        WebRequest tRequest;
        tRequest = WebRequest.Create("https://fcm.googleapis.com/fcm/send");
        tRequest.Method = "post";
        tRequest.ContentType = " application/x-www-form-urlencoded;charset=UTF-8";
        tRequest.Headers.Add(string.Format("Authorization: key={0}", SERVER_API_KEY));

        tRequest.Headers.Add(string.Format("Sender: id={0}", SENDER_ID));

        string postData = "collapse_key=score_update&time_to_live=108&delay_while_idle=1&data.message=" + value + "&data.time=" + System.DateTime.Now.ToString() + "®istration_id=" + regId + "";
        Console.WriteLine(postData);
        byte[] byteArray = Encoding.UTF8.GetBytes(postData);
        tRequest.ContentLength = byteArray.Length;

        Stream dataStream = tRequest.GetRequestStream();
        dataStream.Write(byteArray, 0, byteArray.Length);
        dataStream.Close();

        WebResponse tResponse = tRequest.GetResponse();

        dataStream = tResponse.GetResponseStream();

        StreamReader tReader = new StreamReader(dataStream);

        string sResponseFromServer = tReader.ReadToEnd();


        tReader.Close();
        dataStream.Close();
        tResponse.Close();

5 Ответов

Рейтинг:
2

sajidur rahman

Вы можете попробовать следующий метод. Я тестировал с android .

static void SendMessage()
{
    string serverKey = "Your Server key";

    try
    {
        var result = "-1";
        var webAddr = "https://fcm.googleapis.com/fcm/send";

        var httpWebRequest = (HttpWebRequest)WebRequest.Create(webAddr);
        httpWebRequest.ContentType = "application/json";
        httpWebRequest.Headers.Add("Authorization:key=" + serverKey);
        httpWebRequest.Method = "POST";

        using (var streamWriter = new StreamWriter(httpWebRequest.GetRequestStream()))
        {
            string json = "{\"to\": \"Your device token\",\"data\": {\"message\": \"This is a Firebase Cloud Messaging Topic Message!\",}}";
            streamWriter.Write(json);
            streamWriter.Flush();
        }

        var httpResponse = (HttpWebResponse)httpWebRequest.GetResponse();
        using (var streamReader = new StreamReader(httpResponse.GetResponseStream()))
        {
            result = streamReader.ReadToEnd();
        }

       // return result;
    }
    catch (Exception ex)
    {
      //  Response.Write(ex.Message);
    }
}


Member 13370016

Я получаю недействительную регистрацию. Я даю ключ сервера в качестве ключа сервера. Пожалуйста, уточните, должен ли я дать "ключ сервера" или " устаревший ключ сервера"

T Thamaraiselvan

Привет, вы должны предоставить регистрационный токен вместо строки "ваш токен устройства" в приведенном ниже коде.

строку JSON = "{\"к\": \"устройство маркера\",\"сведения\": {\"сообщение\": \"Это облако опорному пункту теме сообщения!\",}}";

Korlakunta

он работал для меня с "ключом сервера", и если вы получаете несанкционированное исключение, то вы должны сделать это следующим образом:

Пожалуйста, попробуйте удалить ключ сервера в разделе облачных сообщений консоли Firebase и добавить его с помощью кнопки " Добавить ключ сервера "и использовать новый" Serverkey " попробуйте выполнить приведенный выше код.
как будто это сработало для меня

Er. Sushant Shinde

Я использую этот код, он дает мне следующий ответ---
"{\"multicast_id\":5620607393159798425,\"success\":0,\"failure\":1,\"canonical_ids\":0,\"results\":[{\"error\":\"NotRegistered\"}]}"

Я использую правильный токен устройства и ключ api сервера, а затем он дает мне ответ на сбой?

Рейтинг:
1

Ashish K Kapoor

 public static String SendNotificationFromFirebaseCloud()
        {
            var result = "-1";
            var webAddr = "https://fcm.googleapis.com/fcm/send";
            var httpWebRequest = (HttpWebRequest)WebRequest.Create(webAddr);
            httpWebRequest.ContentType = "application/json";
            httpWebRequest.Headers.Add(HttpRequestHeader.Authorization,"key=Your Key");
            httpWebRequest.Method = "POST";

            using (var streamWriter = new StreamWriter(httpWebRequest.GetRequestStream()))
            {
                string strNJson = @"{
                    ""to"": ""/topics/ServiceNow"",
                    ""data"": {
                        ""ShortDesc"": ""This is sample"",
                        ""IncidentNo"": ""INC0010438"",
                        ""Description"": ""This is sample""
  },
  ""notification"": {
                ""title"": ""ServiceNow"",
    ""text"": ""Click me to open an Activity!"",
""sound"":""default""
  }
        }";
                streamWriter.Write(strNJson);
                streamWriter.Flush();
            }

            var httpResponse = (HttpWebResponse)httpWebRequest.GetResponse();
            using (var streamReader = new StreamReader(httpResponse.GetResponseStream()))
            {
                result = streamReader.ReadToEnd();
            }
            return result;
        }


Anoob KD

Я получаю ошибку : системы.Нет.Исключения webexception: 'удаленный сервер возвратил ошибку: (401) несанкционированный.'
.. plz помогите мне

Korlakunta

Пожалуйста, попробуйте удалить ключ сервера в разделе облачных сообщений консоли Firebase и добавить его с помощью кнопки " Добавить ключ сервера "и использовать новый" Serverkey " попробуйте выполнить приведенный выше код.
как будто это сработало для меня

Рейтинг:
1

Ashish K Kapoor

Пожалуйста, поделитесь своим кодом или напишите Мне.

httpWebRequest.Headers.Add(HttpRequestHeader.Authorization,"key=Your Key");

вы должны написать key=xxxxxxxx, где xxxxxxxx - это ваш ключ сервера.


Рейтинг:
0

Ahmedfci_90

Я нашел ошибку. Как бэк-энд-разработчик я работал только над частью C#. Есть еще один шаг, который нужно сделать со стороны мобильного приложения. Мобильное приложение должно позволять получать сообщения из списка идентификаторов отправителей, поэтому тот, который я использую в своем коде C#, должен быть разрешен со стороны мобильного приложения. Как только я это сделал это сработало


giangcs

Привет Ahmedfci_90,
Можете ли вы поделиться со мной примером кода после того, как решите свою проблему?
Я хочу push-уведомление от C# и получать от ionic app, но безуспешно.

T Thamaraiselvan

Если да, то можете ли вы отправить код того, что вы сделали на стороне мобильного приложения?

Рейтинг:
0

Member 12172000

публичная статическая строка SendNotificationFromFirebaseCloud()
{
ВАР результат = "-1";
ВАР webAddr = "https://fcm.googleapis.com/fcm/send";
var httpWebRequest = (HttpWebRequest)WebRequest.Создать (webAddr);
класс HttpWebRequest.ContentType = " application/json";
класс HttpWebRequest.Заголовки.Добавить("Your_Server_Key");
класс HttpWebRequest.Method = " POST";

используя (ВАР модулю записи StreamWriter = новая модулю записи StreamWriter(класса HttpWebRequest.Метод getrequeststream()))
{
строку JSON = "{\"к\": \"/темы/новости\",\"уведомление\": {\"\тела": \"Новые известия добавлен в приложения!\",\"название\":\"" + Your_Notif_Title+ "\",}}";
модулю записи StreamWriter.Write(json);
модулю записи StreamWriter.Промывать();
}

var httpResponse = (HttpWebResponse)httpWebRequest. GetResponse();
используя (вар что streamreader = новый поток streamreader(объект HttpResponse.GetResponseStream()))
{
результат = streamReader. ReadToEnd();
}
возвращаемый результат;
}