Search code examples
c#.netfirebasefirebase-cloud-messaging

How to create a Push Notification (FCM) using C#


I have a REST Api written in .NET Core, now has a requirement to create a Push Notification to Firebase Cloud Messaging (FCM). For testing, am using the Firebase Console but I need to get this done programtically. I have gone through the documentation of Firebase and some examples via Google but am more confused.

I think it is possible to create a message via a regular Http but can someone post a simple working example so that I can pick it up, please? Or maybe, my understanding is totally wrong?


Solution

  • Some people have also liked this question, so thought of providing the solution I implemented, thinking it may help others. Please feel free to ask questions, if you have any.

    How to get the Server Key: Here is the question link which helps.

    Firebase Cloud Messaging Documentation can be found here.

    public class FirebaseNotificationModel
    {
        [JsonProperty(PropertyName = "to")]
        public string To { get; set; }
    
        [JsonProperty(PropertyName = "notification")]
        public NotificationModel Notification { get; set; }
    }
    
    
    using System.Net.Http;
    using System.Text;
    public static async void Send(FirebaseNotificationModel firebaseModel)
    {
        HttpRequestMessage httpRequest = null;
        HttpClient httpClient = null;
    
        var authorizationKey = string.Format("key={0}", "YourFirebaseServerKey");
        var jsonBody = SerializationHelper.SerializeObject(firebaseModel);
    
        try
        {
            httpRequest = new HttpRequestMessage(HttpMethod.Post, "https://fcm.googleapis.com/fcm/send");
    
            httpRequest.Headers.TryAddWithoutValidation("Authorization", authorizationKey);
            httpRequest.Content = new StringContent(jsonBody, Encoding.UTF8, "application/json");
    
            httpClient = new HttpClient();
            using (await httpClient.SendAsync(httpRequest))
            {
            }
        }
        catch
        {
            throw;
        }
        finally
        {
            httpRequest.Dispose();
            httpClient.Dispose();
        }
    }