3

Я в настоящее время испытывает следующие проблемы:Firebase уведомления: деятельность не запускается, когда уведомление в строке состояния нажата

  1. Я реализовал пользовательский FirebaseMessagingService и метод onMessageReceived() является перекрываться. Также, когда приложение находится в фоновом режиме, я получаю пакет из getExtras().
  2. Мне нужно содержание уведомления, чтобы сохранить его локально в db.

Что происходит:

  1. Отправить 3 уведомлений от Firebase консоли, когда приложение находится в фоновом режиме
  2. 3 строки состояния уведомления созданы.
  3. Нажмите на одну из них -> активность запуска открывается, а содержимое извещения сохраняется.
  4. Нажмите на другие строки состояния уведомлений (если приложение все еще на переднем плане) -> ничего не происходит ...

Не могли бы вы помочь?

Launcher код активность:

if (getIntent().getExtras() != null) { 
     Bundle extras = getIntent().getExtras(); 
     String title = (String) extras.get(Constants.TOPIC_KEY_TITLE); 
     String imageUrl = (String) extras.get(Constants.TOPIC_KEY_IMAGE_URL); 
     String url = (String) extras.get(Constants.TOPIC_KEY_URL); 
     String description = (String) extras.get(Constants.TOPIC_KEY_DESCRIPTION); 
     Long sentTime = (Long) extras.get(Constants.TOPIC_KEY_SENT_TIME); 

     if (Util.isStringsNotNull(description)) { 
      News news = new News(); 
      news.setTitle(title); 
      news.setMessage(description); 
      news.setDescription(description); 
      news.setImageUrl(imageUrl); 
      news.setUrl(url); 
      news.setDate(sentTime); 
      news.save(); 

      EventBus.getDefault().post(new OnNewsUpdatedEvent(news)); 
      AppPreferences.incrementUnseenNewsCount(this); 
     } 
    } 

    String action = getIntent().getAction(); 

    if (Util.isStringNotNull(action) && action.equals(ACTION_SEARCH)) { 
     startActivity(MainActivity.getIntentActionSearch(this)); 
    } else { 
     startActivity(MainActivity.getIntent(this)); 
    } 

Пользовательские FirebaseMessagingService код:

@Override 
public void onMessageReceived(RemoteMessage remoteMessage) { 
    LogUtil.log(BASIC_TAG, "onMessageReceived called!"); 

    String description = null; 
    String imageUrl = null; 
    String url = null; 
    String title = null; 

    Map<String, String> dataMap = remoteMessage.getData(); 
    if (dataMap != null && !dataMap.isEmpty()) { 
     description = dataMap.get(Constants.TOPIC_KEY_DESCRIPTION); 
     imageUrl = dataMap.get(Constants.TOPIC_KEY_IMAGE_URL); 
     url = dataMap.get(Constants.TOPIC_KEY_URL); 
     title = dataMap.get(Constants.TOPIC_KEY_TITLE); 
    } 

    if (Util.isStringNotNull(description)) { 
     RemoteMessage.Notification notification = remoteMessage.getNotification(); 

     News news = new News(); 
     news.setDate(remoteMessage.getSentTime()); 
     news.setTitle(Util.isStringNotNull(title) ? title : notification.getTitle()); 
     news.setMessage(notification.getBody()); 
     news.setDescription(description); 
     news.setImageUrl(imageUrl); 
     news.setUrl(url); 
     news.save(); 

     EventBus.getDefault().post(new OnNewsUpdatedEvent(news)); 
     AppPreferences.incrementUnseenNewsCount(this); 
    } 
} 
+0

Пожалуйста, внесите ваш код – Ameer

+0

@Ameer, уже сделано! –

ответ

0

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

Что нужно сделать, чтобы обновить активность, уже видимую пользователю, переопределяет метод onNewIntent (намерение намерения) активности, в которой отображаются данные, и обновляет их.

+0

Я пробовал ваше решение. К сожалению, метод onNewIntent (намерение намерения) не был вызван (в MainActivity, который является в настоящее время видимым действием), и ничего не произошло. Должен ли я установить специальный флаг для этой активности в AndroidManifest.xml? –

+0

У меня нет опыта отправки сообщений из Firebase Console (мы все еще используем GCM), но в уведомлениях afaik всегда есть PendingIntent как ContentIntent, если вы можете открыть приложение, нажав на них. Если приложение уже находится на переднем плане, это будет включено в onNewIntent при запуске с однократным запуском режима (через манифест или IntentFlag) и в противном случае запускает новое действие в текущем стеке задач. Не могли бы вы предоставить дополнительную информацию о режимах запуска? – Sander

+0

Я не устанавливал какие-либо конкретные режимы запуска в файле AndroidManifest.xml ... –

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

  • Нет связанных вопросов^_^