当前行为:UserA发送另一条userB消息,当应用程序在后台运行时,通知被触发,随着更多消息触发通知,徽章编号增加。 UserB打开通知,徽章值设置为0并最小化应用程序。用户A在后台运行用户B应用时,用户A向用户B发送了另一条消息,徽章值未重置为1,而是从最后一个累积值继续。
期望的行为:当userB收到新通知时,徽章值从1开始递增,而不是从上一个累积的通知徽章值开始递增。
进一步:我已经检查了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;
});
});
内部项目appDelegate applicationDidBecomeActive和applicationWillEnterForeground。
UIApplication.shared.applicationIconBadgeNumber = 0
答案 0 :(得分:0)
在应用程序中,
# Checking which dates falls in the range followed by taking the mean res = [] for idx in df1.Item.unique(): temp = df2[df2.Item==idx] idx_ = temp.Date[temp.Date.apply(lambda x: x >= df1[df1.Item == idx]['Start Date'].iloc[0] and x <= df1[df1.Item == idx]['End Date'].iloc[0])].index res.append(df2.loc[idx_, 'Price'].mean()) # Assiging the result mean df1.loc[:, 'Mean Price'] = res
在打开应用程序时使用UIApplication.shared.applicationIconBadgeNumber = 0将其重置为0。
这可以重置徽章计数器。但是,
但是,下次发送通知时,徽章值再次从上一个递增的值开始,例如(5)而不是1。有人可以解释/帮助这里发生什么情况吗?
在这里,收到推送通知后,您无法从应用程序一侧更新徽章计数器。
当接收到带有推送通知有效内容的“徽章”参数值的推送通知时,iOS将自动更新应用程序图标上的徽章计数器。因此,当前,您似乎在所有通知中都为“徽章”发送了相同的值。因此,如果您发送“徽章”值“ 5”。每次,徽章值将更新为“ 5”。
因此,您需要在Firebase功能的通知有效负载中发送正确的徽章值。
有关“徽章”参数的更多详细信息,请参阅此Google文档。:https://firebase.google.com/docs/cloud-messaging/http-server-ref#notification-payload-support
答案 1 :(得分:0)
在给定基础上解决问题的三个部分
1。)在数据库中创建一个映射到特定用户的字段,以跟踪通知计数。
2。)在客户端上实施逻辑,以根据用户操作更新db中的通知字段
3。)处理更新客户端上的徽章编号