Где FCM Intent с доставленными данными, когда приложение находится в фоновом режиме? - PullRequest
0 голосов
/ 24 августа 2018

Я реализовал Firebase в своем приложении и отправляю push с дополнительными данными. Когда мое приложение находится на переднем плане, я правильно обрабатываю данные и показываю свое собственное уведомление, но у меня есть проблема с извлечением данных, когда Firebase показывает Уведомление «автоматически», когда приложение было «размещено» (не уничтожено). Согласно DOCS Activity должно получиться новое Intent с дополнительными значениями, выполненными с моими значениями, вместо этого приложение просто вернется на круги своя, старое состояние будет восстановлено.

Сценарий:

  1. открытие приложения, нажав Home
  2. отправляя push через консоль Firebase, Firebase создает Notification БЕЗ вызова onMessageReceived (согласно таблице в документации, должно?)
  3. когда приложение уведомления о выборе пользователя будет выведено на передний план в том же состоянии, в котором оно находилось "homed", и Intent выполняется с "оригинальными" дополнениями, используемыми для открытия Activity сверху

У меня есть журналы в onCreate, onNewIntent, onResume (Activity) и в onMessageReceived (Service), вызывается только onResume, в котором я печатаю дополнительные функции, как показано ниже :

if (getIntent().getExtras() != null) {
        for (String key : getIntent().getExtras().keySet()) {
            Object value = getIntent().getExtras().get(key);
            Log.d("Activity onResume", "Key: " + key + " Value: " + value);
        }
    }

Ответы [ 3 ]

0 голосов
/ 24 августа 2018

onMessageReceived () не вызывается, когда приложение находится в фоновом режиме.У меня есть эта проблема несколько месяцев назад.Я разрешаю это методом переопределения handlerIntent.Но ваша библиотека сообщений Firebase должна

implementation 'com.google.firebase:firebase-messaging:10.2.1'

после этого:

@Override
    public void handleIntent(Intent intent) {
        try
        {
            if (intent.getExtras() != null)
            {
                RemoteMessage.Builder builder = new RemoteMessage.Builder("MessagingService");

                for (String key : intent.getExtras().keySet())
                {
                    builder.addData(key, intent.getExtras().get(key).toString());
                }

                onMessageReceived(builder.build());
            }
            else
            {
                super.handleIntent(intent);
            }
        }
        catch (Exception e)
        {
            super.handleIntent(intent);
        }
    }

, если вы не хотите понижать вашу библиотеку, тогда

Вы можете указать click_action дляуказать намерение, которое должно быть запущено, когда уведомление прослушивается пользователем.Основное действие используется, если не указано click_action.

При запуске намерения вы можете использовать

getIntent().getExtras();

для получения набора, который будет включать любые данные, отправленные вместе с уведомлением..

Подробнее об уведомлении см. https://firebase.google.com/docs/cloud-messaging/android/receive#sample-receive

0 голосов
/ 24 августа 2018

Сообщения с уведомлением и данными, как фоновые, так и передние. В этом случае полезная нагрузка данных доставляется дополнительно к цели вашей деятельности по запуску. Если вы хотите получить его для какой-либо другой деятельности, вам нужно определить click_action для полезных данных. Так что получите дополнительное намерение в своей деятельности по запуску.

Edit: -

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

Так что проверяйте метод oncreate () действия запуска с дополнительными функциями getIntent () при щелчке уведомления.

0 голосов
/ 24 августа 2018

Согласно документации Документация по облачным сообщениям сообщение может быть доставлено в 3 состояниях:

  1. Уведомление
  2. Данные
  3. Уведомление и данные

Фоновая обработка:

Для 2. onMessageReceived будет вызываться без интерфейса и дополнительной обработки. Позже вы можете показать что-то нестандартное.

Когда дело доходит до 3. Android будет показывать уведомление и удерживать данные, пока не произойдет взаимодействие с пользователем. После клика он просто возобновляет существующую деятельность. Ваш onNewIntent не запущен, потому что ваш режим запуска не FLAG_ACTIVITY_SINGLE_TOP.

Вам также следует проверить вывод logcat на: Google Play services out of date.

...