Нет необходимости передавать какие-либо дополнительные с намерением. Просто установите флаги как

ользую консоль fcm для отправки сообщений на все устройства, на которых установлено мое приложение, уведомления не имеют дополнительной полезной нагрузки, только сообщение уведомления.

Я хочу знать, существует ли простой способ узнать, была ли активность открыта из щелчка уведомления FCM.

Существует решение для этого путем расширенияFirebaseMessagingService обслуживание и создание уведомления самостоятельно.

Я хочу знать, есть ли другое решение, не расширяя сервис или не передавая дополнения к уведомлению.

Есть ли какие-либо дополнительные данные, которые передаются с намерением, используемым для открытия действия с помощью щелчка уведомления?

 Mohamed Mohaideen AH20 нояб. 2017 г., 08:31
В уведомлении есть контекст, который содержит контекст активности, поэтому вы можете получить его из контекста уведомления.
 Ashkan18 нояб. 2017 г., 22:08
что именно вы хотите? Для меня не ясно, вы хотите знать, сколько вашей записи из уведомления ?? !!
 azizbekian20 нояб. 2017 г., 07:50
Если у вас естьне подклассыFirebaseMessagingServiceКак щелчок по уведомлению запустит нужную вам активность?
 user194067619 нояб. 2017 г., 18:50
@Ashkan: это написано простым английским языком, мой друг: «Я хочу знать, есть ли простой способ узнать, была ли активность открыта из щелчка уведомления FCM».
 user194067620 нояб. 2017 г., 13:32
@azizbekian, чтобы отправлять и показывать уведомления firebase не вынуждает вас создавать подклассы их службы, вы можете отправлять сообщения и разрешать пользователям получать их только путем добавления зависимости обмена сообщениями в файл build.gradle.

Ответы на вопрос(3)

росто установите флаги как

  Intent lIntent = new Intent(getApplicationContext(),YourActivity.class);
        lIntent.addFlags(Intent.FLAG_ACTIVI`enter code here`TY_CLEAR_TOP);
        lIntent.setFlags(Intent.FLAG_ACTIVITY_BROUGHT_TO_FRONT);
        lIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
        startActivity(lIntent);

Messaging, то вы можете установить эти флаги с вашей полезной нагрузкой данных FCM.

Поэтому всякий раз, когда пользователь нажимает на уведомление FCM в системном трее. Должно открываться определенное действие. И если вы хотите получить дополнительные данные пакета, вы можете получить его с помощью getIntent (). GetExtras (); метод.

    "message":{
     "token":"bk3RNwTe3H0:CI2k_HHwgIpoDKCIZvvDMExUdFQ3P1...",
     "notification":{
       "title":"Match update",
       "body":"Arsenal goal in added time, score is now 3-0"
     },
"android":{
           "ttl":"86400s",
           "notification"{
             "click_action":"MainActivity.class" // define your activity here
           }
         },
 "payload": {
         "aps": {
           "category": "NEW_MESSAGE_CATEGORY"
         }
       }
     }

Пожалуйста, обратитесь к ссылке ниже: -

"устанавливает соответствующие ключи, чтобы определить результат нажатия пользователем уведомления на Android и iOS - click_action и category соответственно."

 user194067624 нояб. 2017 г., 10:37
мне действительно нужно добавить токен для каждого сообщения?
 Pankaj Kant Patel24 нояб. 2017 г., 14:40
да токен требуется. Пожалуйста, следуйте официальной документации
Решение Вопроса

вы знаете, что обмен сообщениями на основе FCM создал два типа уведомлений

Во-первых, уведомление, которое мы создаем наonMessageReceived() метод, отметим здесь, чтоonMessageReceived() будет запущен, если приложение находится на переднем плане.

Во-вторых, FCM создает свое собственное уведомление по умолчанию, когда приложение находится в фоновом режиме, в этом случаеonMessageReceived() не перехватывается и, следовательно, мы не можем самостоятельно установить ожидающее намерение.

Примечание: вышеупомянутые типы появляются, когда вы отправляете push-сообщение «уведомление» в свое приложение в случае сообщения me «data»onMessageReceived() запускается независимо от того, находится ли приложение на переднем или заднем плане (уведомления, отправляемые из консоли FCM, являются push-сообщениями типа «уведомления»)

