Exemplo n.º 1
0
        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);
        }
Exemplo n.º 2
0
        public PushMessage GetSampleMessage(SendingOptions opts)
        {
            var message = new PushMessage();

            message.To      = GetRecipientString(opts);
            message.Message = new InnerMessage
            {
                Title   = "From C#",
                Preview = "Preview"
            };
            return(message);
        }
Exemplo n.º 3
0
        /// <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);
            }
        }
Exemplo n.º 4
0
        /// <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);
            }
        }