0

Как указано в Firebase dev docs, я внедрил Сервис, который расширяет FirebaseMessagingService и переопределяет обратный вызов onMessageReceived. Я поставил сообщение журнала в первой строке внутри метода onMessageReceived.Firebase Cloud Messaging onMessageReceived не запускается

Приложение работает в фоновом режиме Я не вижу log logat, но я вижу уведомление, отправленное в системе.

App на переднем плане я ни видеть, ни журнал уведомлений в системном трее

Любая идея, что происходит?

Manifest

<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 
    } 
} 
+0

добавить свой класс обслуживания коды и манифест код на вопрос – Shubhank

+0

путь правильный для службы (имени пакета) – Shubhank

+0

Да, иначе приложение не будет даже скомпилировать. Как вы можете видеть, я использую относительный путь в манифесте. «.fcm.MovieMessagingService» – Sai

ответ

2

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

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

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

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

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

1

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

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()); 
    } 

} 
Смежные вопросы