Отправьте push на Android с помощью C # с помощью FCM (Firebase Cloud Messaging)

Я использую этот код для отправки уведомлений с помощью C # с помощью GCM, используя Winforms, Webforms, что угодно. Теперь я хочу отправить в FCM (Firebase Cloud Messaging). Должен ли я обновлять свой код? :

public class AndroidGCMPushNotification { public AndroidGCMPushNotification() { // // TODO: Add constructor logic here // } public string SendNotification(string deviceId, string message) { string SERVER_API_KEY = "server api key"; var SENDER_ID = "application number"; var value = message; WebRequest tRequest; tRequest = WebRequest.Create("https://android.googleapis.com/gcm/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() + "&registration_id=" + deviceId + ""; 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(); return sResponseFromServer; } } 

Но GCM был изменен на FCM. Этот же код отправляет уведомление? Где я могу найти SERVER_API_KEY? Это же решение?

Solutions Collecting From Web of "Отправьте push на Android с помощью C # с помощью FCM (Firebase Cloud Messaging)"

Вот код для серверной firebase для android и IOS:

 public static void SendPushNotification(){ try{ string applicationID = "AIz..........Fep0"; string senderId = "30............8"; string deviceId = "ch_G60NPga4:APA9............T_LH8up40Ghi-J"; WebRequest tRequest = WebRequest.Create("https://fcm.googleapis.com/fcm/send"); tRequest.Method = "post"; tRequest.ContentType = "application/json"; var data = new { to = deviceId, notification = new { body = "Osama", title = "AlBaami", sound = "Enabled" } }; var serializer = new JavaScriptSerializer(); var json = serializer.Serialize(data); Byte[] byteArray = Encoding.UTF8.GetBytes(json); tRequest.Headers.Add(string.Format("Authorization: key={0}", applicationID)); tRequest.Headers.Add(string.Format("Sender: id={0}", senderId)); 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; } } } } } catch (Exception ex) { string str = ex.Message; } } 

На основе кода Teste. Я могу подтвердить следующие работы. Я не могу сказать, является ли это «хорошим» кодом, но он, безусловно, работает и может помочь вам быстро и быстро восстановить работоспособность, если вы столкнулись с проблемами сервера GCM с сервером FCM!

 public AndroidFCMPushNotificationStatus SendNotification(string serverApiKey, string senderId, string deviceId, string message) { AndroidFCMPushNotificationStatus result = new AndroidFCMPushNotificationStatus(); try { result.Successful = false; result.Error = null; var value = message; WebRequest 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}", serverApiKey)); tRequest.Headers.Add(string.Format("Sender: id={0}", senderId)); string postData = "collapse_key=score_update&time_to_live=108&delay_while_idle=1&data.message=" + value + "&data.time=" + System.DateTime.Now.ToString() + "&registration_id=" + deviceId + ""; Byte[] byteArray = Encoding.UTF8.GetBytes(postData); 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(); result.Response = sResponseFromServer; } } } } } catch (Exception ex) { result.Successful = false; result.Response = null; result.Error = ex; } return result; } public class AndroidFCMPushNotificationStatus { public bool Successful { get; set; } public string Response { get; set; } public Exception Error { get; set; } } 

Попробуйте отправить объект json. Замените это:

 tRequest.ContentType = " application/x-www-form-urlencoded;charset=UTF-8"; string postData = "collapse_key=score_update&time_to_live=108&delay_while_idle=1&data.message=" + value + "&data.time=" + System.DateTime.Now.ToString() + "&registration_id=" + deviceId + ""; Console.WriteLine(postData); Byte[] byteArray = Encoding.UTF8.GetBytes(postData); 

Для этого:

 tRequest.ContentType = "application/json"; var data = new { to = deviceId, notification = new { body = "This is the message", title = "This is the title", icon = "myicon" } }; var serializer = new JavaScriptSerializer(); var json = serializer.Serialize(data); Byte[] byteArray = Encoding.UTF8.GetBytes(json); 

Вот код для облачного запроса firebase на стороне сервера от C # / Asp.net.
Обратите внимание, что ваша клиентская сторона должна иметь одну и ту же тему.
например

 FirebaseMessaging.getInstance().subscribeToTopic("news"); public 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("Authorization:key=" + YOUR_FIREBASE_SERVER_KEY); httpWebRequest.Method = "POST"; using (var streamWriter = new StreamWriter(httpWebRequest.GetRequestStream())) { string json = "{\"to\": \"/topics/news\",\"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; } 

Я опубликовал этот ответ, поскольку этот вопрос был просмотрен больше всего, и этот код на стороне сервера был написан на VS 2015 в C # для отправки push-уведомления либо одного устройства на основе идентификатора устройства, либо темы подписки на приложение Xamarin для Android

 public class FCMPushNotification { public FCMPushNotification() { // TODO: Add constructor logic here } public bool Successful { get; set; } public string Response { get; set; } public Exception Error { get; set; } public FCMPushNotification SendNotification(string _title, string _message, string _topic) { FCMPushNotification result = new FCMPushNotification(); try { result.Successful = true; result.Error = null; // var value = message; var requestUri = "https://fcm.googleapis.com/fcm/send"; WebRequest webRequest = WebRequest.Create(requestUri); webRequest.Method = "POST"; webRequest.Headers.Add(string.Format("Authorization: key={0}", YOUR_FCM_SERVER_API_KEY)); webRequest.Headers.Add(string.Format("Sender: id={0}", YOUR_FCM_SENDER_ID)); webRequest.ContentType = "application/json"; var data = new { // to = YOUR_FCM_DEVICE_ID, // Uncoment this if you want to test for single device to="/topics/"+_topic, // this is for topic notification=new { title=_title, body=_message, //icon="myicon" } }; var serializer = new JavaScriptSerializer(); var json = serializer.Serialize(data); Byte[] byteArray = Encoding.UTF8.GetBytes(json); webRequest.ContentLength = byteArray.Length; using (Stream dataStream = webRequest.GetRequestStream()) { dataStream.Write(byteArray, 0, byteArray.Length); using (WebResponse webResponse = webRequest.GetResponse()) { using (Stream dataStreamResponse = webResponse.GetResponseStream()) { using (StreamReader tReader = new StreamReader(dataStreamResponse)) { String sResponseFromServer = tReader.ReadToEnd(); result.Response = sResponseFromServer; } } } } } catch(Exception ex) { result.Successful = false; result.Response = null; result.Error = ex; } return result; } } 

И его использования

 // start sending push notification to apps FCMPushNotification fcmPush = new FCMPushNotification(); fcmPush.SendNotification("your notificatin title", "Your body message","news"); // end push notification 

Вам нужно изменить URL-адрес с https://android.googleapis.com/gcm/send на https://fcm.googleapis.com/fcm/send и изменить свою библиотеку приложений. Этот учебник поможет вам https://firebase.google.com/docs/cloud-messaging/server#implementing-http-connection-server-protocol