Количество бейджей всегда один (облачная функция)

Я отправил уведомление из облачной функции, если узел успешно изменился в firebase, но номер значка всегда отображается (1), даже если я отправляю несколько уведомлений.

мой код в облачной функции (машинописный текст):

import * as functions from 'firebase-functions';
import admin = require('firebase-admin');
admin.initializeApp();
exports.sendPushNotificationToUpdate = functions.database.ref('/orders/{Id}/OrderStatus').onWrite((snapshot, context) => {
    let status = snapshot.after.val();
    console.log('status : ' + status);
    if (status != 'Done' && status != 'Rejected') {
        return null;
    }

    else {
        const Id = context.params.Id;

        console.log('id : ' + Id);

        return admin.database().ref('/orders/' + Id).once('value').then(function (snap) {
            const tokenId = snap.val().tokenId;
            console.log('tokenId : ' + snap.val().tokenId);
            let payload = {
                notification: {
                    title: 'my App',
                    body: '',
                    badge: '1',
                    sound: 'default',
                }
            }
            if (status == 'Done') {
                payload = {
                    notification: {
                        title: 'My App',
                        body: 'your order is done',
                        badge: '1',
                        sound: 'default',
                    }
                }


            }
            else if (status == 'Rejected') {
                payload = {
                    notification: {
                        title: 'My App',
                        body: 'your order is rejected',
                        badge: '1',
                        sound: 'default',
                    }
                }

            }
            return admin.messaging().sendToDevice(tokenId, payload).then(response => {
                console.log('update respose');
                console.log(response);
            });
        });
    }


});

мой код в Xcode (быстро):

 func userNotificationCenter(_ center: UNUserNotificationCenter, didReceive response: UNNotificationResponse, withCompletionHandler completionHandler: @escaping () -> Void) {
       let userInfo = response.notification.request.content.userInfo
        print("tap on on forground app",userInfo)
        Messaging.messaging().appDidReceiveMessage(userInfo)
        let content = response.notification.request.content
        let badgeNumber = content.badge as! Int
        UIApplication.shared.applicationIconBadgeNumber  =  badgeNumber + 1

        completionHandler()
          let actionIdentifier = response.actionIdentifier
        switch actionIdentifier {
        case UNNotificationDismissActionIdentifier: // Notification was dismissed by user

            completionHandler()
        case UNNotificationDefaultActionIdentifier: // App was opened from notification

            completionHandler()
        default:
            completionHandler()
        }
    }

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

Это не вопрос Swift, это вопрос typescript. Ваш код отправляет badge: '1', поэтому его необходимо обновить, чтобы отправить правильное количество бейджей.

Ashley Mills 10.09.2018 14:21
0
1
222
2

Ответы 2

В вашей облачной функции (машинописный текст) вы отправляете 1 в значке, поэтому получите только 1, измените номер значка на 2 или 3, тогда он отразится в методе didReceive.

Вы должны ввести некоторую логику, чтобы сделать номер значка динамическим в облачной функции (машинописный текст).

Я знаю проблему с полезной нагрузкой (значок: '1'), но я не знаю, как сделать эту логику какой-либо полезной, которая будет отличной

GHAZZWAY 10.09.2018 11:48

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

R. Mohan 10.09.2018 11:56

Измените эту строку:

UIApplication.shared.applicationIconBadgeNumber += 1

Другие вопросы по теме