public string Topic = ConfigurationManager.AppSettings["Topic"]; //"/topics/news"; /// <summary> /// Формирует информационное сообщение для отправки в Firebase /// </summary> /// <param name="title">Заголовок сообщения</param> /// <param name="preview">Превью сообщения</param> /// <param name="sendOptions">Адресат</param> /// <returns>Модель push-сообщения в формате для Firebase</returns> /// Метод для отправки сообщения, где можно напрямую задать Title и Preview public PushMessage FormMessageToFirebase(string title, string preview, SendingOptions sendOptions) { var message = new PushMessage(); message.To = GetRecipientString(sendOptions); message.Message = new InnerMessage { Title = title, Preview = preview }; return(message); }
public PushMessage GetSampleMessage(SendingOptions opts) { var message = new PushMessage(); message.To = GetRecipientString(opts); message.Message = new InnerMessage { Title = "From C#", Preview = "Preview" }; return(message); }
/// <summary> /// Отсылает заранее сформированное сообщение в Firebase /// </summary> /// <param name="message"></param> private async Task <FirebaseResponse> SendJSON(PushMessage message) { string json = JsonConvert.SerializeObject(message); var client = (Handler == null) ? new HttpClient() : new HttpClient(Handler); //Content-Type Header var stringContent = new StringContent(json, Encoding.UTF8, "application/json"); #region Headers //Accept client.DefaultRequestHeaders.Accept.Add( new System.Net.Http.Headers.MediaTypeWithQualityHeaderValue("application/json")); //Authorization client.DefaultRequestHeaders.TryAddWithoutValidation("Authorization", ServerKey); #endregion var response = client.PostAsync(FirebaseAdress, stringContent, new System.Threading.CancellationToken()).Result; var code = response.StatusCode; string responseString = await response.Content.ReadAsStringAsync(); //Если код != 200, случилась какая-то ерунда. Десереализовать объект не получится bool code200 = (code == HttpStatusCode.OK); //Иногда Firebase возвращает Plain Text вида "Error=InvalidRegistration". Её лучше отловить сразу: bool plainTextReturned = (responseString.Contains("Error=") && (responseString.IndexOf("results") == -1)); if (!code200 || plainTextReturned) { throw new Exception(responseString); } else { FirebaseResponse fireResponse = JsonConvert.DeserializeObject <FirebaseResponse>(responseString); return(fireResponse); } }
/// <summary> /// Отсылает сообщение в Firebase и пишет лог /// </summary> /// <param name="message"></param> public async void SendMessage(PushMessage message) { try { Log.Info(LoggerStrings.LOG_SENDINGPUSHMESSAGE(message.Message.Title)); var response = await SendJSON(message); CheckFirebaseResponse(response); } catch (JsonReaderException readerEx) //пришёл корявый JSON. Такие ошибки надо отлавливать, чтобы быть готовым ко всему, что Firebase нам пошлет { Log.Error(LoggerStrings.LOG_BADJSON, readerEx); } catch (Exception ex) //Код ответа != 200 или неизвестная ошибка { Log.Error(LoggerStrings.LOG_CODENOT200ORUNKNOWNERROR, ex); } finally { Log.Error(LoggerStrings.LOG_SEPARATOR); } }