// GET: /<controller>/ public async Task <IActionResult> Index() { var httpClient = new HttpClient(); FcmSettings settings = new FcmSettings(); settings.SenderId = "557535861881"; settings.ServerKey = "AAAAgc-6HHk:APA91bGGjo4Xld7-Lg0vRTcORTZWKFIwZaTZnmw4fr21pgusvwobvSCjzUSjj7-7JlaIcQr2GDNptWZQKe5oWuopgkgpmH-aOHe9_Q9eKUHGgUIMhLPJhEtrq-jHPIyDpBLHmWp2tTf8"; var fcm = new FcmSender(settings, httpClient); var notification = new GoogleNotification { Data = new GoogleNotification.DataPayload { ExperienceId = "@choby/seekit24", Message = "安卓测试消息 🆚" }, Priority = "high" }; string deviceToken = "fQVPgfq8TZKrltAwHSB-WI:APA91bFWh5E5PKp_8fdjlkkeE7K6xjoA9CH9Dll-nJBvPwnKDcsNnH2Py5Gf5T7SMna4X0D35_tA8a32ytB29nApEei4Kx78pIsk7md6xfBh-_JffilmRZQSR179e2pc8pbZs4T78ocp"; FcmResponse response = await fcm.SendAsync(deviceToken, notification); // await fcm.SendAsync(); return(Content($"android push result:"));//{response.IsSuccess().ToString()} }
private static async Task <NotificationResult> GetErrorResult(HttpResponseMessage response) { var content = await response.Content.ReadAsStringAsync(); FcmResponse fcmResponse = TryGetFcmResponse(content); NotificationErrorCode errorCode = GetErrorCodeFromResponse(fcmResponse); return(NotificationResult.WithError(errorCode, $"{response.StatusCode}:{fcmResponse?.Error.Message}; Details: {content}")); }
private IEnumerable <string> FindFailedTokens(FcmResponse response, string[] tokensArray) { for (var i = 0; i < response.Results.Count(); i++) { if (!string.IsNullOrWhiteSpace(response.Results.ElementAt(i).Error)) { yield return(tokensArray[i]); } } }
public async Task SendPushNotificationAsync(IEnumerable <string> deviceTokens, Notification notification) { using var fcm = new FcmSender(_firebaseNotification.ServerKey, _firebaseNotification.SenderId); foreach (string token in deviceTokens) { FcmResponse fcmResponse = await fcm.SendAsync(token, new { notification = new { title = notification.Title, body = notification.Message, click_action = notification.Url }, }); } }
private static NotificationErrorCode GetErrorCodeFromResponse(FcmResponse fcmResponse) { switch (fcmResponse?.Error.ErrorStatus) { case FcmErrorStatus.InvalidArgument: return(NotificationErrorCode.BadRequest); case FcmErrorStatus.Unauthenticated: return(NotificationErrorCode.AccessDenied); case FcmErrorStatus.NotFound: return(NotificationErrorCode.InvalidDeviceToken); default: return(NotificationErrorCode.Unspecified); } }
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); } }
public async Task <FcmSendResult> SendNotifyAsync(Message message) { if (message == null) { throw new ArgumentNullException(nameof(message)); } var sendResults = new List <FcmSendResult>(); var sender = new FcmSender(_fcmServerKey, _fcmSenderId); // Create an FCM message to send var fcmMessage = new FcmMessage { Priority = FcmPriority.High, DryRun = true, To = message.Address, Notification = new FcmNotification { Title = "General", Body = message.MessageBody } }; FcmResponse response = null; try { // Send message to the FCM server response = await sender.Send(fcmMessage); } catch (WebException we) { if (we.Response != null) { using (StreamReader reader = new StreamReader(we.Response.GetResponseStream())) { string error = reader.ReadToEnd(); // Set failed status for the message return(new FcmSendResult { Error = error, Address = message.Address, Status = FcmSendStatus.Failed }); } } } catch (SystemException ex) { // Set failed status for the message return(new FcmSendResult { Error = ex.Message, Address = message.Address, Status = FcmSendStatus.Failed }); } // Create result objects from fcm result var sendResult = new FcmSendResult { MessageId = message.MessageId, Address = message.Address }; if (response.Results != null) { sendResult.Error = response.Results.FirstOrDefault().Error ?? ""; } sendResult.Status = response.Success > 0 ? FcmSendStatus.Sent : FcmSendStatus.Pending; return(sendResult); }
private IFcmResponse Send(FcmMessage message) { var serverKey = "AAAApwd-cXg:APA91bFnj-d7c8EPGCB-SogyV-60O12GIrXj1QGJ6QgIelDzJJxaH9P3i6qVM12tRiesUmh1km_FrVswkOb7jdoRhXFK6E2RtUSFEX-22zcRDb_9nZxgC4oAXJDu23z1HUD25Lkg-Qti"; var fcmResponse = new FcmResponse(); var request = (HttpWebRequest)WebRequest.Create("https://fcm.googleapis.com/fcm/send"); request.Method = "POST"; request.Headers.Add("Authorization", "key=" + serverKey); request.ContentType = "application/json"; var json = JsonConvert.SerializeObject(message); var byteArray = Encoding.UTF8.GetBytes(json); request.ContentLength = byteArray.Length; //Write data to stream using (var dataStream = request.GetRequestStream()) { dataStream.Write(byteArray, 0, byteArray.Length); } using (var response = (HttpWebResponse)request.GetResponseWithoutException()) { //Evaluate Response var statusCode = (int)response.StatusCode; fcmResponse.ErrorCode = statusCode; if (statusCode >= 500 && statusCode <= 599) { fcmResponse.ErrorMessage = ParseStringResponse(response); fcmResponse.Error = ResponseError.InternalServerError; } else { switch (statusCode) { case 401: fcmResponse.ErrorMessage = ParseStringResponse(response); fcmResponse.Error = ResponseError.AuthenticationError; break; case 400: fcmResponse.ErrorMessage = ParseStringResponse(response); fcmResponse.Error = ResponseError.InvalidJson; break; case 200: fcmResponse.ResponseMessage = ParseMessageResponse(response); fcmResponse.Error = ResponseError.NoError; break; default: break; } } return(fcmResponse); } }
public ForValidInput() { _fcmResponse = new FcmResponse { Results = new List <FcmResponseResult>() }; }