【问题标题】:Local notification is not being fired on next day第二天不会触发本地通知
【发布时间】:2018-09-02 19:05:41
【问题描述】:

我正在使用Local Notifications 插件。我需要在每天上午 10 点触发通知。我使用了下面的代码。当我在同一天在不同的时间进行测试时,它工作正常。假设16H 5Min。但它不会在第二天自动工作。我可以保证下一个数据的所有数据都在那里。但似乎我在这里做错了什么。请告诉我错误在哪里?

Note: 即使在同一天,如果我们将应用程序置于后台模式大约1+ hours 左右,这也不起作用。

注意:在调试模式下工作正常。我不知道问题出在哪里。有什么线索吗?

app.component.ts

constructor(){
 this.initializeApp();
}

  initializeApp() {
        try {
          this.platform.ready().then(() => {
            timer(60000, 60000).subscribe(val => {
             const hours = moment().format("H");
             const minutes = moment().format("m");
          if (hours == '10' && minutes == '1')              
                this.scheduleNotification();
                });
             });
        }
        catch (err) {
          console.log(err);
        }
      }

 scheduleNotification() {
    let firstNotificationTime = new Date();
    firstNotificationTime.setDate(firstNotificationTime.getDate());
    firstNotificationTime.setHours(10);
    firstNotificationTime.setMinutes(1);
    firstNotificationTime.setSeconds(0);
    forEach(this.authenticationProvider.member.projects, (project: Project) => {
      forEach(project.transactions, (transaction: Transaction) => {
        if (transaction.dueOn != null && moment(transaction.dueOn).format('YYYY-MM-DD') == moment().format('YYYY-MM-DD')) {
          const id = random(1, 1000);
          this.localNotifications.schedule({
            id: id,
            title: 'Due Today',
            text: `Payment for ${transaction.category.name}: ${transaction.description} of ${Number(transaction.totalPrice).toLocaleString()} is due today.`,
            data: { transaction: transaction, project: project },
            at: firstNotificationTime,
          });
        }
      });
    });
  }

【问题讨论】:

    标签: angular typescript ionic3 localnotification ionic-native


    【解决方案1】:

    从您的代码编写方式看来,firstNotificationTime 将始终是这行代码运行时的今天日期:

    let firstNotificationTime = new Date();
    

    在接下来的几行中,您更改了小时、分钟和秒,但您从不更改日期。您必须将日期推迟到第二天才能在第二天收到通知。

    除此之外,你可以去掉这一行:

    firstNotificationTime.setDate(firstNotificationTime.getDate());
    

    除了将日期设置为自身之外,什么都不做。

    【讨论】:

    • 对不起,我没有明白你的意思。我每分钟触发一次timer(60000, 60000).subscribe(val => { 所以在任何一天都会发生。你能告诉我错误在哪里以及如何解决吗?
    • 这里我已经触发通知如果是10.01 AMif (hours == '10' && minutes == '1') this.scheduleNotification(); }); });
    猜你喜欢
    • 2017-05-13
    • 1970-01-01
    • 1970-01-01
    • 2017-10-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-20
    相关资源
    最近更新 更多