Send Ionic 3 Local Notification every day at a spe

2019-02-28 01:54发布

问题:

I have added the Ionic 3 local notification plugin to my project using these commands:

ionic cordova plugin add cordova-plugin-local-notification
npm install --save @ionic-native/local-notifications

I added all dependencies on my constructor.

My code is:

let year = new Date().getFullYear();
let month = new Date().getMonth();
let day = new Date().getDate();

let time1 = new Date(year, month, day, 10, 00, 0, 0);
let time2 = new Date(year, month, day, 12, 00, 0, 0);

this.localNotifications.schedule([
  {
    id: 1,
    title: 'My first notification',
    text: 'First notification test one',
    trigger: { at: new Date(time1) },
    data: {"id": 1, "name": "Mr. A"}
  },
  {
    id: 2,
    title: 'My Second notification',
    text: 'Second notification on 12 pm',
    trigger: { at: new Date(time2) },
    data: {"id": 2, "name": "Mr. B"}
  }
]);

It works fine for the current day app start, but I want to send a notification every day at the specified time.

I want local notifications specifically, not push notifications.

回答1:

In order to make a daily repeated notification, you need to use an every:"day" (or interval in minutes: every: 24*60) and a firstAt property with the date when the notification will be triggered for the first time. Try this code

let year = new Date().getFullYear();
let month = new Date().getMonth();
let day = new Date().getDate();

let time1 = new Date(year, month, day, 10, 00, 0, 0);
let time2 = new Date(year, month, day, 12, 00, 0, 0);

this.localNotifications.schedule([
  {
    id: 1,
    title: 'My first notification',
    text: 'First notification test one',
    firstAt: new Date(time1),
    every: 24*60,
    data: {"id": 1, "name": "Mr. A"}
  },
  {
    id: 2,
    title: 'My Second notification',
    text: 'Second notification on 12 pm',
    firstAt: new Date(time2),
    every: 24*60,
    data: {"id": 2, "name": "Mr. B"}
  }
]);


回答2:

In order to make a daily repeated notification, you need to use an every:"day" and a firstAt property with the date when the notification will be triggered for the first time.

Note: Unlike cordova plugin in Ionic 3 firstAt property needs to be wrapped in trigger property. You can find more information in Ionic Local Notification Documentation.

Try this code

let year = new Date().getFullYear();
let month = new Date().getMonth();
let day = new Date().getDate();

let time1 = new Date(year, month, day, 10, 00, 0, 0);
let time2 = new Date(year, month, day, 12, 00, 0, 0);

this.localNotifications.schedule([
  {
    id: 1,
    title: 'My first notification',
    text: 'First notification test one',
    trigger: {firstAt: new Date(time1)},
    every: every: "day"
    data: {"id": 1, "name": "Mr. A"}
  },
  {
    id: 2,
    title: 'My Second notification',
    text: 'Second notification on 12 pm',
    trigger: {firstAt: new Date(time2)}, 
    every: "day",  //"day","hour","minute","week" can be used
    data: {"id": 2, "name": "Mr. B"}
  }
]);


回答3:

In their codebase is shown (commented) that you could achieve this by doing this

this.localNotifications.schedule({
 text: 'Delayed ILocalNotification',
 trigger: {at: new Date(new Date().getTime() + 3600)},
 led: 'FF0000',
 sound: null});

Now, if you have to send a notification every day at the same time you could either:

1 - schedule tenths of notifications and check each time a user opens your app

2 - re-schedule a notification each time the user opens up a notification already received.