如何为 React Native Expo 安排推送通知?

我正在尝试在预定时间向用户发送推送通知.假设他们设置了事件的日期,并且希望在 30 分钟前收到通知,也就是我想向他们发送通知的时间.我使用 firebase 作为后端,项目是用 expo 构建的.

I am trying to send push notifications to a user at a scheduled time. Say they set the date for an event and they want to be notified 30 minutes before, that is when I would like to send them a notification. I am using firebase as my backend and the project is built with expo.

我很好奇如果我使用 firebase 云消息传递,我将如何使用 expo 的通知系统,因为它说我需要来自 firebase 的单独许可(我已经为每个用户拥有了 expo 令牌).我已经研究了节点 cron/schedule 以及 react-native 推送通知,但我不确定哪个是最好的解决方案以及我将在哪里部署解决方案(例如运行云功能).

I am curious how I would use expo's notification system if I am using firebase cloud messaging because it says I need separate permission from firebase (I already have the expo token for each user). I have looked into node cron/schedule and also react-native push notification but I am unsure which would be the best solution and where I would deploy the solution (such as running a cloud function).

我假设我需要某种类型的函数来获取令牌、消息正文、标题和日期,然后将其设置为将其安排到服务器或本地.然后当他们按下按钮接收通知时,就会调用该函数.他们还可以更改事件的日期,因此如果用户这样做,则需要切换日期.

I assume I need some type of function that takes the token, message body, title, and date and then sets it up to schedule it either to the server or locally. And then that function would be called when they press the button to receive the notification. They can also change the date of the event so it would need to switch the date if the user did that.

任何建议都将不胜感激,因为我已经研究了几天,但仍然不确定最佳方法.

Any advice would be greatly appreciated as I have been researching this for days and still am unsure of the best approach.

推荐答案

一种可能的方法:

  1. 在您的后端,安排一个每分钟(或每 15 秒)运行一次的 cron 作业,并检查数据库中哪些事件的开始时间在接下来的 30 分钟内.

  1. In your backend, schedule a cron job that runs every minute (or every 15 seconds) and checks against database which events have start time within next 30 mins.

获得事件后,找出为这些事件注册的用户并收集他们的用户ID.

Once you have the events, find out the users registered for those events and collect their user ids.

正如您提到的,您已经存储了令牌,所以我假设这些令牌存在于某个针对用户 ID 的表中.(例如 user-idtokens 的映射).查找此表以获取这些用户的令牌.

As you mention that you already have stored the tokens, so I assume that those tokens exist in some table against the user id. (e.g. mapping of user-id and tokens). Look up this table to fetch the tokens of those users.

准备通知 payload 并调用 firebase 消息以针对令牌发送通知.例如,此时您可以调用 Firebase SDK 中的 sendToDevice() 函数:firebase.messaging().sendToDevice(tokens, payload);

Prepare the notification payload and call firebase messaging to send notification against the token. For example, at this point you can call the sendToDevice() function from Firebase SDK: firebase.messaging().sendToDevice(tokens, payload);

现在您可以在后端(例如 Nodejs)中实施这些步骤,或者您可以为此部署云功能并设置 调度这个云函数.

Now you can implement these steps in your backend (e.g. Nodejs) or you can deploy a cloud function for this and setup scheduling for this cloud function.

如果您需要任何进一步的帮助,请告诉我!

Let me know if you need any further help!

相关文章