Sachin Verma Sachin Verma - 3 months ago 70
C# Question

How to send notification from C# Console application

I want to create console application which is used to send notifications to different mobile devices via Goolge Firebase Notifications,

I have seen the code from link Send push to Android by C# using FCM (Firebase Cloud Messaging)

I am getting internal server error with status code 500

try{
string url = @"https://fcm.googleapis.com/fcm/send";
WebRequest tRequest = WebRequest.Create(url);
tRequest.Method = "post";
tRequest.ContentType = "application/json";

string postData = "collapse_key=score_update&time_to_live=108&delay_while_idle=1&data.message=" + "This is the message" + "&data.time=" + System.DateTime.Now.ToString() + "&registration_id=" + deviceId + "";
var data = new
{
to = deviceId,
notification = new
{
body = "This is the message",
title = "This is the title"

}
};
string jsonss = Newtonsoft.Json.JsonConvert.SerializeObject(data);

Byte[] byteArray = Encoding.UTF8.GetBytes(jsonss);
tRequest.Headers.Add(string.Format("Authorization: key={0}", applicationID));
tRequest.Headers.Add(string.Format("Sender: id={0}", senderId));
tRequest.ContentLength = byteArray.Length;
tRequest.ContentType = "application/json";
using (Stream dataStream = tRequest.GetRequestStream())
{
dataStream.Write(byteArray, 0, byteArray.Length);

using (WebResponse tResponse = tRequest.GetResponse())
{
using (Stream dataStreamResponse = tResponse.GetResponseStream())
{
using (StreamReader tReader = new StreamReader(dataStreamResponse))
{
String sResponseFromServer = tReader.ReadToEnd();
Console.Write(sResponseFromServer);
}
}
}
}
}

catch (Exception ex)
{
Console.Write(ex.Message);
{
var sss = ex.Message;
if (ex.InnerException != null)
{
var ss = ex.InnerException;
}
}

}

Answer

Here is the screenshot of , how to get  configuration setting information from Firebase

Here is the code to send notification using C#, I have made it working

WebRequest tRequest = WebRequest.Create(fcmAPIServerURL);
                        tRequest.Method = "post";
                        tRequest.ContentType = "application/json";
                        var objNotification = new
                        {
                            to = notification.DeviceToken,
                            data = new
                            {
                                title = notification.NotificationTitle,
                                body = notification.NotificationBody
                            }
                        };
                        string jsonNotificationFormat = Newtonsoft.Json.JsonConvert.SerializeObject(objNotification);

                        Byte[] byteArray = Encoding.UTF8.GetBytes(jsonNotificationFormat);
                        tRequest.Headers.Add(string.Format("Authorization: key={0}", apiKey));
                        tRequest.Headers.Add(string.Format("Sender: id={0}", project_number));
                        tRequest.ContentLength = byteArray.Length;
                        tRequest.ContentType = "application/json";
                        using (Stream dataStream = tRequest.GetRequestStream())
                        {
                            dataStream.Write(byteArray, 0, byteArray.Length);

                            using (WebResponse tResponse = tRequest.GetResponse())
                            {
                                using (Stream dataStreamResponse = tResponse.GetResponseStream())
                                {
                                    using (StreamReader tReader = new StreamReader(dataStreamResponse))
                                    {
                                        String responseFromFirebaseServer = tReader.ReadToEnd();

                                        FCMResponse response = Newtonsoft.Json.JsonConvert.DeserializeObject<FCMResponse>(responseFromFirebaseServer);
                                        if (response.success == 1)
                                        {
                                            new NotificationBLL().InsertNotificationLog(dayNumber, notification, true);
                                        }
                                        else if (response.failure == 1)
                                        {
                                            new NotificationBLL().InsertNotificationLog(dayNumber, notification, false);
                                            sbLogger.AppendLine(string.Format("Error sent from FCM server, after sending request : {0} , for following device info: {1}", responseFromFirebaseServer, jsonNotificationFormat));

                                        }

                                    }
                                }

                            }
                        }

Here is class FCMResponse used in this code to store response sent from FMServer

 public class FCMResponse
{
    public long multicast_id { get; set; }
    public int success { get; set; }
    public int failure { get; set; }
    public int canonical_ids { get; set; }
    public List<FCMResult> results { get; set; }
}
Comments