0

Представьте следующие сценарии:Что происходит, когда уведомление Firebase поступает в фоновом режиме в приложение для Android?

  1. Мое приложение не работает в настоящее время и толчок уведомление отправляется от Firebase
  2. Мое приложение работает на переднем плане и толчок уведомление будет отправлено
  3. Мое приложение работает но был отправлен на фон, перейдя на другое приложение, отправлено уведомление

В каком из перечисленных выше сценариев вызывается моя MainActivity?

Контекст сценария: Я хочу поддерживать определенные значения уровня приложения в android.app.Application реализации, которые обычно устанавливаются в onCreate функции MainActivity. Итак, если уведомление получено, когда мое приложение не запущено, эти значения пусты?

ответ

1
  1. При отправке уведомления от пожарной базы он назовет метод onMessageReceived. Больше информации https://firebase.google.com/docs/cloud-messaging/android/receive
  2. То же самое - onMessageReceived будет называться.
  3. То же самое - onMessageReceived будет называться.

Вам необходимо настроить службу в своем приложении, и служба будет прослушивать уведомления. Служба будет запущена, даже если вы убьете свое приложение.

Теперь, когда вы нажимаете на свое сообщение, он откроет вашу MainActivity или любую другую деятельность, которую вы настроили на намерение уведомления. См. Пример ниже.

Существуют различные способы разместить ваше приложение в фоновом режиме. Если вы нажмете кнопку «Назад», она убьет MainActivity. Если вы нажмете кнопку «домой», она не убьет MainActivity.

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

Метод MainActivity onCreate будет вызываться, когда вы нажимаете на уведомляющее сообщение или запускаете приложение из фона после того, как вы его закрыли с помощью кнопки «Назад».

Для значений: Я не знаю, где вы устанавливаете свои значения, но если вы установили свои значения в методе службы firebase onMessageReceived, тогда ваши значения будут инициализированы при запуске MainActivity. Если ваше приложение не работает в фоновом режиме (это означает, что ваше приложение закрыто, и вы удалили его из фона), тогда ваши значения могут быть пустыми до вызова метода onMessageReceived.

Вот один пример моего firebase службы, где вы можете увидеть, что я использую также MainActivity действий (Intent I = новый Intent (это, MainActivity.class);), когда пользователь нажимает на сообщение:

public class FirebaseMessagingService extends com.google.firebase.messaging.FirebaseMessagingService { 
String TAG = "Notifications"; 
@Override 
public void onMessageReceived(RemoteMessage remoteMessage) { 


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

    Intent i = new Intent(this, MainActivity.class); 
    i.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); 

    PendingIntent pendingIntent = PendingIntent.getActivity(this,0,i,PendingIntent.FLAG_UPDATE_CURRENT); 

    Uri alarmSound = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION); 
    NotificationCompat.Builder builder = new NotificationCompat.Builder(this) 
      .setAutoCancel(true) 
      .setContentTitle(remoteMessage.getNotification().getTitle()) 
      .setContentText(remoteMessage.getNotification().getBody()) 
      .setColor(0xffff7700) 
      .setSmallIcon(R.drawable.ic_launcher) 
      .setVibrate(new long[] { 100, 100, 100, 100}) 
      .setLights(0xffff7700, 300, 1000) 
      .setSound(alarmSound) 
      .setPriority(Notification.PRIORITY_MAX) 
      .setContentIntent(pendingIntent); 

    NotificationManager manager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE); 
    manager.notify(new Random().nextInt(),builder.build()); 
} 


} 
+0

Спасибо за подробное объяснение. – Nagarjun

0
@Override 
public void handleIntent(Intent intent) { 
    super.handleIntent(intent); 
    intent.getExtras().get("body"); 
     //do something, trigger notification builder here... 
} 

** onMessageReceived() метод будет выполнен, только приложение находится на переднем плане для firebase_instance_messageservice.Для фонового процесса используйте aim_handler (показано выше) **

Вы можете получать значения от каждого ключа, используя intent.getExtras(). Get ("yourkey"); и выполнить действие при получении push-уведомления.

Связанный ответ для выполнения фона следующий. Они будут полезны: Background process for firebase push notification

Firebase docs