如何监听任何活动的firebase通知

时间:2017-02-01 22:14:38

标签: android notifications

我已经按照几个教程从firebase向Android应用程序发送通知,我能够收到通知没问题。

我想了解两件事:

  
      
  1. 如何在用户查看未处理通知的活动时处理通知的接收?

  2.   
  3. 当应用程序正在运行但不在前台并且我收到通知时,当我从系统托盘中单击它时,应用程序会打开已定义广播者的活动 - 如何控制哪个活动是打开?

  4.   

以下是处理通知的活动的代码

public returnType method(arguments) {
    if (an argument is invalid)
        throw new IllegalArgumentException("Message");

    // At this point, you can assume arguments are valid
    // ... the rest of the method ...
}

如果您需要查看代码的其他部分,请告诉我。

1 个答案:

答案 0 :(得分:0)

  

如何在用户查看未处理通知的活动时处理通知的接收?

我会尽量缩短它。当您的应用处于前台时,系统会以您onMessageReceived()的{​​{1}}方式收到通知。现在应该将哪个活动广播到?创建一个基本活动类,并使所有活动扩展它。在BaseActivity中,您可以使用Broadcast方法或尝试使用某些FirebaseMessagingService库,就像我喜欢这样:

Eventbus

任何扩展基本活动的活动都将能够接收通知事件。你可以相应地处理它。

  

当应用程序正在运行但不在前台并且我收到通知时,当我从系统托盘中单击它时,应用程序会打开已定义广播者的活动 - 如何控制打开哪个活动? / p>

通常,当您单击系统生成的通知时,您的第一个活动就会打开。您必须在onCreate()示例中检查@Subscribe(sticky = true, threadMode = ThreadMode.MAIN) public void onNotificationReceived(NotificationReceieveBean bean){ if(bean != null){ ViewUtils.showJobOfferSnackBar(this, bean.map); EventBus.getDefault().removeStickyEvent(bean); } } 实例中的数据与您从服务器发送的数据具有相同的密钥:

Bundle

** 编辑 **

    Bundle bundle = getIntent().getExtras();

    if(bundle != null){
        // if the below condition is true then it means you have received notification
        if(bundle.getString("notification_key_sent_from_server") != null) {
            ViewUtils.handleIncomingFCMNotification(bundle);

            finish(); // finishing the first activity since I want to go to some other activity
            return;

        }

    }