如果应用在后台

时间:2017-08-02 06:11:27

标签: android firebase push-notification android-service firebase-cloud-messaging

我正在关注this教程,以便在我的应用中实施Firebase 推送通知功能。

但是我找到了一件事,如果app在foreground中,那么只有我在Toast和TextView中获取(显示)消息

另一方面,如果app在background点亮,我没有收到消息以在TextView和Toast中显示。

(Either App is in Foreground or Background)的情况下,我喜欢在Toast和TextView中显示消息

注意:我正在从Firebase控制台本身推送消息。

有可能吗?

MyFirebaseMessagingService.java

private void handleNotification(String message) {
        if (!NotificationUtils.isAppIsInBackground(getApplicationContext())) {
            // app is in foreground, broadcast the push message
            Intent pushNotification = new Intent(Config.PUSH_NOTIFICATION);
            pushNotification.putExtra("message", message);
            LocalBroadcastManager.getInstance(this).sendBroadcast(pushNotification);

            // play notification sound
            NotificationUtils notificationUtils = new NotificationUtils(getApplicationContext());
            notificationUtils.playNotificationSound();
        }else{
            // If the app is in background, firebase itself handles the notification
        }
    }

MainActivity.java

mRegistrationBroadcastReceiver = new BroadcastReceiver() {
            @Override
            public void onReceive(Context context, Intent intent) {

                // checking for type intent filter
                if (intent.getAction().equals(Config.REGISTRATION_COMPLETE)) {
                    // gcm successfully registered
                    // now subscribe to `global` topic to receive app wide notifications
                    FirebaseMessaging.getInstance().subscribeToTopic(Config.TOPIC_GLOBAL);

                    displayFirebaseRegId();

                } else if (intent.getAction().equals(Config.PUSH_NOTIFICATION)) {
                    // new push notification is received

                    String message = intent.getStringExtra("message");

                    Toast.makeText(getApplicationContext(), "Push notification: " + message, Toast.LENGTH_LONG).show();

                    txtMessage.setText(message);
                }
            }
        };

1 个答案:

答案 0 :(得分:1)

FCM有两种类型的消息:通知和数据。当您希望FCM处理代表客户端应用程序显示通知时,请使用通知消息。如果要在客户端应用程序上处理消息,请使用数据消息。

以下是样本,

 {
  "to": “token ID”,
  "notification": {
     //params
   },
  "data": {
    //params
   }
}

带有消息类型的有效负载时的行为

通知消息

  1. 前景 - onMessageReceived已解雇
  2. 后台 - 通知显示在系统托盘上,由FCM处理
  3. 应用程序未运行 - 通知显示在系统托盘上并由FCM处理
  4. 数据讯息

    1. 前景 - onMessageReceived
    2. 背景 - onMessageReceived
    3. 应用未运行 - onMessageReceived
    4. 通知和数据

      1. 前景 - onMessageReceived
      2. 背景 - 托盘中的通知和数据有效负载将通过点击意图的附加功能
      3. 进行处理
      4. 应用程序未运行 - 托盘中的通知和数据有效负载将通过额外的意图来处理。
      5. 希望它有所帮助!