Хобрук: Ваш путь к мастерству в программировании

Как запланировать уведомления в базе данных firebase в реальном времени?

Я разрабатываю приложение для общения с флаттером для компании, в которой работаю, но столкнулся с двумя проблемами.

Вот что мне нужно сделать: 1) Отправлять уведомления группам пользователей или конкретному пользователю и сохранять эти уведомления в базе данных или файле json. Этот список будет отображаться на главном экране моего приложения как «последние новости».

Проблема в том, как мне записать текст моего уведомления, когда приложение работает в фоновом режиме?

2) Создайте своего рода «поговорите с нами», где сотрудники могут задавать вопросы и получать ответы с доски.

В этом случае я считаю, что идеальным было бы использовать базу данных в реальном времени для хранения этих сообщений, но как мне уведомить пользователя о том, что он получил новый ответ? Я полагаю, что могу использовать для этого облачные функции, но я не знаю, как это сделать.

Кто-нибудь может мне помочь?

19.12.2018

Ответы:


1

Могут ли ваши уведомления отвечать на эти вопросы пользователей?

Если это так, я бы воспроизвел этот сценарий с помощью Firebase Realtime Database (или Firestore). Я бы заставил все работать с БД FB без уведомлений, а затем добавил бы уведомления по мере необходимости.

База данных Firebase Realtime позволяет выполнять автономный доступ к этим данным и синхронизируется, когда снова появляется Интернет. Вам не нужно будет сохранять эти данные в дополнительной локальной базе данных или файле json.

В качестве уведомляющих групп или пользователей каждое устройство будет иметь fcmToken (токен облачных сообщений firebase), поэтому вы храните эти токены в облаке в своем профиле пользователя и используете их для направления своих уведомлений.

Однако, по моему опыту, будет НАМНОГО проще использовать темы как для групп, так и для отдельного пользователя. Тогда ваши уведомления будут направляться по темам, а не по конкретным токенам. Например, данный пользователь подписался бы на две темы: одну с именем questions.group.finance, а другую - точно так же, как user.id.131231. Таким образом, вам не нужно поддерживать topics базу данных, и вы можете просто вывести их, основываясь на деталях ответов.

Это также упрощает поддержку нескольких устройств для одного и того же пользователя.

Итак, у вас может быть БД с такой структурой

 questions
    + 001
      - subject: What's ...? 
      - department: Finance
      - user: 131231
      + answers
          001
             - text: That's a ...
             - user: 432

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

export const answerCreate = functions.database.ref('/questions/{questionKey}/answers/{answerKey}')
  .onCreate(async (snapshot, context) => {
    // INCOMPLETE AND UNTESTED CODE

    const questionKey = context.params.questionKey
    const questionSnap = await fbadmin.database().ref(`/questions/${questionKey}`).once('value')
    const question = questionSnap.val()

    const answerKey = context.params.answerKey
    const answer = snapshot.val()

    const payload = {
      notification: {
        title: question.subject,
        body: `${answer.user.name} replied: ${answer.text}`,
        // icon: question.photoURL,
      }
    }

    const topic = `questions.group.${question.department}`
    return fbadmin.messaging().sendToTopic(topic, payload)
  })

Если вы ДЕЙСТВИТЕЛЬНО хотите ЗАХВАТИТЬ данные уведомлений в фоновом режиме, я бы отправил уведомления DATA, так как эта таблица из firebase_messaging состояния репо,

В Android сообщения DATA принимаются через onMessage, в то время как приложение остается в фоновом режиме.

В iOS сообщения DATA хранятся в FCM и доставляются в приложение через onMessage, когда приложение возвращается на передний план.

(отредактировано из этой таблицы)

Однако, если приложение завершено и не запущено ВООБЩЕ, эти сообщения DATA будут потеряны, как также указано в таблице.

Вот почему я предлагаю вам заставить ваше приложение работать без уведомлений и НЕ использовать их для передачи фактических данных, а просто для уведомления пользователя о наличии новых данных. Уведомление может указывать пользователю на нужное место в приложении, но это не обязательно для основного использования приложения.

20.12.2018
Новые материалы

Решения DBA Metrix
DBA Metrix Solutions предоставляет удаленного администратора базы данных (DBA), который несет ответственность за внедрение, обслуживание, настройку, восстановление базы данных, а также другие..

Начало работы с Блум
Обзор и Codelab для генерации текста с помощью Bloom Оглавление Что такое Блум? Некоторые предостережения Настройка среды Скачивание предварительно обученного токенизатора и модели..

Создание кнопочного меню с использованием HTML, CSS и JavaScript
Вы будете создавать кнопочное меню, которое имеет состояние наведения, а также позволяет вам выбирать кнопку при нажатии на нее. Финальный проект можно увидеть в этом Codepen . Шаг 1..

Внедрите OAuth в свои веб-приложения для повышения безопасности
OAuth — это широко распространенный стандарт авторизации, который позволяет приложениям получать доступ к ресурсам от имени пользователя, не раскрывая его пароль. Это позволяет пользователям..

Классы в JavaScript
class является образцом java Script Object. Конструкция «class» позволяет определять классы на основе прототипов с чистым, красивым синтаксисом. // define class Human class Human {..

Как свинг-трейдеры могут использовать ИИ для больших выигрышей
По мере того как все больше и больше профессиональных трейдеров и активных розничных трейдеров узнают о возможностях, которые предоставляет искусственный интеллект и машинное обучение для улучшения..

Как построить любой стол
Я разработчик программного обеспечения. Я люблю делать вещи и всегда любил. Для меня программирование всегда было способом создавать вещи, используя только компьютер и мое воображение...