示例#1
0
        //[ValidateAntiForgeryToken]
        public async Task <IActionResult> Send(string sampleParam)
        {
            //TODO endpoint, auth - retrieve from UI, save to db
            var pushEndpoint = @"https://fcm.googleapis.com/fcm/send/fcQY8aBpBUQ:APA91bHQxER48x97XDAk5P_Ahdjuka7kqRmUGI33gfqP2xLYWoN8Fhc6YYxHxINa02A77kOt-MT7WXkre2cdLpl4Cb7Rc_p7n4SKvPL-enwFVcL2ke7fEPtiB_0gOEi29H_p5_WAsJBt";
            var p256dh       = @"BJLeaEQRpqNvCcxK-qoQhmTb_02zIwWY5gTal-124sE89aqE5-gM7c4xlqi-vctsY7tlbr8K9lisw9aKfUfdp_s";
            var auth         = @"Vz2aZFiZ7-K6KknndrxSng";
            var subscription = new PushSubscription(pushEndpoint, p256dh, auth);

            var options    = new Dictionary <string, object>();
            var subject    = @"mailto:[email protected]";
            var publicKey  = @"BFVE8GeDN3tHNJJc50Zufq3KkEFRU4vmuxOIVyjw5VxXiQ7KpnZ7vqfvn67hMSLxv6Cbe_308e_V9xffPH5ncjc";
            var privateKey = @"E3utukZxBbaIIH295QqQcxDjAg6GNswsPDhj6Z9HJ2Y";

            options["vapidDetails"] = new VapidDetails(subject, publicKey, privateKey);

            var webPushClient = new WebPushClient();

            try
            {
                await webPushClient.SendNotificationAsync(subscription, sampleParam, options);

                return(Ok(sampleParam));
            }
            catch (WebPushException ex)
            {
                return(Ok(ex.Message));
            }
        }
示例#2
0
        static void Main(string[] args)
        {
            var pushEndpoint = @"https://updates.push.services.mozilla.com/wpush/v2/gAAAAABcPYyEx7EN4bI8suXnzcCB94xX6kd0_m4ggu1qdpGfdwkmMw5kWUq_Kacjy_R-j1iyp_OzuvILnizH5dbFJWsUVqH3uHYoz8c9Ya3wLIq39l9h_ke8gp-3gj6GKS5Se2yWQnxbxaiYes8s1c6TZzQFjiX9VlWz3Jou2pQ7N-alab1thcI";
            var p256dh       = @"BM-wGN-lWJWrZ_EinsQBjay_Os8flZTfhN4xaBqlw1aJ_usc9qJi7vMf5wHFZYqwatyt0BCRnfp6PdboE92m95o";
            var auth         = @"byXCU0iZ_d12HdE9f23WvA";

            var subject    = @"mailto:[email protected]";
            var publicKey  = @"BM19ABrxlF90WXluoBYTPuOf53JzbgXKVaiMJAVo6HELcb01UfG6h7_Y0GYhJzVcEYWLirOwvCuUTY0dGCEnOgU";
            var privateKey = @"rZjgAUeFmMVx9AhGZSFyM264QKEDLnKcbViCBeRUJpQ";

            var subscription = new PushSubscription(pushEndpoint, p256dh, auth);
            var vapidDetails = new VapidDetails(subject, publicKey, privateKey);
            //var gcmAPIKey = @"[your key here]";
            int i             = 0;
            var webPushClient = new WebPushClient();

            while (true)
            {
                Console.WriteLine("Push: " + i);
                try
                {
                    webPushClient.SendNotification(subscription, "Push: " + i, vapidDetails);
                }
                catch (WebPushException exception)
                {
                    Console.WriteLine("Http STATUS code" + exception.StatusCode);
                }
                i++;
                Task.Delay(5000).Wait();
            }
        }
示例#3
0
        private static async Task DoWebPush(ILogger log)
        {
            var subject       = @"mailto:[email protected]";
            var subscriptions = await GetSubscriptions();

            foreach (var subscription in subscriptions)
            {
                var      vapidDetails  = new VapidDetails(subject, PublicKey, PrivateKey);
                var      webPushClient = new WebPushClient();
                PushData pushData      = CreatePushMessage();

                try
                {
                    webPushClient.SendNotification(subscription, JsonConvert.SerializeObject(pushData), vapidDetails);
                }
                catch (AggregateException exception)
                {
                    log.LogError("Error when pushing: " + exception.StackTrace);

                    if (exception.InnerException is WebPushException)
                    {
                        await _documentClient.ExecuteStoredProcedureAsync <dynamic>(
                            UriFactory.CreateStoredProcedureUri(Database, Collection, SprocName), subscription.Endpoint);
                    }
                }
            }
        }
