Отправить FCM пользователю, подписанному на topi c программным путем - PullRequest
1 голос
/ 06 января 2020

Я создаю приложение BloodBank, в котором, когда пользователь запрашивает кровь, он берет запрошенную группу крови и выполняет поиск в базе данных. Он отображает список всех пользователей, которые могут пожертвовать этой группе крови.

В списке я уже реализовал опцию для сообщения и вызова пользователя. Кроме того, я хочу, чтобы приложение отправляло уведомление всем пользователям, имеющим одинаковую группу крови.

Для достижения этой цели я подписал пользователя на topi c при успешном входе в систему и отправил ему уведомление, но я Я сделал это через консоль.

Я хочу добиться того, чтобы пользователь запрашивал кровь и, показывая ему список всех пользователей, которые могут сделать пожертвование, приложение также должно отправить уведомление всем пользователям, которые подписался на эту топи c.

Так есть ли какой-нибудь возможный способ, которым я могу программно отправить FCM всем пользователям, подписанным на одну и ту же топи c.

Здесь я подписываюсь пользователь в топи c при успешном входе в систему:

   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 программно всем пользователям, подписавшимся на тот же самый topi c, при успешной загрузке списка доноров, который показывает пользователя, который может сделать пожертвование для запрошенной группы крови. Спасибо

1 Ответ

0 голосов
/ 06 января 2020

Вы можете напрямую отправить уведомление pu sh напрямую с android, на все устройства, подписанные на topi c, ознакомьтесь со следующей ссылкой , как отправлять сообщения напрямую с android , но в этом примере пользователь отправляет сообщение один на один , чтобы отправить сообщение fcm пользователю, подписанному на topi c, необходимо изменить формат сообщения , как указано в fcm документация

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...