如何将推送通知发送给两天后才进入应用程序的用户?

时间:2018-11-06 10:29:25

标签: java android firebase notifications

我没有自己的服务器,客户端不需要服务器。我可以使用direbase通知吗?以及我如何计算上一次用户会话花了多少时间?

4 个答案:

答案 0 :(得分:1)

  1. 您可以使用firebase进行推送通知。
  2. 在这种情况下,您没有任何服务器可以发出推送通知并跟踪上一个用户会话,我想您可以遵循以下步骤:
    • 使用本地通知(而非推送通知)来通知用户。
    • 将用户会话存储到共享首选项。
    • 创建一个后台服务以基于上次存储的会话触发本地通知。 但是您应该对Android上的通知有清晰的了解,以便首先了解其工作原理。

答案 1 :(得分:1)

--------------------------------新答案------------- -----------------------

您应该能够使用Firebase控制台执行此操作。创建Cloud Message时,您可以在“目标”部分的“ Last App Engagement”中进行选择,然后选择要将消息发送给未与该应用互动1天的所有人。 Firebase Cloud Messaging Target

此后,您在“计划”中将其设置为重复活动,然后将其设置为每天12点“每天”发生,并设置每个用户只能获得一次。现在您有了一个广告系列,每天中午12点检查谁不在1d应用程序中,并将其发送给他,但仅发送一次,而不是每天都不会向同一个人发送垃圾邮件。 Firebase Cloud Messaging Scheduling

--------------------------------旧答案------------- ----------------------

例如,您可以在应用程序中创建DailyJob,并且DailyJob可以自行检查自上次会话启动以来已有多少天并创建本地通知,也可以使用DailyJob发送以向Firebase发送自定义属性“ days_since_last_login”,并在Firebase中为离线2天,离线7天,离线31天等设置不同的广告系列。

要轻松创建DailyJob,您可以使用Evernote Android Job库。

答案 2 :(得分:1)

这很简单:根本不使用Firebase或互联网。

这是您要执行的操作:次用户登录到您的应用程序,从onResume开始48小时(2天)内创建警报,并取消以前的所有警报。或取消onResume期间的先前警报,并在onPause中创建一个新警报。

然后,setup the alarm receiver to send a local notificationAlarmManager with Notification Android

每次用户打开您的应用程序时,它都会向后推送本地通知。如果两天没有使用它,他们会在以前使用它的同时收到通知。

答案 3 :(得分:1)

“我可以使用direbase通知吗?”

是的,您可以使用云功能代码。

只需在向数据库添加新通知后触发事件即可。

我的下面的代码在向数据库添加新通知后触发事件,并查找早于24小时的帖子。您可以使用它并将其更改48小时

下面的代码起作用:

  1. 将数据添加到数据库后触发事件。

1。检查数据库中是否有24小时以上的旧通知。

2。检索并删除(将其值更改为null);

//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;