Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/firebase/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 以编程方式向订阅主题的用户发送FCM_Android_Firebase_Firebase Cloud Messaging - Fatal编程技术网

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

Android 以编程方式向订阅主题的用户发送FCM,android,firebase,firebase-cloud-messaging,Android,Firebase,Firebase Cloud Messaging,我正在创建一个血库应用程序,当用户请求血液时,它会获取请求的血型并在数据库中搜索相同的血型。它显示所有可以捐献给该血型的用户的列表 在列表中,我已经实现了一个向用户发送消息和呼叫的选项。此外,我希望应用程序向所有血型相同的用户发送通知 为了实现这一点,我在成功登录时为用户订阅了一个主题,并向他发送了一个通知,但我是通过控制台完成的 我想实现的是,当一个用户请求献血时,在向他显示所有可以献血的用户列表的同时,该应用程序还应该向所有订阅该主题的用户发送通知 那么,有没有任何可能的方法可以通过编程将F

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

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

为了实现这一点,我在成功登录时为用户订阅了一个主题,并向他发送了一个通知,但我是通过控制台完成的

我想实现的是,当一个用户请求献血时,在向他显示所有可以献血的用户列表的同时,该应用程序还应该向所有订阅该主题的用户发送通知

那么,有没有任何可能的方法可以通过编程将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();
                        }
                    });
我已经读过了,很多人都说要通过API以编程方式发送FCM。但我在firebase中创建整个应用程序,所以我的数据库也在firebase中,因为我的数据库在firebase中,所以我不能只对一个通知使用API,就像我必须为该通知在DB中管理一些表一样,并且只有一个表我必须管理一个单独的DB。 那么,在成功加载捐献者列表后,我是否可以通过编程方式将FCM发送给所有订阅了相同主题的用户,该列表显示了可以向请求的血型献血的用户。
感谢

您可以直接从android向订阅主题的所有设备发送推送通知,请查看以下如何直接从android发送MSG,但在本例中,用户正在发送消息,要向订阅主题的用户发送fcm消息,您需要更改fcm文档中指定的设置

是否必须使用HTTP请求向订阅主题的所有用户发送消息您可以使用您选择的库(如改装库或截取库)发送请求。
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());
        }

    }