Как запланировать уведомления на базе данных Firebase в реальном времени? - PullRequest
0 голосов
/ 19 декабря 2018

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

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

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

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

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

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

1 Ответ

0 голосов
/ 20 декабря 2018

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

Если это так, я бы повторил этот сценарий с базой данных Firebase Realtime (или 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 будут потеряны, как указано в таблице.

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

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