public async Task CreateOrUpdatePushSubscriptionAsync(PushSubscriptionRequest request)
        {
            Ensure.That(request, nameof(request)).IsNotNull();

            await DeleteRegistrationsForDeviceAsync(request.DeviceHandle);
            await CreateRegistrationAsync(request);
        }
        public async Task SubscribeUserTest()
        {
            var userId  = Guid.NewGuid().ToString();
            var token   = Guid.NewGuid().ToString();
            var userTag = TagHelper.GetUserTag(userId);
            var store   = new Mock <ISettingsDataStore>();

            store.Setup(x => x.DoesExistAsync(It.Is <string>(s => s == userId)))
            .ReturnsAsync(true);

            PushSubscriptionRequest request = null;
            var subscriber = new Mock <IPushNotificationSubscriber>();

            subscriber.Setup(x => x.CreateOrUpdatePushSubscriptionAsync(It.IsAny <PushSubscriptionRequest>()))
            .Callback <PushSubscriptionRequest>((dto) => request = dto)
            .Returns(Task.CompletedTask);

            var service = new PushNotificationSubscriptionService(store.Object, subscriber.Object);
            await service.CreateOrUpdateSubscriptionAsync(new PushDeviceRequest(DevicePlatform.Android, token) { UserId = userId });

            store.Verify(x => x.DoesExistAsync(userId), Times.Once);
            subscriber.Verify(x => x.CreateOrUpdatePushSubscriptionAsync(request), Times.Once);

            Assert.Equal(new[] { userTag }, request.Tags);
            Assert.Equal(token, request.DeviceHandle);
            Assert.Equal((int)DevicePlatform.Android, (int)request.Platform);
        }
Example #3
0
        public Task SendMessageAsync(PushSubscriptionRequest request, CancellationToken cancel)
        {
            CheckInit();
            var topic = GetRedisTopic(request.Topic);

            _channel.Dispatch("subscribe @topic", new { topic });
            return(Task.FromResult <Object>(null));
        }
Example #4
0
        public async Task <ActionResult <SubscriptionDto> > Subscribe([FromBody] PushSubscriptionRequest request)
        {
            var subscription = new SubscriptionDto
            {
                Endpoint       = request.Subscription.Endpoint,
                ExpirationTime = request.Subscription.ExpirationTime,
                Auth           = request.Subscription.Keys.Auth,
                P256Dh         = request.Subscription.Keys.P256Dh
            };

            return(await _pushService.Subscribe(subscription, _userContextService.GetCurrentUser().Id));
        }
        private async Task CreateRegistrationAsync(PushSubscriptionRequest deviceUpdate)
        {
            var registration = PushRegistrationsFactory.CreateTemplateRegistration(deviceUpdate);

            try
            {
                await _hub.CreateRegistrationAsync(registration);
            }
            catch (MessagingException e)
            {
                throw new PushNotificationException("Error while trying to create device token registration in notification hub", e);
            }
        }
        public static RegistrationDescription CreateTemplateRegistration(PushSubscriptionRequest subscription)
        {
            switch (subscription.Platform)
            {
            case PushPlatformEnum.iOS:
                return(new AppleTemplateRegistrationDescription(subscription.DeviceHandle, iOSTemplate, new HashSet <string>(subscription.Tags)));

            case PushPlatformEnum.Android:
                return(new FcmTemplateRegistrationDescription(subscription.DeviceHandle, androidTemplate, new HashSet <string>(subscription.Tags)));

            default:
                throw new NotSupportedException($"Unsupported platform '{subscription.Platform}'");
            }
        }
Example #7
0
 public IActionResult Post([FromBody] PushSubscriptionRequest subscriptionRequest)
 {
     _webPushService.Create(1, subscriptionRequest.Endpoint, subscriptionRequest.P256dh,
                            subscriptionRequest.Auth);
     return(new OkResult());
 }