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 --s
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"}
}
]);
So I found the solution to this one by myself. It's an error in the typings file of LocalNotifications package.
The correct usage for the options look like this:
{
id: 1,
title: 'Notification Title',
text: 'Your notification text',
foreground: true,
trigger: {
every: {
hour: 8,
minute: 15
}
}
}
Just go into your node_modules/@ionic-native/local-notifications find the index.d.ts and find the line which says every?: ELocalNotificationTriggerUnit and change it to every?: any; now it should work perfectly.
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"}
}
]);
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.