当前位置: 首页 > 知识库问答 >
问题:

使用Firebase云消息在Android中定期发送推送通知

裴劲
2023-03-14

我正在制作一个android应用程序,其中我使用firebase身份验证来验证用户,使用firestore来存储一些用户数据。我想让用户有一个设置,他们可以订阅推送通知。如果他们订阅,我希望我的应用程序定期向他们发送通知,比如每6小时一次。目前,我已经使用firebase控制台测试了推送通知,它看起来工作正常。以下是我到目前为止的< code > myfirebasemesagingservice . 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云消息发送通知。我无法理解如何做到这一点。我尝试了很多搜索,但唯一能找到的方法是使用<code>节点。js和云函数。但我如何做到这一点呢?对于订阅通知的用户,我的html" target="_blank">用户文档有一个属性设置为true。为他们自动化通知过程的typescript代码是什么?我是第一次使用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链接,但似乎都没有解决我的问题。在这起作用之后,我仍然需要安排通知,这可能会更加困难?:/

共有1个答案

裘臻
2023-03-14

要通过Firebase云消息传递发送消息,您需要调用其API并指定FCM服务器密钥。顾名思义,此密钥只能在服务器或其他受信任的环境中使用,例如您的开发机器或云功能。有关详细信息,请参阅如何使用Firebase消息传递一对一消息。

一旦您有代码调用FCM API,您就需要定位正确的设备。有两个主要选项,要么您知道设备的令牌并定位单个设备,要么您让设备订阅所谓的主题,然后将消息也发送到该主题。有关这方面的更多信息,请参阅:如何通过CURL向所有设备发送Firebase通知?

如果您想安排消息的发送,您需要一个可以按计划运行代码的地方。你可以在你自己的开发机器上,或者在你控制的服务器上这样做,但是在云函数中也是可以的。有关这方面的更多信息,请参见如何在Firebase控制台之外进行预定的Firebase云消息通知?

 类似资料:
  • 我正在尝试开发一个应用程序,其中服务器必须每5秒向运行该应用程序的所有android设备发送通知。我决定使用(谷歌)Firebse云消息发送通知,所以我首先尝试了指南的示例项目 https://firebase.google.com/docs/notifications/android/console-audience 但我不能让它工作。我遵守了所有的指示。我已经发布了我使用的代码。我也做了档案-

  • 我正在尝试使用Postman通过云消息服务发送一次推送通知。 这是一个用于相同目的的工作命令,我将其用作参考。 到目前为止我所做的。。 1-适当设置标题 2-在Body,我使用 执行时,我返回

  • 我使用此代码通过C#与GCM发送通知消息,使用Winform,Webform,无论什么。现在我想发送到FCM(Firebase云消息传递)。我应该更新我的代码吗?: 但GCM改为FCM。发送通知的代码是否相同?在哪里可以找到服务器API密钥?是相同的解决方案吗?

  • 我的代码如下:, 从服务器通知FCM(C#) 我对上述要求的答复 {"multicast_id":5002368547300,"成功": 1,"失败": 0,"canonical_ids": 0,"结果":[{"message_id":"0:14200031 c4rrr5787蛋"}]} 我假设一旦FCM收到新的通知,它将把这些通知推送到各自的Android设备。 但对我来说,它不起作用。

  • 如果一个主题订阅者在向该主题/订阅者发送推送通知时没有在线,那么他/她的消息会丢失还是当他们在线时才收到消息?

  • 我想使用firebase云消息将通知从我的应用程序发送到另一个应用程序。所以我使用这个方法retrieveFCMToken(forSenderID:senderid)来处理这个过程。我将以下代码添加到我的应用程序委托中: 这是我的应用程序代理: 我遵循这个场景:我有两个应用程序,分别是“A”和“B”。我想将通知从应用程序“A”发送到应用程序“B”。因此,我将应用程序A的发件人id放入应用程序B代理