Как сбросить номер значка для значка приложения с помощью полезной нагрузки уведомлений облачной функции Firebase? - PullRequest
0 голосов
/ 26 февраля 2019

Текущее поведение: пользователь 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

Ответы [ 2 ]

0 голосов
/ 26 февраля 2019

Три части для решения вашей проблемы с учетом базы данных

1.) Создайте поле, сопоставленное с конкретным пользователем в вашей базе данных, которое отслеживает количество уведомлений.

2.) Реализация логики на клиенте для обновления поля уведомлений в БД на основе действий пользователя

3.) Обработка обновления номера значка на клиенте

0 голосов
/ 26 февраля 2019

Находясь в приложении, didbecomeactive Я использую UIApplication.shared.applicationIconBadgeNumber = 0, чтобы сбросить его до 0 при открытии приложения.

Это нормально для сброса счетчика значков.но,

Однако при следующей отправке уведомления значение значка снова начинается с предыдущего увеличенного значения, например (5) вместо 1. Может ли кто-нибудь объяснить / помочь, что здесь происходит??

Здесь вы не можете обновить счетчик значков со стороны приложения при получении push-уведомления.

iOS автоматически обновляет счетчик значков на значке приложения при получении push-уведомления со значением «badge»параметр push-уведомления полезной нагрузки.Таким образом, в настоящее время вы, кажется, отправляете одинаковое значение для «значка» во всех уведомлениях.Итак, если вы отправляете «значок» значение «5».каждый раз значение значка будет обновляться как «5».

, поэтому вам нужно отправить правильное значение значка в полезную нагрузку уведомления из функции firebase.

вы можете обратиться к этой документации Google для получения более подробной информации.о параметре "значок" .: https://firebase.google.com/docs/cloud-messaging/http-server-ref#notification-payload-support

...