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

以编程方式向订阅主题的用户发送FCM

许子平
2023-03-14

我正在创建一个血液银行应用程序,其中,当用户请求血液,它采取所请求的血型,并在数据库中搜索相同的血型。它显示可以捐献该血型的所有用户的列表。

在列表中,我已经实现了一个消息和调用用户的选项。此外,我希望应用程序发送通知所有用户谁有相同的血型。

我想实现的是,当用户请求献血时,在向他展示所有可以献血的用户名单的同时,App还应该向所有订阅该主题的用户发送通知。

因此,是否有任何可能的方法,我可以通过编程方式发送FCM给所有订阅同一主题的用户。

这里,我在成功登录时向用户订阅一个主题:

   firebaseAuth.signInWithEmailAndPassword(email, password).addOnCompleteListener(new OnCompleteListener<AuthResult>() {
                @Override
                public void onComplete(@NonNull Task<AuthResult> task) {
                    if (task.isSuccessful()) {
                        progressDialog.dismiss();
                        topicSubscription();

                    } else {
                        progressDialog.dismiss();
                        String exception = task.getException().getMessage();
                        HelperClass.showSnakbarMsg(rootView, exception);
                    }
                }
            });
        }

        private void topicSubscription() {
            FirebaseMessaging.getInstance().subscribeToTopic("Blood")
                    .addOnCompleteListener(new OnCompleteListener<Void>() {
                        @Override
                        public void onComplete(@NonNull Task<Void> task) {
                            String msg = getString(R.string.msg_subscribed);
                            if (!task.isSuccessful()) {
                                msg = getString(R.string.msg_subscribe_failed);
                            } else {
                                startActivity(new Intent(LoginActivity.this, MainActivity.class));
                                finish();
                            }
                            Log.d("log", msg);
                            Toast.makeText(LoginActivity.this, msg, Toast.LENGTH_SHORT).show();
                        }
                    });

这是我的Firebase消息传递类:

public class MyFirebaseMessagingService extends FirebaseMessagingService {

    private static final String TAG = "MyFirebaseMsgService";
    /**
     * Called when message is received.
     *
     * @param remoteMessage Object representing the message received from Firebase Cloud Messaging.
     */

    @Override
    public void onMessageReceived(RemoteMessage remoteMessage) {


        // TODO(developer): Handle FCM messages here.

        Log.d(TAG, "From: " + remoteMessage.getFrom());


        if (remoteMessage.getData().size() > 0) {
            Log.d(TAG, "Message data payload: " + remoteMessage.getData());
        }

        if (remoteMessage.getNotification() != null) {
            Log.d(TAG, "Message Notification Body: " + remoteMessage.getNotification().getBody());
        }

    }

我读过它,许多人说要打一个API来以编程方式发送FCM。但是我在firebase中创建整个应用程序,所以我的数据库也在firebase中,由于我的数据库在firebase中,我不能只为一个通知使用API,就像我必须为该通知管理数据库中的一些表,而对于只有一个表,我必须管理单独的数据库。因此,有任何方法,我可以发送FCM编程给所有用户谁订阅了相同的主题,在成功加载捐赠者名单,显示谁可以捐献到所请求的血型。谢谢

共有1个答案

陈德泽
2023-03-14

您可以直接从android发送推送通知,直接发送到所有订阅主题的设备,查看下面的链接如何从android直接发送MSG,但是在这个示例中用户是一对一发送消息,要向订阅主题的用户发送fcm消息,您需要更改fcm文档指定的消息格式

 类似资料:
  • 我可以从Firebase控制台向单个设备、主题和用户段发送通知。 我想向用户段发送推送通知。我搜索了很多,但我只得到脚本发送通知给单个用户或主题,而不是用户段。 我试过下面的代码 下面是我的回答

  • Firebase控制台允许我们向单个用户、组、订阅主题的用户或整个用户群发送通知。是否有任何代码允许我们以同样的方式直接发送通知,但以编程方式发送? 例如,如果我有一个用户列表(包含他们的Firebase UID),如果我单击其中一个用户,我是否可以通过Firebase向该用户发送通知,就像控制台允许我们通过控制台发送通知一样? 此Firebase Blog使用Google App Engine

  • 现在我有一个超过一万名成员的组,并且我为一个组创建了一个主题(通知主题),在这个主题中,组中的所有用户都订阅了这个主题。现在在组内,任何用户都可以添加类似图像、文件或视频的帖子。当用户添加帖子时,我需要发送通知给所有订阅该主题的用户,但除了一个,即添加帖子的人。我怎样才能做到这一点?? 现在通知将发送给所有用户,包括添加帖子的人。

  • 我试图创建基于@JmsListener注释的发布-订阅示例:https://github.com/lkrnac/book-eiws-code-samples/tree/master/05-jms/0515-publish-subscribe 相关代码片段: 问题是,要获得这种行为: 但每个消息都应该由两个侦听器根据主题的定义来使用。我错过了什么?

  • 我正在寻找一种完全从代码创建发布/订阅主题的方法。我设法用域验证api验证域,但我找不到向项目注册域的api。这里描述的唯一方法https://cloud.google.com/pubsub/advanced#register与控制台的交互使用。

  • 目前,我已经开始使用ActiveMQ处理JMS主题。我已经通过JAVA代码(如下所述)创建了发布者和持久订阅者,并且在订阅者端也收到了消息。 Publisher.Java 订阅者.java 我对以下主题有一些疑问, 如何检查有多少订阅者使用 Java JMS 在主题中主动查找消息? 如何从主题中获取活动和持久订阅者列表? 我们是否可以删除主题中发布的消息? 在这些情况下帮助我。 提前致谢。