示例#4
0
        public async Task TriggerPush(PushMessage pushMessage)
        {
            pushMessage.Message += $"-{DateTime.Now:dddd HH:mm:ss}";
            var subscriptions = await _subscriptionsRepository.GetSubscriptionsAsync();

            foreach (var sub in subscriptions)
            {
                var subscription = new PushSubscription(sub.Endpoint, sub.Key, sub.AuthSecret);

                var webPushClient = new WebPushClient();
                try
                {
                    webPushClient.SendNotification(subscription, JsonConvert.SerializeObject(pushMessage, new JsonSerializerSettings
                    {
                        ContractResolver = new CamelCasePropertyNamesContractResolver()
                    }), _vapidDetails);
                }
                catch (WebPushException exception)
                {
                    Console.WriteLine("Http STATUS code" + exception.StatusCode);
                }
                catch (Exception exception)
                {
                    await _subscriptionsRepository.RemoveSubscription(sub);

                    Console.WriteLine(exception);
                }
            }
        }
        public async Task EnviarNotificacionPeliculaEnCartelera(Pelicula pelicula)
        {
            var notificaciones = await context.Notificaciones.ToListAsync();

            var llavePublica = configuration.GetValue <string>("notificaciones:llave_publica");
            var llavePrivada = configuration.GetValue <string>("notificaciones:llave_privada");
            var email        = configuration.GetValue <string>("notificaciones:email");

            var vapidDetails = new VapidDetails(email, llavePublica, llavePrivada);

            foreach (var notificacion in notificaciones)
            {
                var pushSubscription = new PushSubscription(notificacion.URL,
                                                            notificacion.P256dh, notificacion.Auth);

                var webPushClient = new WebPushClient();

                try
                {
                    var payload = JsonSerializer.Serialize(new
                    {
                        titulo = pelicula.Titulo,
                        imagen = pelicula.Poster,
                        url    = $"pelicula/{pelicula.Id}"
                    });

                    await webPushClient.SendNotificationAsync(pushSubscription, payload, vapidDetails);
                }
                catch (Exception ex)
                {
                    Console.WriteLine(ex.Message);
                    // ...
                }
            }
        }
示例#6
0
        /// <summary>
        /// Send push notification to subscribers.
        /// </summary>
        /// <param name="userId">
        /// User id for sending the push notification.
        /// </param>
        /// <param name="data">
        /// Data dictionary containing push notification elements.
        /// </param>
        public static void Send(int userId, Dictionary <string, string> data)
        {
            using (var db = new LibiadaWebEntities())
            {
                var subscribers = db.AspNetPushNotificationSubscribers.Where(s => s.UserId == userId);

                if (subscribers.Count() != 0)
                {
                    foreach (var subscriber in subscribers)
                    {
                        var endpoint = subscriber.Endpoint;
                        var p256dh   = subscriber.P256dh;
                        var auth     = subscriber.Auth;
                        var payload  = JsonConvert.SerializeObject(data);

                        var subscription = new PushSubscription(endpoint, p256dh, auth);
                        var options      = new Dictionary <string, object>();
                        options["TTL"] = 3600;

                        var publicKey  = ConfigurationManager.AppSettings["PublicVapidKey"];
                        var privateKey = ConfigurationManager.AppSettings["PrivateVapidKey"];
                        options["vapidDetails"] = new VapidDetails(subject, publicKey, privateKey);
                        var webPushClient = new WebPushClient();
                        try
                        {
                            webPushClient.SendNotification(subscription, payload, options);
                        }
                        catch (WebPushException exception)
                        {
                            Debug.WriteLine("Http STATUS code: {0}", exception.StatusCode);
                        }
                    }
                }
            }
        }
