Мы использовали 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();
}
}
}
}
}