Firebase Cloud Messaging onMessageReceived не запускается

Как указано в документах для разработчиков Firebase, я реализовал службу который расширяет FirebaseMessagingService и переопределяет обратный вызов onMessageReceived. Я поместил сообщение журнала в первую строку внутри метода onMessageReceived.

Приложение работает в фоновом режиме Я не вижу журнал в logcat, но вижу уведомление, размещенное в системе try.

Приложение на переднем плане Я не вижу ни журнала, ни уведомлений на панели задач

Есть идеи, что происходит?

Манифест

   <service
        android:name=".fcm.MovieMessagingService">
        <intent-filter>
            <action android:name="com.google.firebase.MESSAGING_EVENT"/>
        </intent-filter>
    </service>

Класс обслуживания

public class MovieMessagingService extends FirebaseMessagingService {

    private static final String LOG_TAG = MovieMessagingService.class.getSimpleName();

    @Override
    public void onMessageReceived(RemoteMessage remoteMessage) {


        Log.d(LOG_TAG, "From: " + remoteMessage.getFrom());

    }

    /**
     * Create and show a simple notification containing the received FCM message.
     *
     * @param messageBody FCM message body received.
     */
    private void sendNotification(String messageBody) {
        Log.d(LOG_TAG, "Presenting Notification with message body: " + messageBody);
//more code
    }
}

person Sai    schedule 08.06.2016    source источник
comment
добавьте код класса обслуживания и код манифеста в вопрос   -  person Shubhank    schedule 08.06.2016
comment
правильный ли путь для службы (имя пакета)   -  person Shubhank    schedule 08.06.2016
comment
Да, иначе приложение даже не скомпилируется. Как видите, я использую относительный путь в файле manifest-.fcm.MovieMessagingService.   -  person Sai    schedule 08.06.2016
comment
Как вы отправляете сообщение на устройство?   -  person Arthur Thompson    schedule 09.06.2016
comment
Из консоли Firebase. console.firebase.google.com –> Уведомления – Новое сообщение   -  person Sai    schedule 09.06.2016
comment
Не уверен, что это имеет какое-либо отношение к следующим зависимостям Gradle в app/build.gradle compile com.google.firebase:firebase-messaging:9.0.0 compile com.google.firebase:firebase-core:9.0.0   -  person Sai    schedule 09.06.2016


Ответы (2)


На самом деле поведение приложения при получении сообщений, включая уведомления и полезные данные, зависит от того, находится ли приложение в фоновом режиме или на переднем плане, например:

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

Находясь на переднем плане, ваше приложение получает объект сообщения с обоими прикрепленными полезными нагрузками.

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

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

person 0xAliHn    schedule 11.08.2016
comment
2 года и далее. Когда я отправляю как уведомление, так и полезную нагрузку данных, мое приложение (работающее на переднем плане) не получает обратный вызов onMessageReceived - person Dibzmania; 12.09.2018
comment
Нажмите на уведомление, а затем откройте свое приложение. onMessageReceived следует вызывать, если вы правильно выполнили часть кода. - person 0xAliHn; 12.09.2018
comment
Приложение находится на переднем плане, поэтому уведомления нет. Удивительно, но если я отправлю сообщение с уведомлением и полезной нагрузкой данных из композитора Firebase, это сработает. - person Dibzmania; 12.09.2018

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

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.
 */
// [START receive_message]
@Override
public void onMessageReceived(RemoteMessage remoteMessage) {
    // [START_EXCLUDE]
    // There are two types of messages data messages and notification messages. Data messages are handled
    // here in onMessageReceived whether the app is in the foreground or background. Data messages are the type
    // traditionally used with GCM. Notification messages are only received here in onMessageReceived when the app
    // is in the foreground. When the app is in the background an automatically generated notification is displayed.
    // When the user taps on the notification they are returned to the app. Messages containing both notification
    // and data payloads are treated as notification messages. The Firebase console always sends notification
    // messages. For more see: https://firebase.google.com/docs/cloud-messaging/concept-options
    // [END_EXCLUDE]

    Log.d(TAG, "From: " + remoteMessage.getFrom());

    // Check if message contains a data payload.
    if (remoteMessage.getData().size() > 0) {
        Log.d(TAG, "Message data payload: " + remoteMessage.getData());
    }

    // Check if message contains a notification payload.
    if (remoteMessage.getNotification() != null) {
        Log.d(TAG, "Message Notification Body: " + remoteMessage.getNotification().getBody());
    }

}
person Student    schedule 02.03.2017