示例#7
0
        public IActionResult Send(SendRequestModel model)
        {
            Application application = _dbContext.Application.SingleOrDefault(m => m.id == model.id);

            List <Device> devices = _dbContext.Device.Where(m => m.appId == application.id).ToList();

            string vapidPublicKey  = application.publicKey;
            string vapidPrivateKey = application.privateKey;

            PushModel payload = new PushModel
            {
                title   = model.title,
                message = model.message
            };

            foreach (Device device in devices)
            {
                var pushSubscription = new PushSubscription(device.pushEndpoint, device.pushP256DH, device.pushAuth);
                var vapidDetails     = new VapidDetails("mailto:[email protected]", vapidPublicKey, vapidPrivateKey);

                var webPushClient = new WebPushClient();
                webPushClient.SendNotification(pushSubscription, JsonConvert.SerializeObject(payload), vapidDetails);
            }

            return(RedirectToAction(nameof(Index)));
        }
        public void SendNotification()
        {
            var pushEndpoint = endpoint;
            var p256dh       = this.p256dh;
            var auth         = this.auth;

            var          subject    = @"mailto:[email protected]";
            const string publicKey  = @"BEu09qCcFIreSF2qnR2W8pAKcFAn6wpJVFaKKx0BICpxevmLyGnrxxZFNOV0rJOyZifkgdxIxjhtNsYWREPJBNg";
            const string privateKey = @"NbLMH1eHsktglOLgiBLsD2L1eklzY1vrtlHWliAV0SU";

            var subscription = new PushSubscription(pushEndpoint, p256dh, auth);
            var vapidDetails = new VapidDetails(subject, publicKey, privateKey);
            //var gcmAPIKey = @"[your key here]";

            var webPushClient = new WebPushClient();

            try
            {
                //webPushClient.SendNotification(subscription);
                //var payload = new { message = "Haww koi hila", image = await NetworkManager.SendImage() };
                webPushClient.SendNotification(subscription, " koi hila", vapidDetails);
                //webPushClient.SendNotification(subscription, "payload", gcmAPIKey);
            }
            catch (WebPushException exception)
            {
                Debug.WriteLine("Http STATUS code" + exception.StatusCode);
            }
            catch (Exception)
            {
                Debug.WriteLine("Notification failed");
            }
        }
        /// <summary>
        /// Sends a message to multiple devices.
        /// </summary>
        /// <param name="p_message">Message to send.</param>
        /// <param name="p_targetDevices">Target devices.</param>
        public Task SendMessage(MessageViewModel p_message, IEnumerable <Device> p_targetDevices)
        {
            WebPushClient v_webPushClient = new WebPushClient();

            if (this.HasVapidPublicKey())
            {
                v_webPushClient.SetVapidDetails(VapidDetails);
            }

            if (!String.IsNullOrWhiteSpace(GcmAPIKey))
            {
                v_webPushClient.SetGcmApiKey(GcmAPIKey);
            }


            List <Task> v_pending = new List <Task>();

            foreach (Device v_targetDevice in p_targetDevices)
            {
                string v_message = JsonConvert.SerializeObject(p_message);
                v_pending.Add(v_webPushClient.SendNotificationAsync(v_targetDevice, v_message));
            }

            return(Task.WhenAll(v_pending));
        }
示例#10
0
        private static async Task SendNotificationAsync(Order order,
                                                        NotificationSubscription subscription, string message)
        {
            // En una aplicación real puedes generar tus propias llaves en
            // https://tools.reactpwa.com/vapid
            var PublicKey =
                "BLC8GOevpcpjQiLkO7JmVClQjycvTCYWm6Cq_a7wJZlstGTVZvwGFFHMYfXt6Njyvgx_GlXJeo5cSiZ1y4JOx1o";
            var PrivateKey =
                "OrubzSz3yWACscZXjFQrrtDwCKg-TGFuWhluQ2wLXDo";
            var PushSubscription =
                new PushSubscription(
                    subscription.Url, subscription.P256dh, subscription.Auth);
            // Aquí puedes colocar tu propio correo en <*****@*****.**>
            var VapidDetails =
                new VapidDetails("mailto:[email protected]",
                                 PublicKey, PrivateKey);
            var WebPushClient = new WebPushClient();

            try
            {
                var Payload = JsonSerializer.Serialize(new
                {
                    message,
                    url = $"myorders/{order.OrderId}",
                });
                await WebPushClient.SendNotificationAsync(
                    PushSubscription, Payload, VapidDetails);
            }
            catch (Exception ex)
            {
                Console.Error.WriteLine(
                    $"Error al enviar la notificación push: {ex.Message}");
            }
        }
        public async Task SendNotificationsAsync(string title, string message, string clickUrl)
        {
            var payload = JsonConvert.SerializeObject(new { title, message, url = clickUrl });

            var vapidDetails  = new VapidDetails("mailto:[email protected]", vapidPublicKey, vapidPrivateKey);
            var webPushClient = new WebPushClient();

            foreach (var subscription in PushSubsciptions.GetSubscriptions())
            {
                var pushSubscription = new PushSubscription(subscription.PushEndpoint, subscription.PushP256DH, subscription.PushAuth);
                try
                {
                    await webPushClient.SendNotificationAsync(pushSubscription, payload, vapidDetails);
                }
                catch (WebPushException e)
                {
                    switch (e.StatusCode)
                    {
                    case HttpStatusCode.NotFound:
                    case HttpStatusCode.Gone:
                        PushSubsciptions.RemoveSubscription(subscription);
                        break;
                    }
                }
            }
        }
        public bool Push(string message)
        {
            if (!_healthy)
            {
                _logger.LogError("Service worker not healthy");
                return(false);
            }
            if (_subscription == null)
            {
                _logger.LogWarning("No subscription");
                return(false);;
            }

            var subject = @"mailto:[email protected]";

            var subscription = new PushSubscription(_subscription.endpoint, _subscription.keys.p256dh, _subscription.keys.auth);
            var vapidDetails = new VapidDetails(subject, _publicKey, _privateKey);
            //var gcmAPIKey = @"[your key here]";

            var webPushClient = new WebPushClient();

            try
            {
                webPushClient.SendNotification(subscription, message, vapidDetails);
                //webPushClient.SendNotification(subscription, "payload", gcmAPIKey);
                return(true);
            }
            catch (WebPushException exception)
            {
                _logger.LogError("Http STATUS code" + exception.StatusCode);
                return(false);
            }
        }
