Firebase通知:点击状态栏通知后,活动无法启动

时间:2017-01-16 09:56:14

标签: android firebase android-notifications firebase-cloud-messaging

我目前遇到以下问题:

  1. 我已经实现了自定义FirebaseMessagingService,并且覆盖了onMessageReceived()方法。此外,当应用程序处于后台时,我从getExtras()获得捆绑包。
  2. 我需要通知内容才能在db中本地保存。
  3. 会发生什么:

    1. 当应用在后台时,从Firebase控制台发送3个通知
    2. 创建了3个状态栏通知。
    3. 点击其中一个 - >启动启动器活动并保存通知中的内容。
    4. 点击其他状态栏通知(当应用仍处于前台时) - >什么都没发生......
    5. 你能帮忙吗?

      启动器活动代码:

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

1 个答案:

答案 0 :(得分:0)

我将假设您在活动的onCreate()方法中拥有启动器活动代码。创建活动并单击另一个通知后,将不再调用onCreate()。

更新用户已经看到的活动需要做的是覆盖显示数据的活动的onNewIntent(Intent intent)方法,并在那里更新您的视图。