Существуют ли облачные функции, которые срабатывают при изменении базы данных и отправляют уведомление абоненту пользователей в «разделы» - PullRequest
0 голосов
/ 23 января 2019

Я работаю над проектом приложения для Android для своего второстепенного проекта в колледже. Все работает, но теперь я хочу добавить функцию уведомления, то есть всякий раз, когда администратор публикует уведомление, каждый подписчик этой темы получает уведомление, я пытался следовать различным учебным пособиям и документам, но так как у меня нет опыта программирования в js / nodejs / php я не мог понять облачные функции. Кто-нибудь может написать функции или привести меня к ответу?

Я хочу, чтобы функция запускалась при добавлении нового уведомления в / Уведомление и отправка уведомления всем пользователям, подписавшимся на Уведомление.

я написал следующий код, после некоторого изучения,

const functions = require('firebase-functions');
const admin = require('firebase-admin');
admin.initializeApp(functions.config().firebase);
exports.sendNotices = 
functions.database.ref('/Notices/{nID}').onCreate((event) => {const data = 
event.data;
if(!data.changed()){
    console.log('Nothing changed');
    return;
}else{
    console.log(data.val());
}

const payLoad = {
    notification:{
        title: 'Message received',
        body: 'You received a new message',
        sound: "default"
    }
};

const options = {
    priority: "high",
    timeToLive: 60*60*2
};

return admin.messaging().sendToTopic("bctb", payLoad, options);});

и получил ошибку в консоли firebase, что я тут не так делаю, TypeError: Невозможно прочитать свойство «изменено» из неопределенного at exports.sendNotices.functions.database.ref.onCreate (/User_code/index.js:8:13) at cloudFunctionNewSignature (/ user_code / node_modules / firebase- Функции / Библиотека / облака-functions.js: 105: 23) в cloudFunction (/ user_code / node_modules / firebase-functions / lib / cloud- functions.js: 135: 20) по адресу /var/tmp/worker/worker.js:770:24 at process._tickDomainCallback (internal / process / next_tick.js: 135: 7)

1 Ответ

0 голосов
/ 23 января 2019

Так как вы не знакомы с функциями Firebase Cloud, я рекомендую сначала пройти официальные документы здесь , потому что без изучения основ вы не поймете, как они работают, а затем пройдете через Firebase CloudДокументы сообщений (FCM) здесь .Когда вы узнаете, как работают оба сервиса, вам станет намного легче понять и написать собственную облачную функцию.Для вашего удобства вот как должна выглядеть ваша функция.

Вы можете сделать это, просто создав функцию запуска onCreate.Так что это будет выглядеть примерно так:

exports.SendNotification = functions.database.ref('/Notice/{nid}')
.onCreate((snapshot, context) => {
    //Your notification code here
 }

Здесь nid это только что созданный идентификатор уведомления.Firebase автоматически получит этот идентификатор.А для отправки уведомления вы можете использовать Firebase Cloud Messaging (FCM).В этой облачной функции вы можете создать полезную нагрузку уведомления.

//send notification 
    const payload = {
      data:{
        title: "New notice has been added!",
     }
};

Теперь вы можете отправить это уведомление приложению, используя:

admin.messaging().sendToDevice(instID, payload);

Здесь instID - идентификатор экземпляра.Каждое установленное приложение имеет уникальный идентификатор экземпляра.Для отправки на несколько устройств вам нужно будет обернуть строку кода выше в цикле, чтобы отправлять уведомления всем подписавшимся пользователям.Для этого вам нужны идентификаторы экземпляров всех подписавшихся пользователей.

«Я слышу и забываю, вижу и помню, понимаю и понимаю»

Удачи.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...