示例#13
0
        public async Task <IActionResult> PushTest([FromBody] string testMessage)
        {
            var webPushClient = new WebPushClient();

            webPushClient.SetVapidDetails(_vapidDetails);

            // send test notification
            var payload = new PushNotificationPayload
            {
                Msg  = "Aurelia har falt. Vaktsentralen, ta kontakt å sjekk ut situasjon og meld neste aksjon",
                Icon = "[URL to an image to display in the notification]"
            };

            try
            {
                await webPushClient.SendNotificationAsync(_pushSubscription, JsonConvert.SerializeObject(payload), _vapidDetails);
            }
            catch (WebPushException exception)
            {
                var statusCode = exception.StatusCode;
                return(new StatusCodeResult((int)statusCode));
            }

            return(new OkResult());
        }
示例#14
0
        public async Task <IActionResult> Create([FromBody] PushNotificationSubscription subscription)
        {
            var pushSubscription = new PushSubscription(subscription.Endpoint, subscription.Key, subscription.AuthSecret);
            var vapidDetails     = new VapidDetails(_vapidSettings.Subject, _vapidSettings.PublicKey, _vapidSettings.PrivateKey);

            var webPushClient = new WebPushClient();

            webPushClient.SetVapidDetails(vapidDetails);

            //TODO; store pushsubscription for later use
            _pushSubscription = pushSubscription;
            _vapidDetails     = vapidDetails;

            // send notification
            var payload = new PushNotificationPayload
            {
                Msg  = "Thank you for subscribing",
                Icon = "[URL to an image to display in the notification]"
            };

            try
            {
                await webPushClient.SendNotificationAsync(pushSubscription, JsonConvert.SerializeObject(payload), vapidDetails);
            }
            catch (WebPushException exception)
            {
                var statusCode = exception.StatusCode;
                return(new StatusCodeResult((int)statusCode));
            }

            return(new OkResult());
        }
示例#15
0
        public WebPushPushNotificationService(IOptions <VapidSettings> optionsAccessor)
        {
            _options = optionsAccessor.Value;

            _pushClient = new WebPushClient();
            _pushClient.SetVapidDetails(_options.Subject, _options.PublicKey, _options.PrivateKey);
        }
示例#16
0
        public async Task SendMessage(string roomId, string msg)
        {
            var room = _rooms.GetRoom(roomId);

            room.Message = msg;
            await Clients.OthersInGroup(roomId).SendMessage(msg);

            room.Users.Where(w => w.Subscription != null).ToList().ForEach(user =>
            {
                try
                {
                    var device           = user.Subscription;
                    var pushSubscription = new PushSubscription(device.Endpoint, device.Keys.P256dh, device.Keys.Auth);
                    var vapidDetails     = new VapidDetails("http://fakvat.pl/", "BPbHlo7Z4-5Z_rr-ZKte830jOf6R4tnAS8J0IonjF269gRCdu8cdj9fsRKD9RkxprzgNO-UTFarud7QP94cHJEM", "GSMD4HwHOnybEmYeEQjylLPE3kpcA3WTKpJVd9bOOzA");

                    var webPushClient = new WebPushClient();
                    webPushClient.SendNotification(pushSubscription, msg, vapidDetails);
                }
                catch
                {
                    user.Subscription = null;
                    room.UpdateUser(user);
                }
            });
        }
