Example #1
0
        // 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()}
        }
Example #2
0
        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}"));
        }
Example #3
0
 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
             },
         });
     }
 }
Example #5
0
        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);
            }
        }
Example #6
0
        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);
        }
Example #8
0
        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);
            }
        }
Example #9
0
 public ForValidInput()
 {
     _fcmResponse = new FcmResponse {
         Results = new List <FcmResponseResult>()
     };
 }