Как отправить push-уведомления пользователям, которые не заходят в приложение более 2 дней? - PullRequest
0 голосов
/ 06 ноября 2018

У меня нет своего собственного сервера, и клиент не хочет сервер. Могу ли я сделать это с помощью уведомлений direbase? И как я вычислю, сколько дней прошло с последнего сеанса пользователя?

Ответы [ 4 ]

0 голосов
/ 06 ноября 2018

«Могу ли я сделать это с помощью директ-уведомлений?»

Да, вы можете использовать код облачной функции.

Просто вызвать событие после добавления нового уведомления в базу данных.

Мой код ниже запускает событие после добавления нового уведомления в БД и ищет сообщение старше 24 часов. Вы можете использовать его и изменить на 48 часов

Код работы ниже:

  1. Инициирующее событие после добавления данных в БД.

1. Проверьте базу данных на наличие старых уведомлений старше 24 часов.

2. Восстановить их и удалить (изменив их значение на ноль);

//DELETE OLD NOTIFICATION LESS THAN 24HRS /////////////////
 exports.deleteOldItems = functions.database.ref('/notification/{user_id}/{notification_id}').onWrite((change) => {

    const ref = change.after.ref.parent; // reference to the parent
    const yesterday = Date.now() - 86400000;
    const oldItemsQuery = ref.orderByChild('time').endAt(yesterday);

    return oldItemsQuery.once('value').then((snapshot) => {
      // create a map with all children that need to be removed
      const updates = {};
          snapshot.forEach(child => {
                updates[child.key] = null;
          });
      return ref.update(updates);
      // execute all updates in one go and return the result to end the function
    });
  });

////////////////////DELETE FUNCTION ENDED HERE//////////////////////

Самая важная часть - как рассчитать 48 часов (что составляет 2 дня)

PS: это все еще 24 часа. Я обновлю ответ, когда найду способ конвертировать за 48 часов.

const yesterday = Date.now() - 86400000;

РЕДАКТИРОВАТЬ : 172800000 на 2 дня назад (24 часа)

Теперь вы вычитаете текущую дату из 2 дней назад и сравниваете ее с датой уведомления.

const yesterday = Date.now() - 172800000;
0 голосов
/ 06 ноября 2018

-------------------------------- НОВЫЙ ОТВЕТ ------------- -----------------------

Вы должны быть в состоянии сделать это с помощью консоли Firebase. При создании Облачного сообщения вы можете выбрать в разделе «Цель» «Последнее взаимодействие с приложением» и выбрать, что вы хотите, чтобы сообщение отправлялось всем, кто не был связан с приложением, скажем, в течение 1 дня. Firebase Cloud Messaging Target

После этого вы устанавливаете в Планировании, что вы хотите, чтобы это была повторяющаяся кампания, и устанавливаете, чтобы это происходило "Ежедневно", например, в 12:00, и устанавливали, что вы хотите, чтобы каждый пользователь получал это только один раз. Теперь у вас есть кампания, которая каждый день в 12 часов проверяет, кто не был в приложении в течение 1 дня, и отправляет ему кампанию, а отправляет ее только один раз, чтобы не рассылать спама одному и тому же парню каждый день. Firebase Cloud Messaging Scheduling

-------------------------------- СТАРЫЙ ОТВЕТ ------------- ----------------------

Вы можете создать, например, DailyJob в вашем приложении, и этот DailyJob может либо самостоятельно проверить, сколько дней с момента последнего сеанса было активно, и создать локальное уведомление, либо вы можете использовать этот DailyJob для отправки, чтобы сказать Firebase пользовательский атрибут " days_since_last_login "и настроить различные кампании на 2 дня в автономном режиме, 7 дней в автономном режиме, 31 день в автономном режиме и так далее в Firebase.

Для простого создания DailyJob вы можете использовать библиотеку заданий Evernote Android.

0 голосов
/ 06 ноября 2018

Это просто: вообще не пользуйтесь Firebase или Интернетом.

Это то, что вы хотите сделать: каждый раз, когда пользователь входит в ваше приложение, создать будильник на 48 часов (2 дня) с момента onResume и отменить все предыдущие тревоги. Или отмените предыдущие тревоги во время onResume и создайте новую в onPause.

Затем настроить приемник тревоги для отправки локального уведомления . AlarmManager с уведомлением Android

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

0 голосов
/ 06 ноября 2018
  1. Вы можете использовать firebase для отправки push-уведомлений.
  2. В этом случае у вас нет сервера для отправки push-уведомлений и отслеживания последнего сеанса пользователя, я думаю, вы можете выполнить следующее:
    • Используйте локальное уведомление (не push-уведомление) для уведомления пользователя.
    • Сохранить сеанс пользователя в общих настройках.
    • Создание фоновой службы для запуска локальной базы уведомлений о последнем сохраненном сеансе. Но вы должны иметь четкое представление об уведомлении на Android, чтобы понять, как оно работает в первую очередь.
...