示例#17
0
        public async Task <IActionResult> SendNotificationAsync([FromBody] SendNotification model)
        {
            var vapidDetails = new VapidDetails(_settings.Subject, _settings.PublicKey, _settings.PrivateKey);

            var webPushClient = new WebPushClient();

            webPushClient.SetVapidDetails(vapidDetails);

            // send notification
            var payload = new PushNotificationPayload
            {
                Title   = "Push Demo Title",
                Body    = "Put some message in the body of the notification.",
                Icon    = "assets/cazton-c.png",
                Vibrate = new List <int> {
                    100, 50, 100
                }
            };

            try
            {
                var subscription = _pushSusbscriptions.GetAll().FirstOrDefault(x => x.Endpoint == model.Endpoint);

                if (subscription != null)
                {
                    await webPushClient.SendNotificationAsync(subscription, JsonConvert.SerializeObject(new { notification = payload }), vapidDetails);
                }
            }
            catch (WebPushException exception)
            {
                var statusCode = exception.StatusCode;
            }

            return(Ok());
        }
示例#18
0
        static void Main(string[] args)
        {
            if (args.Length <= 0)
            {
                return;
            }
            var pushInformation = PushInformation.Load(AppDomain.CurrentDomain.BaseDirectory + "../../../info.xml");              // ASP.NETが保存しているファイルを見ます

            var webPushClient = new WebPushClient();
            var vapidDetails  = new VapidDetails("mailto:[email protected]", pushInformation.VapidPublic, pushInformation.VapipPrivate);
            var targetList    = pushInformation.Targets.ToArray();

            foreach (var target in targetList)
            {
                try
                {
                    var subscription = new PushSubscription(target.EndPoint, target.PublicKey, target.AuthSecret);
                    webPushClient.SendNotification(subscription, @"test application", vapidDetails);
                }
                catch (Exception exp)
                {
                    if (exp.Message == "Subscription no longer valid")                      // 購読者がいなくなるとこんな感じの例外を吐くので送信先から消しておこう
                    {
                        pushInformation.Targets.Remove(target);
                    }
                }
            }
            PushInformation.Save(pushInformation, AppDomain.CurrentDomain.BaseDirectory + "../../../info.xml");
            Console.ReadKey();
        }
示例#19
0
        public ActionResult <string> enviar(string pushEndpoint, string p256dh, string auth)
        {
            var keys = VapidHelper.GenerateVapidKeys();

            // "eC8kA5lfrjc:APA91bHHHh3ikNWPa-614pz7FbWdPvCTn01OvkNuas6m-ilwP-U_VPHLd5QPsjL8W5G8gLquoTJd-jUVRDOziyXvxXoeY8ua2sRvt6GnG8WLpFdOkk7SI8_AxFZnlug4t9FOU7S-XjzH"
            pushEndpoint = @"https://fcm.googleapis.com/fcm/send/" + pushEndpoint;
            //p256dh = @"BAGGIn3MC7LZRCFKuRRSjA28bwQRP7mO_9AEr2l7ety-dtSn7Fcw11-aZu5UCOE0C2gVXVEaWkFLu7PWCR1ufGI";
            //auth = @"VKMl5N1lJomQreFUjKlzeQ";

            var subject    = @"mailto:[email protected]";
            var publicKey  = keys.PublicKey;
            var privateKey = keys.PrivateKey;

            var subscription = new PushSubscription(pushEndpoint, p256dh, auth);
            var vapidDetails = new VapidDetails(subject, publicKey, privateKey);

            var webPushClient = new WebPushClient();

            try
            {
                webPushClient.SendNotification(subscription, "payload", vapidDetails);
            }
            catch (WebPushException exception)
            {
                return(exception.StatusCode.ToString());
            }

            return("OK");
        }
