Обмен сообщениями Firebase Cloud не работает в фоновом режиме - PullRequest
0 голосов
/ 21 июня 2020

Я пытаюсь отправить в свое приложение уведомления pu sh. Но приложение не получает уведомления, если оно работает в фоновом режиме. Я использую облачную службу обмена сообщениями Firebase.

вот метод onMessageReceived:

 @Override
    public void onMessageReceived(@NonNull final RemoteMessage remoteMessage) {
        super.onMessageReceived(remoteMessage);

        Map<String, String> data = remoteMessage.getData();
        String body = data.get("body");
        String title = data.get("title");
        String id = data.get("android_channel_id");
        int priority = remoteMessage.getPriority();


        final NotificationManagerCompat notificationManager = NotificationManagerCompat.from(getApplicationContext());

        Intent intent = new Intent(getApplicationContext(), MainActivity.class);
        PendingIntent pendingIntent = PendingIntent.getActivity(getApplicationContext(), 0, intent, PendingIntent.FLAG_UPDATE_CURRENT);

 Notification notification = new NotificationCompat.Builder(getApplicationContext(), id)
                        .setSmallIcon(R.drawable.notification)
                        .setContentTitle(title)
                        .setContentText(body)
                        .setPriority(priority)
                        .setContentIntent(pendingIntent)
                        .setStyle(new androidx.media.app.NotificationCompat.MediaStyle())
                        .setLargeIcon(BitmapFactory.decodeResource(getResources(), R.drawable.aajevan_logo))

                        .setAutoCancel(true)
                        .build();

                notificationManager.notify(200, notification);


 @Override
    public void onNewToken(@NonNull String s) {
        FirebaseInstanceId.getInstance().getInstanceId()
                .addOnCompleteListener(new OnCompleteListener<InstanceIdResult>() {
                    @Override
                    public void onComplete(@NonNull Task<InstanceIdResult> task) {

                        if (!task.isSuccessful()) {
                            Log.d("*******FAILED", task.getException().getMessage());
                            return;
                        }

                        String token = task.getResult().getToken();
                        Log.d("/**MY TOKEN", token);
                    }
                });
    }


Когда приложение находится на переднем плане или в фоновом режиме, проблем нет. Но это не сработает, если я убью свое приложение. Если я открою приложение один раз, я получу сразу все свои уведомления.

1 Ответ

0 голосов
/ 22 июня 2020

Во-первых, есть 2 типа сообщений (уведомления и данные). Консоль Firebase отправляет уведомления. Когда вы отправляете сообщения такого типа, firebase будет обрабатывать их автоматически, когда ваше приложение закрыто или находится в фоновом режиме (не убито). проверьте this для получения дополнительной информации об уведомлениях и сообщениях с данными.

Кроме того, убитое приложение - это приложение, которое принудительно остановило его, или оно вылетело из-за ошибки, или операционная система решила убить его (управление батареей). Убитое приложение не будет получать никаких уведомлений.

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