получение уведомления при обновлении узла firebase - PullRequest
1 голос
/ 26 января 2020

У меня есть 2 приложения: приложение для бронирования клиентов и приложение для администратора. они оба подключены к одной базе данных Firebase. Когда клиент делает заказ, я могу просмотреть это в моем приложении администратора. Но как я могу сделать так, чтобы я получал уведомление в приложении администратора, как только заказ сделан в приложении клиента?

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

 Uri notificationSoundURI = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION);
    NotificationCompat.Builder mNotificationBuilder = new NotificationCompat.Builder(this)
            .setSmallIcon(R.mipmap.ic_launcher)
            .setContentTitle(subject)
            .setContentText(object.getString("body"))
            .setAutoCancel(true)
            .setSound(notificationSoundURI)
            .setContentIntent(resultIntent);

    NotificationManager notificationManager =
            (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);

    notificationManager.notify(0, mNotificationBuilder.build());

    ToneGenerator toneG = new ToneGenerator(AudioManager.STREAM_ALARM, ToneGenerator.MAX_VOLUME);
    toneG.startTone(ToneGenerator.TONE_CDMA_HIGH_L, 3000);
    ((Vibrator)getSystemService(VIBRATOR_SERVICE)).vibrate(2000);

***** Редактировать **** *

Мое дерево Firebase выглядит следующим образом

{
"Bookings",
"UserID Appears here",
"User booking info appears here"}
}

узел бронирования является константой и всегда присутствует, идентификатор пользователя появляется после того, как сделано бронирование. Могу ли я иметь какой-то сервис, который работает, даже когда приложение закрыто, и слушает обновление «UserID»? затем запустить метод уведомления выше? Я никогда не работал с уведомлениями и службами, поэтому любая помощь будет принята с благодарностью

Ответы [ 2 ]

1 голос
/ 26 января 2020

Код для вашего админ-приложения

// Minimal Fcm Service
class FcmService : FirebaseMessagingService() {
    override fun onMessageReceived(remoteMessage: RemoteMessage) {
        remoteMessage.data.isNotEmpty().let {
            // data message, handle it or start a service
            Intent(this, ConnectionService::class.java).also { intent -> startService(intent) }
        }

        remoteMessage.notification?.let {
        // notification message, you can define your custom notification here or just leave it that way
        }
    }
}

И вот как вы регистрируете его в манифесте

<service
    android:name="com.yourpackage.appname.FcmService"
    android:exported="false">
        <intent-filter>
            <action android:name="com.google.firebase.MESSAGING_EVENT" />
        </intent-filter>
</service>

Редактировать:

Уведомление:

FCM автоматически отображает сообщение на устройствах конечного пользователя от имени клиентского приложения. Сообщения уведомлений имеют предопределенный набор видимых пользователем ключей и дополнительную полезную нагрузку данных пользовательских пар ключ-значение.

Сообщение данных:

За обработку отвечает клиентское приложение сообщения данных. Сообщения данных имеют только пользовательские пары ключ-значение.

Edit2: Java Код

public class FcmService extends FcmService {
    @Override
    public void onMessageReceived(@NotNull RemoteMessage remoteMessage) {
        if (!remoteMessage.getData().isEmpty()){
            // data message
            // start a service or handle it the way you want
        }

        if (remoteMessage.getNotification() != null){
            // notification message
        }
    }
}

Ссылка на официальный сервис Fcm в java

1 голос
/ 26 января 2020

Это типичный вариант использования для Облачных функций и Firebase Cloud Messaging. На самом деле, этот сценарий настолько распространен, что в документации Firebase есть пример: уведомлять пользователей, когда происходит что-то интересное :

enter image description here

Облачные функции позволяют вам реагировать на события в ваших проектах Firebase, запуская фрагменты (Node.js) кода на серверах Google. Поскольку этот код работает на серверах Google, он будет активен, даже если приложение не активно. И этот код может затем использовать Firebase Admin SDK для вызова других служб Firebase, таких как Cloud Messaging здесь.

Firebase Cloud Messaging позволяет отправлять сообщения на приложение, которое установлено на устройстве, даже если оно не используется активно. Обычно вы используете код в своем вопросе в ответ на получение такого сообщения, чтобы затем показать локальное уведомление на этом устройстве. Затем, когда пользователь нажимает на уведомление, вы открываете приложение и используете API базы данных в реальном времени для считывания (остальной части) данных с сервера

Подробнее об этом также см.

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