Моя цель - разрешить пользователям "подписываться" на другого пользователя / компанию в моем приложении, чтобы все их подписчики могли получать уведомления, когда им нужно узнать что-то, например, о новом сообщении. Я отправляю уведомления с помощью Firebase Cloud Functions.
Я пытаюсь использовать темы для этого, но они не работают ... Я могу успешно подписаться, но ничего не получаю при попытке отправить уведомление ...
Примечание. У меня уже настроены push-уведомления, и я успешно отправляю их для таких вещей, как сообщения.
//here i am subscribing to the user when they accept the request
exports.friendRequestAccepted = functions.database.ref('/friends/{pendingFriend}/{requester}')
.onUpdate((change, context) => {
const pendingFriend = context.params.pendingFriend;
const requester = context.params.requester;
const ref = admin.database().ref(`users/${requester}/notificationTokens`);
return ref.once("value", function(snapshot){
const payload = {
notification: {
title: 'You have a new Connection',
body: 'Somebody has accepted your connection request. Who could that be?'
}
};
admin.messaging().sendToDevice(snapshot.val(), payload)
// Subscribe the devices corresponding to the registration tokens to the
// topic.
admin.messaging().subscribeToTopic(pendingFriend)
.then(function(response) {
// See the MessagingTopicManagementResponse reference documentation
// for the contents of response.
console.log('Successfully subscribed to topic:', response);
})
.catch(function(error) {
console.log('Error subscribing to topic:', error);
});
}, function (errorObject) {
console.log("The read failed: " + errorObject.code);
});
})
//here i am trying to send the topic notification when a post is added...
exports.newPostNotification = functions.database.ref('/categories/{newPost}/')
.onCreate((snapshot, context) => {
// Grab the current value of what was written to the Realtime Database.
const original = snapshot.val();
console.log('informing for', context.params.newPost, original);
// You must return a Promise when performing asynchronous tasks inside a Functions such as
// writing to the Firebase Realtime Database.
// Setting an "uppercase" sibling in the Realtime Database returns a Promise.
const payload = {
notification: {
title: 'New Post from user',
body: 'blah blah blah',
},
};
return admin.messaging().sendToTopic(original.userUid, payload)
.then(function(response) {
console.log("Successfully sent message:", response);
})
.catch(function(error) {
console.log("Error sending message:", error);
});
});
При подписке я получаю ответный звонок об успехе, но при попытке отправить сообщение пользователям, подписавшимся, я ничего не получаю ... Я вижу, что темы отображаются на консоли FCM в раскрывающемся списке, поэтому я знаю, что они здесь.
Буду признателен за некоторые рекомендации, которые помогут решить эту проблему, я понятия не имею, что я делаю неправильно.
Ура!