Допустим есть некая конфигурация, которая крутится на Сервере. Есть необходимость в том, чтобы при наступлении какого-либо события на Сервере была инициирована, например, синхронизация с мобильным устройством.  На самом деле можно придумать любой другой пример, но суть в том,  что инициатива какого-либо действия должна быть именно со стороны Сервера а не с мобилы.  Сигналом к действию для мобилы и будет выступать push сообщение.

В моем случае такое событие возникает в момент, когда торговая пара криптовалют на бирже Binance изменяет цену на некий заданный %

				
					Alert a = new Alert(c.ID);
if(a.got_to_be_pushed)
{
    Push push = new Push(a);
    push.Send();
}

				
			

А вот и сам класс Push, в котором можно добавить любые атрибуты пуша, включая звук, иконку, действия по нажатию и так далее

				
					using System;
using System.IO;
using System.Net;
using System.Text;
using Newtonsoft.Json;

namespace CryptoAlertWF
{
    class Push
    {
        private string SERVER_KEY = Global.FireBase_PUSH_SERVER_KEY;
        private Alert alert;
        public Push(Alert a)
        {
            alert = a;
        }
        public bool Send()
        {
            FireBasePush push = new FireBasePush(SERVER_KEY);
            dynamic r = push.SendPush(new PushMessage()
            {
                to = alert.FcmToken,
                content_available = true,
                priority = "high",
                notification = new PushMessageData
                {
                    title = alert.Title,
                    body = alert.Body,
                    sound = alert.Sound,
                    badge = alert.Badge
                }
            });
            alert.SavePushResult(r);
            return r.success == 1;
        }
    }

    public class FireBasePush
    {
        private string FIREBASE_URL = "https://fcm.googleapis.com/fcm/send";
        private string KEY_SERVER;
        public FireBasePush(String key_server)
        {
            this.KEY_SERVER = key_server;
        }
        public dynamic SendPush(PushMessage message)
        {
            HttpWebRequest request = (HttpWebRequest)WebRequest.Create(FIREBASE_URL);
            request.Method = "POST";
            request.Headers.Add("Authorization", "key=" + this.KEY_SERVER);
            request.ContentType = "application/json";
            string json = JsonConvert.SerializeObject(message);
            byte[] byteArray = Encoding.UTF8.GetBytes(json);
            request.ContentLength = byteArray.Length;
            Stream dataStream = request.GetRequestStream();
            dataStream.Write(byteArray, 0, byteArray.Length);
            dataStream.Close();
            HttpWebResponse response = (HttpWebResponse)request.GetResponse();
            if (response.StatusCode == HttpStatusCode.Accepted || response.StatusCode == HttpStatusCode.OK || response.StatusCode == HttpStatusCode.Created)
            {
                StreamReader read = new StreamReader(response.GetResponseStream());
                String result = read.ReadToEnd();
                read.Close();
                response.Close();
                dynamic stuff = JsonConvert.DeserializeObject(result);
                return stuff;
            }
            else
            {
                throw new Exception("An error has occurred when try to get server response: " + response.StatusCode);
            }
        }
    }
    public class PushMessage
    {
        private string _to;
        private bool _content_available;
        private string _priority;
        private PushMessageData _notification;
 
        public string to
        {
            get { return _to; }
            set { _to = value; }
        }
        public bool content_available
        {
            get { return _content_available; }
            set { _content_available = value; }
        }
        public string priority
        {
            get { return _priority; }
            set { _priority = value; }
        }
        public PushMessageData notification
        {
            get { return _notification; }
            set { _notification = value; }
        }
    }
    public class PushMessageData
    {
        private string _title;
        private string _body;
        private string _sound;
        private int _badge;
        public string sound
        {
            get { return _sound; }
            set { _sound = value; }
        }

        public string title
        {
            get { return _title; }
            set { _title = value; }
        }
        public string body
        {
            get { return _body; }
            set { _body = value; }
        }
        public int badge
        {
            get { return _badge; }
            set { _badge = value; }
        }
    }
}
				
			
C# Class to Send PUSH Notifications
Tagged on:             

Leave a Reply

Your email address will not be published. Required fields are marked *