Возвращаясь к вашему вопросу, не ясно, отправляете ли вы push-сообщение с консоли FCM или делаете запрос к серверу FCM, поэтому давайте разберемся здесь.

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

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

public class MyFirebaseMessagingService extends FirebaseMessagingService {

private static final String TAG = "MyFirebaseMsgService";

@Override
public void onMessageReceived(RemoteMessage remoteMessage) {
    //Displaying data in log
    //It is optional


    //Calling method to generate notification
    sendNotification(remoteMessage.getData());
}

//This method is only generating push notification
//It is same as we did in earlier posts
private void sendNotification(Map<String, String> messageBody) {

    Intent intent = new Intent(this, SplashScreen.class);

    intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
    PendingIntent pendingIntent = PendingIntent.getActivity(
            this,
            0,
            setNotificationRoute(messageBody),
            PendingIntent.FLAG_UPDATE_CURRENT);
    Uri defaultSoundUri = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION);
    NotificationCompat.Builder notificationBuilder = new NotificationCompat.Builder(this)
            .setSmallIcon(android.R.drawable.sym_def_app_icon)
            .setContentTitle(messageBody.get("title"))
            .setContentText(messageBody.get("text"))
            .setAutoCancel(true)
            .setSound(defaultSoundUri)
            .setContentIntent(pendingIntent);

    NotificationManager notificationManager =
            (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);

    notificationManager.notify(0, notificationBuilder.build());


}

private Intent setNotificationRoute(Map<String, String> messageBody) {
    Intent intent = null;
    String type = messageBody.get("type");
    if (type != null) {
        switch (type) {
            case "android":    //intercept your payload here to create swit 
                intent = new Intent(this, MainActivity.class);
                break;
            default:
                break;

        }

    }
    return intent;
}
}

и если приложение находится в фоновом режиме, то при нажатии уведомления приложение будет открыто для действия «по умолчанию», вы можете установить любое действие в качестве действия по умолчанию, добавив следующие строки в манифест приложения в фильтре намерений действия:

<category android:name="android.intent.category.DEFAULT" />

В этом упражнении вы можете позвонить, чтобы получить преднамеренные дополнения, а затем получить полезную нагрузку данных, чтобы решить, на каком упражнении вам нужно попасть. Код ниже

    .
    .
    .

        Bundle bundle = getIntent().getExtras();
            if (bundle != null) {
                setNotificationRoute(getIntent().getExtras());
    .
    .
}
 private void setNotificationRoute(Bundle extras) {
    String type = extras.getString("type");
    Intent intent = null;
    if (type != null) {
        switch (type) {
            case "message":
                String room = extras.getString("room");
                intent = new Intent(this, MainActivity.class);
                startActivity(intent);
                break;
            default:
                break;
        }
      }
    }

Сообщение, отправленное с сервера FCM: сообщение, отправленное с вышеупомянутой консоли FCM, аналогично отправке приведенного ниже тела json в виде пост-запроса на сервер FCM:

{ 
    "notification": {
    "title": "Hi Tester",
    "text": "News for testing",
    "sound": "default",
    "badge": 0
  },
  "data":{
    "type": "credits"
  },
  "priority": "high",
  "to": "{{device_token}}"
}

процесс перехвата уведомлений будет таким же для этого случая.

 Pinkesh Darji27 нояб. 2018 г., 10:55
Я получаю нулевое значение на intent.getExtras. Что делать?
 Abhishek Tiwari27 нояб. 2018 г., 11:30
@PinkeshDarji, пожалуйста, опишите, где вы получаете NPE
 user194067624 нояб. 2017 г., 10:44
Я использую консоль fcm для отправки сообщений на все устройства, я уже упоминал об этом, поэтому в основном мне нужно добавить дополнительные функции в раздел Advances, чтобы иметь возможность получать их внутри onCreate () действия? без расширения службы обмена сообщениями? (Я хочу, чтобы пользователи, у которых нет открытого приложения, получали уведомления)
 Abhishek Tiwari27 нояб. 2017 г., 08:00
«(Я только хочу, чтобы пользователи, у которых приложение не открыто, чтобы получать уведомления)», поэтому в основном вы хотите, чтобы фоновые уведомления работали, для этого вы применяете подход к фоновой обработке уведомлений, который будет получать намерение внутри «по умолчанию» действие, которое упоминается в манифесте и извлекает пакет со значением ключа, которое вы передаете из расширенного раздела консоли.

Ваш ответ на вопрос