Текущее поведение: пользователь A отправляет еще одно сообщение userB, уведомление запускается, когда приложение находится в фоновом режиме, номер значка увеличивается по мере того, как все больше сообщений вызывают уведомление.Пользователь B открывает уведомление, значение значка устанавливается на 0 и минимизирует приложение.Пользователь A отправляет другое сообщение пользователю B, пока приложение userB находится в фоновом режиме, значение значка не сбрасывается до 1, вместо этого оно продолжается с последнего накопленного значения.
Требуемое поведение: при увеличении значения значка от 1, когда пользователь B получаетновые уведомления вместо увеличения последнего накопленного значения значка уведомления.
Далее: я проверил полезную нагрузку firebase, похоже, что полезная нагрузка отправляет накопленное значение и не сбрасывает значение после того, как userB уже установил значение в 0сторона клиента.
Облачные функции ниже:
const functions = require('firebase-functions');
const admin = require('firebase-admin');
admin.initializeApp(functions.config().firebase);
var badgeCount = 1;
exports.sendNotification = functions.database.ref('/Notifications/Messages/{pushId}').onWrite((change,context) => {
console.log('Push notification event triggered for testing');
console.log(change);
const message = change.after.val();
const senderUid = message.Sender;
const receiverUid = message.SendTo;
const chatMessage = message.Message;
const senderName = message.SenderName;
console.log(receiverUid);
const promises = [];
console.log('notifying ' + receiverUid + ' about ' + chatMessage + ' from ' + senderUid);
const payload = {
notification: {
title: senderName,
body: chatMessage,
badge: badgeCount.toString(),
sound: "default"
}
};
badgeCount++;
return admin
.database()
.ref("fcmToken").child(receiverUid)
.once("value")
.then(allToken => {
if (allToken.val()) {
const token = Object.keys(allToken.val());
console.log(`token? ${token}`);
return admin
.messaging()
.sendToDevice(token, payload)
.then(response => {
return null;
});
}
return null;
});
});
Внутри приложения проектаДелегатация приложенияDidBecomeActive и applicationWillEnterForeground.
UIApplication.shared.applicationIconBadgeNumber = 0