示例#20
0
        public static void Main()
        {
            var pushEndpoint =
                @"https://fcm.googleapis.com/fcm/send/eRoxpie1SyE:APA91bEs-q3RvgOU44dKOqaQDrNAOPQc6BMpn_wdmL0kSWd-ZY6X72LwUDU_0syzcKnU2ymdwFwr0cBAwpTBPT0of9UUVkY3yS_fGrIlflc7x50lV_Ut1N1PjmVy0Vk0wQyZct5tefO9";
            var p256dh = @"BNst5NFg14qt20FjL-npIx-qwSuiLNyzLZQQUBNM2utwIV5cb7DA6zSpxq0-pwjCZK8R217VlwN2VIApmiOQpmY";
            var auth   = @"Bg72WKGBAIHf1-zJ54GzVA";

            var subject    = @"mailto:[email protected]";
            var publicKey  = @"BAINe9-vznpeHcvqae6Zg0i6edR96Whdh65Qp83FQnifTVTL2jP5oL7Q4Edvq9V1rdCFqnktRQ0vhwN-z-trfJ8";
            var privateKey = @"oVSUyM7AxK4bcCiSZpUg5Yqtb4zb5xJ5G9p3iX0C8_s";

            var subscription = new PushSubscription(pushEndpoint, p256dh, auth);
            var vapidDetails = new VapidDetails(subject, publicKey, privateKey);


            var webPushClient = new WebPushClient();

            try
            {
                webPushClient.SendNotification(subscription, "{ \"data\":{\"title\": \"hello\", \"content\": \"Euristiq\"}}", vapidDetails);
                //webPushClient.SendNotification(subscription, "payload", gcmAPIKey);
            }
            catch (WebPushException exception)
            {
                Console.WriteLine("Http STATUS code" + exception.StatusCode);
            }
        }
示例#21
0
        private void NotifyUser(int topicId)
        {
            var vapidDetails = new VapidDetails(
                @"mailto:[email protected]",
                "BIzudo5gPnMUVAhQrTRDEuIMPOLwtIInO-KHrukWLkguSyCyKNrYnaHr36_zK4bfvJ5hMxu7HFWlAr0n579-tbE",
                "eCB1JO4enyxjbeXxzMbTDiYHVhJeeweq3hWMXkOHliU");

            var subscriptions = SubRepository.Items;
            var topic         = Repository.Get(topicId);

            var payload = JsonConvert.SerializeObject(
                new
            {
                topic = new { title = topic.Title, id = topic.Id }
            });

            var webPushClient = new WebPushClient();

            foreach (var subscription in subscriptions.Select(s => new PushSubscription(s.Endpoint, s.Keys.P256dh, s.Keys.Auth)))
            {
                try
                {
                    webPushClient.SendNotification(subscription, payload, vapidDetails);
                }
                catch (Exception)
                {
                }
            }
        }
示例#22
0
        public async Task <IActionResult> Send(int id)
        {
            string userEmail = User.FindFirst("email")?.Value ?? "NoUser";

            // Todo: Replace with role based access
            if (userEmail.ToUpper() != Constants.AdminEmail.ToUpper())
            {
                return(RedirectToAction("Index", "Home"));
            }

            var payload = Request.Form["payload"];
            var device  = await _context.PushDevices.SingleOrDefaultAsync(m => m.Id == id);

            string vapidPublicKey  = _configuration["VapidPublicKey"];
            string vapidPrivateKey = _configuration["VapidPrivateKey"];

            var pushSubscription = new PushSubscription(device.PushEndpoint, device.PushP256DH, device.PushAuth);
            var vapidDetails     = new VapidDetails("mailto:" + Constants.SupportEmail, vapidPublicKey, vapidPrivateKey);

            var webPushClient = new WebPushClient();

            webPushClient.SendNotification(pushSubscription, payload, vapidDetails);

            return(View());
        }
示例#23
0
        public void SendNotification(IContactNotificationSubscription subscription, INotification notification)
        {
            IPushKeySetProvider keyProvider = Factory.KeySetProvider();

            var pushSubscription = new PushSubscription(subscription.Endpoint, subscription.P256dh, subscription.AuthorizationToken);

            var vapidDetails = new VapidDetails(notification.Subject, keyProvider.PublicKey, keyProvider.PrivateKey);

            var webPushClient = new WebPushClient();

            try
            {
                string message = string.Format("{{ \"body\":\"{0}\", \"title\":\"{1}\", \"icon\":\"{2}\", \"badge\":\"{3}\" }}",
                                               notification.Body,
                                               notification.Title,
                                               notification.Icon,
                                               notification.Badge
                                               );
                webPushClient.SendNotificationAsync(pushSubscription, message, vapidDetails);
                //webPushClient.SendNotification(subscription, "payload", gcmAPIKey);
            }
            catch (WebPushException exception)
            {
                Console.WriteLine("Http STATUS code" + exception.StatusCode);
            }
        }
        private static async Task SendNotificationAsync(Order order, NotificationSubscription subscription, string message)
        {
            // For a real application, generate your own
            var publicKey  = "BLC8GOevpcpjQiLkO7JmVClQjycvTCYWm6Cq_a7wJZlstGTVZvwGFFHMYfXt6Njyvgx_GlXJeo5cSiZ1y4JOx1o";
            var privateKey = "OrubzSz3yWACscZXjFQrrtDwCKg-TGFuWhluQ2wLXDo";

            var pushSubscription = new PushSubscription(subscription.Url, subscription.P256dh, subscription.Auth);
            var vapidDetails     = new VapidDetails("mailto:<*****@*****.**>", publicKey, privateKey);
            var webPushClient    = new WebPushClient();

            try
            {
                var payload = JsonSerializer.Serialize(new
                {
                    message,
                    url = $"myorders/{order.OrderId}"
                });

                await webPushClient.SendNotificationAsync(pushSubscription, payload, vapidDetails);
            }
            catch (Exception e)
            {
                Console.Error.WriteLine("Error sending push notification: " + e.Message);
            }
        }
