dens14345
dens14345

Reputation: 302

how to send random local notification message in react-native?

I have an app that needs to send out notification/s everyday with random messages to user depending on how many notification they want (up to 5 notifs per day) and between what time they want (for example notifications will fire only between 6:00am - 9:00am everyday).

To elaborate I'm building a functionality with an idea to send out random inspirational messages that I'm pulling from a hardcoded array variable or json file.

Currently I'm using this package: https://github.com/zo0r/react-native-push-notification to create local notification.

I tried the idea of setting a function that returns a string for the message parameter of localNotificationSchedule, but when I do this, instead of using a regular string, it's not showing the notification.

PushNotification.localNotificationSchedule({
  id          : '1',
  userInfo    : { id: userId },
  message     : () => {
    return Math.random().toString(36).replace(/[^a-z]+/g, '').substr(0, 5); //trying to return random string every time notification fires.
  },
  date        : moment(Date.now()).add(2, 'seconds').toDate(),
  repeatType  : 'day',
});

I considered using other approach such as react-native headless JS but it's for android only.

Also considered using https://www.npmjs.com/package/react-native-background-fetch. But I have a complex interval for notifications. For example, the user might set the notification to run from 6:00am - 6:30am everyday and set to fire 5 notifications. In this interval, notifications will run every 6 mins.

But react-native-background-fetch' minimal interval is only 15 minutes.

I know that this can be done by using a push notification instead, but with that, user will need a connection in order for them to receive a notification, which is not ideal for this case.

Iv'e seen this from an Ios app so I know this is possible to achieve.

Upvotes: 2

Views: 1170

Answers (1)

sj_959
sj_959

Reputation: 441

As per the dev, you can try calling PushNotification.localNotificationSchedule multiple times.

What I've done is this:

const messages = [{text:'',time:0}...];

    messages.map(message=>{
    PushNotification.localNotificationSchedule({
    //... You can use all the options from localNotifications
                    channelId: "my-channel",
                    message: message.text, // (required)
                    date: new Date(Date.now() + (60 + message.time) * 1000), // in 60 secs
                    
                });
    
    })

to show a message from the messages array separated by 5 seconds.

Upvotes: 1

Related Questions