Ich benutze Firebase Cloud-Funktionen, um einen Benutzer Push-Benachrichtigungen zu senden. Ich verstehe JS nicht gut, aber ich möchte in der Lage sein, die App-Badge-Nummer automatisch durch die Benachrichtigungsnutzlast zu erhöhen und die Nummer für jede empfangene Benachrichtigung um 1 zu erhöhen. Das habe ich jetzt. Ich habe die Dokumentation für firebase gelesen, aber ich glaube nicht, dass ich genug JS verstehe, um herauszufinden, was sie beschreiben.Wie App-Ausweisnummer für jede Push-Benachrichtigung erhöht
exports.sendPushNotificationLikes = functions.database.ref('/friend-like-push-notifications/{userId}/{postId}/{likerId}').onWrite(event => {
const userUid = event.params.userId;
const postUid = event.params.postId;
const likerUid = event.params.likerId;
if (!event.data.val()) {
return;
}
// const likerProfile = admin.database().ref(`/users/${likerUid}/profile/`).once('value');
const getDeviceTokensPromise = admin.database().ref(`/users/${userUid}/fcmToken`).once('value');
// Get the follower profile.
const getLikerProfilePromise = admin.auth().getUser(likerUid);
return Promise.all([getDeviceTokensPromise, getLikerProfilePromise]).then(results => {
const tokensSnapshot = results[0];
const user = results[1];
if (!tokensSnapshot.hasChildren()) {
return console.log('There are no notification tokens to send to.');
}
const payload = {
notification: {
title: 'New Like!',
body: '${user.username} liked your post!',
sound: 'default',
badge: += 1.toString()
}
};
const tokens = Object.keys(tokensSnapshot.val());
// Send notifications to all tokens.
return admin.messaging().sendToDevice(tokens, payload).then(response => {
// For each message check if there was an error.
const tokensToRemove = [];
response.results.forEach((result, index) => {
const error = result.error;
if (error) {
console.error('Failure sending notification to', tokens[index], error);
// Cleanup the tokens who are not registered anymore.
if (error.code === 'messaging/invalid-registration-token' ||
error.code === 'messaging/registration-token-not-registered') {
tokensToRemove.push(tokensSnapshot.ref.child(tokens[index]).remove());
}
}
});
return Promise.all(tokensToRemove);
});
});
});
Vielen Dank im Voraus für jede Hilfe
Ich bin nicht sicher, ob ich verstehe, was Sie meinen: „Auch darüber im Klaren sein, dass Ihre String-Interpolation hier in Backticks statt einzeln verpackt werden muss, Zitate, zB: " Sind sie nicht schon richtig verpackt? Aber ja, das hat mir "undefined" anstelle des Usernamens gegeben. – Chris
In deinem obigen Beispiel für den '' body''' Wert verwendest du einfache Anführungszeichen. Das '' '$ {}' '' wird nur als regulärer String behandelt. Sie müssen den Backtick (über der Tabulatortaste) verwenden, damit die Zeichenfolgeninterpolation funktioniert. ('vs ') Wenn Sie eine IDE verwenden, sollte sich auch die Hervorhebung des Materials innerhalb der' '' $ {} '' 'ändern. [MDN-Dokumente für Vorlage-Literale] (https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Template_literals) – DILP