使用 Firebase 云消息传递定期在 android 中发送推送通知

Sending push notifications in android after regular intervals using Firebase cloud messaging

我正在制作一个 android 应用程序,我在其中使用 firebase 身份验证来对用户进行身份验证,并使用 firestore 来存储一些用户数据。我想让用户有一个他们可以订阅推送通知的设置。如果他们订阅,我希望我的应用程序定期向他们发送通知,比如每 6 小时一次。目前,我已经使用 firebase 控制台测试了推送通知,它似乎工作正常。到目前为止,这是我的 MyFireBaseMessagingService.java 文件:

public class MyFirebaseMessagingService extends FirebaseMessagingService {

    @Override
    public void onNewToken(@NonNull String token) {
        sendRegistrationToServer(token);
    }

    public void sendRegistrationToServer(String token) {
        UserApi.getInstance().setToken(token);// send the token to firestore
    }


}

现在,我想使用 FireBase 云消息传递发送通知。我无法理解如何实现这一目标。我尝试了很多搜索,但我能找到的唯一方法是使用 node.js 和云函数。但我该如何实现呢?对于已订阅通知的用户,我的用户文档有一个属性设置为 true。为他们自动执行通知过程的打字稿代码是什么?我是第一次使用 Firebase。

编辑 1:此外,当我现在考虑时,我认为我不需要设备令牌来实现这个可能

编辑 2:在查看 Frank 的评论后,我正在使用此 curl 命令来测试推送通知是否适用于订阅用户

curl -X POST -H "Authorization: Bearer APP_SERVER_KEY" -H "Content-Type: application/json" -d '{
  "message": {
    "topic" : "notifications",
    "notification": {
      "body": "This is a Firebase Cloud Messaging Topic Message!",
      "title": "FCM Message"
    }
  }
}' https://fcm.googleapis.com/v1/projects/PROJECT_ID/messages:send HTTP/1.1

由于某些原因,上述命令在 powershell 中不起作用,并出现以下错误:

curl: (6) Could not resolve host: is
curl: (6) Could not resolve host: a
curl: (6) Could not resolve host: Firebase
curl: (6) Could not resolve host: Cloud
curl: (6) Could not resolve host: Messaging
curl: (6) Could not resolve host: Topic
curl: (3) Illegal characters found in URL
curl: (3) [globbing] unmatched close brace/bracket in column 13
{
  "error": {
    "code": 401,
    "message": "Request had invalid authentication credentials. Expected OAuth 2 access token, login cookie or other valid authentication credential. See https://developers.google.com/identity/sign-in/web/devconsole-project.",
    "status": "UNAUTHENTICATED"
  }
}
curl: (6) Could not resolve host: HTTP

我正在脱发,想着这有什么问题,为什么这么难?我浏览了很多 SO 链接,但 none 似乎解决了我的问题。在这个工作之后,我仍然需要安排可能更难的通知? :/

要通过 Firebase Cloud Messaging 发送消息,您需要调用其 API 并指定 FCM 服务器密钥。顾名思义,此密钥只能在服务器或其他受信任的环境中使用,例如您的开发机器或 Cloud Functions。有关更多信息,请参阅

获得调用 FCM 的代码后 API,您需要定位正确的设备。有两个主要选项,要么您知道设备的令牌并以单个设备为目标,要么让设备订阅一个所谓的主题,然后也将消息发送到该主题。有关更多信息,请参阅:

如果您想安排消息的发送,您需要一个可以运行 安排代码的地方。您可以在自己的开发机器上或在您控制的服务器上执行此操作,但也可以在 Cloud Functions 中执行。有关更多信息,请参阅