using Common; using log4net; using System; using System.Configuration; using System.IO; using System.Net; using System.Text; using System.Web.Script.Serialization; namespace PushNotification { public static class FcmNotifier { private static readonly ILog Log = LogManager.GetLogger(typeof(FcmNotifier)); public static void Notify(string fcmToken, string body, string title, bool isGroup = false, object data = null) { if (string.IsNullOrEmpty(fcmToken)) { Log.Debug("Fcm device id is empty: " + fcmToken); return; } PushNotificationPayload payload = new PushNotificationPayload(); payload.to = isGroup == true ? "/topics/" + fcmToken : fcmToken; payload.notification = new Notification { body = body, title = title }; payload.data = data; try { Log.Debug("Server is firing push notification" + fcmToken); WebRequest tRequest = WebRequest.Create(ConfigurationManager.AppSettings["GoogleFcm"].ToString()); tRequest.Method = "POST"; tRequest.ContentType = "application/json"; var serializer = new JavaScriptSerializer(); var json = serializer.Serialize(payload); Byte[] byteArray = Encoding.UTF8.GetBytes(json); tRequest.Headers.Add(string.Format("Authorization: key={0}", ConfigurationManager.AppSettings["FcmAuthorizationHeader"].ToString())); tRequest.Headers.Add(string.Format("Sender: id={0}", ConfigurationManager.AppSettings["fcmSenderId"].ToString())); tRequest.ContentLength = byteArray.Length; 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(); string str = sResponseFromServer; // Log.Info($"Google FCM Api call success: {str}"); Log.Info(serializer.Serialize( new FireBaseLogResponseViewModel() { Response = str, Data = json })); } } } } } catch (Exception ex) { Log.Error(ex.Message, ex); Log.ErrorFormat("Google FCM Api call failed Exception {0}:", ex.Message); } } } }