示例#25
0
        public async Task <IActionResult> CallShooter(CallShooterRequest request)
        {
            // For a real application, generate your own
            var currentUserId = PlatformUtils.GetIdentityUserId(User);
            var existingUser  = AuthorizationLayer.GetUserById(currentUserId);

            if (existingUser == null)
            {
                return(NotFound());
            }

            var subscriptions = BasicLayer.FetchNotificationSubscriptionsByUserId(request.ShooterId);

            var vapidDetails = new VapidDetails($"mailto:{_vapidUser}", _publicKey, _privateKey);


            var pushSubscriptions = subscriptions.Select(x => new PushSubscription(x.Url, x.P256dh, x.Auth)).ToList();
            var webPushClient     = new WebPushClient();

            try
            {
                var message = string.Empty;
                switch ((int)request.Context)
                {
                case (int)CallShooterContextEnum.MatchDirector:
                    var userStage = BasicLayer.GetSOStage(request.MatchId, existingUser.Id);
                    message = $"{existingUser.FirstName} {existingUser.LastName} ti sta cercando allo stage {userStage.Index}:{userStage.Name}!";
                    break;

                default:
                    message = $"{existingUser.FirstName} {existingUser.LastName} ti sta cercando!";
                    break;
                }
                var payload = JsonSerializer.Serialize(new
                {
                    message,
                    url = string.Empty,
                });
                if (pushSubscriptions.Count == 0)
                {
                    return(Ok(new OkResponse {
                        Status = false, Errors = new List <string> {
                            "NoSubscriptions"
                        }
                    }));
                }
                var tasks = pushSubscriptions.Select(pushSubscription => webPushClient.SendNotificationAsync(pushSubscription, payload, vapidDetails)).ToList();
                await Task.WhenAll(tasks);

                return(Ok(new OkResponse()
                {
                    Status = true
                }));
            }
            catch (Exception ex)
            {
                Console.Error.WriteLine("Error sending push notification: " + ex.Message);
                return(Ok(ex));
            }
        }
示例#26
0
        public async Task <IActionResult> Send(int id)
        {
            var payload       = Request.Form["payload"];
            var subscriptions = await _context.PushSubscriptions.ToListAsync();

            string vapidPublicKey  = _configuration.GetSection("VapidKeys")["PublicKey"];
            string vapidPrivateKey = _configuration.GetSection("VapidKeys")["PrivateKey"];

            foreach (var subscription in subscriptions)
            {
                if (subscription.PushAuth == null || subscription.PushEndpoint == null || subscription.PushP256DH == null)
                {
                }
                else
                {
                    var pushSubscription = new PushSubscription(subscription.PushEndpoint, subscription.PushP256DH, subscription.PushAuth);
                    var vapidDetails     = new VapidDetails("mailto:[email protected]", vapidPublicKey, vapidPrivateKey);

                    var webPushClient = new WebPushClient();
                    webPushClient.SendNotification(pushSubscription, payload, vapidDetails);
                }
            }


            return(View());
        }
