Получение push-уведомлений дважды - PullRequest
0 голосов
/ 15 сентября 2018

Мы использовали Firebase для отправки push-уведомлений в течение нескольких месяцев в нашем приложении, и я использовал его в других своих приложениях.Все прошло хорошо, но неделю назад мы начали получать дубликаты уведомлений (не всегда).Странно то, что мы не изменили ни один код, это только начало происходить как в Android, так и в iOS.Это случается иногда не всегда, и только у некоторых пользователей / устройств.

Я хочу знать, проходит ли кто-то еще через Firebase.Я думаю, что это ошибка Firebase, но я хотел бы посмотреть, может ли кто-нибудь подтвердить что-то об этом.

Приложение ios сделано в быстром режиме, а приложение Android в Java.

Кстати.Мы отправляем его на основе этого с FCM в нашем бэкэнде.И у нас нет дублированных тем.Я проверил, и устройства подписаны только один раз.

https://fcm.googleapis.com/fcm/send

Content-Type:application/json
Authorization:key=AIzaSyZ-1u...0GBYzPu7Udno5aA
{
  "to": "/topics/foo-bar",
  "data": {
    "message": "This is a Firebase Cloud Messaging Topic Message!",
   }
}

Здесь мой код c # в нашем бэкэнде для отправки уведомлений

public void sendPushNotification(string _title, string _message, string _topic, object customData = null)
    {
        var requestUri = "https://fcm.googleapis.com/fcm/send";

        WebRequest webRequest = WebRequest.Create(requestUri);
        webRequest.Method = "POST";
        webRequest.Headers.Add(string.Format("Authorization: key={0}", FCM_SERVER_API_KEY));
        webRequest.Headers.Add(string.Format("Sender: id={0}", FCM_SENDER_ID));
        webRequest.ContentType = "application/json";

        var data = new
        {
            to = "/topics/" + _topic, // this is for topic 
            notification = new
            {
                title = _title,
                body = _message,
                sound = "default"
            },
            data = customData, //custom data (got it from firebase documentation)
            content_available = true 
        };

        var serializer = new JavaScriptSerializer();
        var json = serializer.Serialize(data);
        Byte[] byteArray = Encoding.UTF8.GetBytes(json);
        webRequest.ContentLength = byteArray.Length;
        using (Stream dataStream = webRequest.GetRequestStream())
        {
            dataStream.Write(byteArray, 0, byteArray.Length);

            using (WebResponse webResponse = webRequest.GetResponse())
            {
                using (Stream dataStreamResponse = webResponse.GetResponseStream())
                {
                    using (StreamReader tReader = new StreamReader(dataStreamResponse))
                    {
                        String sResponseFromServer = tReader.ReadToEnd();
                    }
                }
            }
        }
    }
...