public async Task <IActionResult> Create( [HttpTrigger(AuthorizationLevel.Function, "post", Route = "AndroidTokens")] [RequestBodyType(typeof(AndroidToken), "Criar um novo token")] HttpRequest request, ILogger logger) { try { AndroidTokenRepository androidTokenRepository = new AndroidTokenRepository(); string requestBody = await new StreamReader(request.Body).ReadToEndAsync(); var input = JsonConvert.DeserializeObject <AndroidToken>(requestBody); input.ApplicationId = 2; var validator = new AndroidTokenValidator(); var validationResult = validator.Validate(input); if (!validationResult.IsValid) { return(new BadRequestObjectResult(validationResult.Errors.Select(e => new { Field = e.PropertyName, Error = e.ErrorMessage }))); } var notification = await androidTokenRepository.GetNotificationByKey(input.Id, input.CompanyId, input.UserId, input.ApplicationId); if (notification != null) { if (notification.DeletedAt != null) { notification.DeletedAt = null; await androidTokenRepository.UpdateNotification(notification); } return(new OkResult()); } else if (await androidTokenRepository.CreateNotification(input) == 1) { return(new OkResult()); } return(new BadRequestObjectResult("Token não foi gravado, favor enviar os dados corretamente.")); } catch (Exception ex) { logger.LogError(ex.Message); return(new BadRequestObjectResult(ex.Message)); } }
public async Task <IActionResult> Create( [HttpTrigger(AuthorizationLevel.Function, "post", Route = "v1/AndroidTokens")] [RequestBodyType(typeof(AndroidToken), "Criar um novo token")] HttpRequest request, ILogger logger) { try { var form = await request.GetJsonBody <AndroidToken, AndroidTokenValidator>(); if (!form.IsValid) { logger.LogInformation($"Invalid form data."); return(form.ToBadRequest()); } var input = form.Value; AndroidTokenRepository androidTokenRepository = new AndroidTokenRepository(); var notification = await androidTokenRepository.GetNotificationByKey(input.Id, input.CompanyId, input.UserId, input.ApplicationId); if (notification != null) { if (notification.DeletedAt != null) { notification.DeletedAt = null; await androidTokenRepository.UpdateNotification(notification); } return(new OkResult()); } else if (await androidTokenRepository.CreateNotification(input) == 1) { return(new OkResult()); } return(new BadRequestObjectResult("Token não foi gravado, favor enviar os dados corretamente.")); } catch (Exception ex) { logger.LogError(ex.Message); return(new BadRequestObjectResult(ex.Message)); } }
private async Task SendPushAndroidAsync(AndroidNotification androidNotification, Notification notification, AndroidToken androidToken, object data, AndroidTokenRepository androidTokenRepository) { dynamic model = new ExpandoObject(); if (data != null) { model = data; model.UserId = androidToken.UserId; model.CompanyId = androidToken.CompanyId; } //Analisar necessidade de setar a messagem em mais atributos //string alert; string body = notification.Message; string title = notification.Title; string to = androidNotification.TokenId; //int badge = 1; //string sound = "default"; //string vibrate = "true"; // Get the server key from FCM console var serverKey = string.Format("key={0}", Config.GetEnvironmentVariable("Firebase_ServerKey")); // Get the sender id from FCM console var senderId = string.Format("id={0}", Config.GetEnvironmentVariable("Firebase_SenderId")); object payLoad; if (data is null) { payLoad = new { to, notification = new { title, body } }; } else { payLoad = new { to, notification = new { title, body }, data = new { model } }; } var client = new RestClient("https://fcm.googleapis.com/fcm/send"); var request = new RestSharp.RestRequest(Method.POST); IRestResponse response; request.JsonSerializer = new NewtonsoftJsonSerializer(); request.RequestFormat = DataFormat.Json; request.AddHeader("Authorization", serverKey); request.AddHeader("Sender", senderId); request.AddHeader("Content-Type", "application/json"); request.AddJsonBody(payLoad); response = client.Execute(request); try { FcmResponse resposta = new FcmResponse(); resposta = JsonConvert.DeserializeObject <FcmResponse>(response.Content); if (resposta.Results != null && resposta.Results.Count() > 0) { androidNotification.Message_Id = resposta.Results.FirstOrDefault().Message_id; } androidNotification.Multicast_Id = resposta.Multicast_id; androidNotification.Success = resposta.Success; if (androidNotification.Success == 0) { try { androidToken.DeletedAt = DateTime.UtcNow; await androidTokenRepository.UpdateNotification(androidToken); } catch { } } } catch (Exception) { androidToken.DeletedAt = DateTime.UtcNow; await androidTokenRepository.UpdateNotification(androidToken); } }