public async Task Unsubscribe(string topic, string token)
        {
            if (bool.Parse(_settingsKeeper.GetSetting("EnableFcm").Value))
            {
                var request = new TopicManagementRequest
                {
                    RegistrationTokens = new[] { token },
                    Topic = $"/topics/{topic}"
                };

                await _fcmClient.UnsubscribeFromTopic(request);
            }
        }
Beispiel #2
0
        public async Task SubscribeAsync(ApplicationUser user, Topic topic, CancellationToken cancellationToken = default(CancellationToken))
        {
            using (var context = factory.Create())
            {
                var registrationTokens = await context.DbSet <UserRegistration>()
                                         .Where(x => x.User == user)
                                         .Where(x => x.DeactivationDate == null)
                                         .Select(x => x.RegistrationToken)
                                         .ToArrayAsync(cancellationToken);

                var topicManagementRequest = new TopicManagementRequest
                {
                    Topic = topic.Name,
                    RegistrationTokens = registrationTokens
                };

                await client.SubscribeToTopic(topicManagementRequest, cancellationToken);
            }
        }
Beispiel #3
0
        private async Task <TopicManagementResponse> SendAsync(string path, TopicManagementRequest request, CancellationToken cancellationToken)
        {
            if (request == null)
            {
                throw new ArgumentNullException("request");
            }

            // Build the URL:
            string url = $"https://iid.googleapis.com/{path}";

            // Construct the HTTP Message:
            HttpRequestMessageBuilder httpRequestMessageBuilder = new HttpRequestMessageBuilder(url, HttpMethod.Post)
                                                                  // Add Option to use the Access Token Auth Header:
                                                                  .AddHeader("access_token_auth", "true")
                                                                  // Add the Serialized Request Message:
                                                                  .SetStringContent(serializer.SerializeObject(request), Encoding.UTF8, MediaTypeNames.ApplicationJson);

            try
            {
                return(await httpClient
                       .SendAsync <TopicManagementResponse>(httpRequestMessageBuilder, cancellationToken)
                       .ConfigureAwait(false));
            }
            catch (FcmHttpException exception)
            {
                // Get the Original HTTP Response:
                var response = exception.HttpResponseMessage;

                // Read the Content:
                var content = await response.Content
                              .ReadAsStringAsync()
                              .ConfigureAwait(false);

                // Parse the Error:
                var error = serializer.DeserializeObject <TopicMessageResponseError>(content);

                // Throw the Exception:
                throw new FcmTopicManagementException(error, content);
            }
        }
Beispiel #4
0
 public Task <TopicManagementResponse> UnsubscribeFromTopic(TopicManagementRequest request, CancellationToken cancellationToken = new CancellationToken())
 {
     return(Task.FromResult(new TopicManagementResponse()));
 }
Beispiel #5
0
        public Task <TopicManagementResponse> UnsubscribeFromTopic(TopicManagementRequest request, CancellationToken cancellationToken = default(CancellationToken))
        {
            string iidUnsubscribePath = "iid/v1:batchRemove";

            return(SendAsync(iidUnsubscribePath, request, cancellationToken));
        }
Beispiel #6
0
        public Task <TopicManagementResponse> SubscribeToTopic(TopicManagementRequest request, CancellationToken cancellationToken = default(CancellationToken))
        {
            string iidSubscribePath = "iid/v1:batchAdd";

            return(SendAsync(iidSubscribePath, request, cancellationToken));
        }