示例#27
0
        public async Task EnviarNotificacionNuevoPedido(Pedido pedido)
        {
            var notificaciones = await _context.Notificaciones.ToListAsync();

            var llavePublica = _configuration.GetValue <string>("Notificaciones:publicKey");
            var llavePrivada = _configuration.GetValue <string>("Notificaciones:privateKey");
            var email        = _configuration.GetValue <string>("Notificaciones:email");
            var vapidDetails = new VapidDetails(email, llavePublica, llavePrivada);

            foreach (var notificacion in notificaciones)
            {
                var pushSubscription = new PushSubscription(notificacion.URL, notificacion.P256dh,
                                                            notificacion.Auth);
                var webPushClient = new WebPushClient();

                try
                {
                    var payload = JsonSerializer.Serialize(new
                    {
                    });
                    await webPushClient.SendNotificationAsync(pushSubscription, payload, vapidDetails);
                }
                catch (Exception exception)
                {
                    Console.Write(exception.Message);
                }
            }
        }
        public void action(PushExample.Models.Entities.ClientInformation e, string message)
        {
            //var pushEndpoint = @"https://fcm.googleapis.com/fcm/send/elpgb-hTYfE:APA91bEbOObMfgrR2nc-kjfhm1iQscT6hcqGFDXn_IGYFMs5n5KCGIclzMAC_WZDbA34om0Ub9sqyhR1i_3Y0BQPhiZp1CnDWjTr74exx8wJp8KBFbMWhlzNWQJ3zA3LkM8rm2ZkQCjS";
            //var p256dh = @"BASOQRL625ssxHi4QiPRy-Tu9dih25IcVECTGfWqIIROwpq3xsWuwN3bpX3zWF_rv-jSCG08rkv4M2uAhYUnJSQ=";
            //var auth = @"Y6tPjfsSmb8aUPdNaJzBXA==";

            var subject    = @"mailto:[email protected]";
            var publicKey  = @"BD8r6N3kP4649YLBtRfaLn4rMPxSyMVUsE7sbE3acIlgk51SximXV2SlT8_TWpU5DYKBuFD8ZeZQyi0yS85Q4FY";
            var privateKey = @"z4wKrFkzEj-XQPpqPCZwaYsLQwctAzJHkbi2UykduLg";

            var subscription = new PushSubscription(e.pushEndpoint, e.p256dh, e.auth);
            var vapidDetails = new VapidDetails(subject, publicKey, privateKey);
            //var gcmAPIKey = @"[your key here]";

            var webPushClient = new WebPushClient();

            try
            {
                webPushClient.SendNotification(subscription, message, vapidDetails);
                //webPushClient.SendNotification(subscription, "payload", gcmAPIKey);
            }
            catch (WebPushException exception)
            {
                Console.WriteLine("Http STATUS code" + exception.StatusCode);
            }
        }
示例#29
0
        public async Task <bool> Post([FromBody] PushNotificationModel subscription)
        {
            try
            {
                var pushSubscription = new PushSubscription(subscription.Endpoint, subscription.Key, subscription.AuthSecret);
                var vapidDetails     = new VapidDetails("http://localhost:50973/forum", "BAdnuHOxwOFm_GV_NYG1CZOjddlrVfDbKobDFTTxQvgcGBhPI47gkxfEUdtgX2iO_x4PwUkyj-xS7Uke_UmIaqQ",
                                                        "vrRVfvxyx4kIEYSfansI_eOI4a-HdTCJpa0EVmjLYnE");

                ForumPostSubscriptions.AddSubscription(pushSubscription);

                var webPushClient = new WebPushClient();
                webPushClient.SetVapidDetails(vapidDetails);

                var payload = new PushNotificationPayload
                {
                    Msg  = "Thank you for subscribing",
                    Icon = "C:/Temp/icon192x192.png",
                };
                string temp = JsonConvert.SerializeObject(payload);

                //await webPushClient.SendNotificationAsync(pushSubscription, temp, );
                await webPushClient.SendNotificationAsync(pushSubscription, temp, vapidDetails);

                return(true);
            }
            catch (Exception ex)
            {
                return(false);
            }
        }
示例#30
0
        public async Task <IActionResult> OnPostAsync()
        {
            if (!ModelState.IsValid)
            {
                return(Page());
            }

            _context.Items.Add(Item);

            await _context.SaveChangesAsync();

            //use your own private and public key:
            //generator here: https://web-push-codelab.glitch.me/
            var vapidDetails = new VapidDetails(@"<youremail>",
                                                "<publickey>",
                                                "<privatekey>");

            var pushSubscriptions = await _context.PushSubscriptions.ToListAsync();

            var webPushClient = new WebPushClient();

            var tasks = new List <Task>();

            foreach (var pushSubscription in pushSubscriptions)
            {
                var webPushSubscription = new WebPush.PushSubscription(pushSubscription.EndPoint, pushSubscription.P256dh, pushSubscription.Auth);

                tasks.Add(webPushClient.SendNotificationAsync(webPushSubscription, "test", vapidDetails));
            }

            await Task.WhenAll(tasks);

            return(RedirectToPage("./Index"));
        }