Уведомление о клике, открывающем логин вместо основной - PullRequest
0 голосов
/ 08 марта 2019

В моем приложении есть уведомление на основе Firebase.Получив сообщение с сервера, я вижу уведомление в своем телефоне.Но когда я нажимаю на сообщение в уведомлении, оно всегда открывает мой экран-заставку, за которым следует LoginActivity вместо MainActivity.Я хочу открыть MainActivity и показать детали сообщения, для которого я передаю тело сообщения уведомления в MainActivity с помощью putExtra.

@Override
public void onMessageReceived(RemoteMessage remoteMessage) {

    //Calling method to generate notification
    sendNotification(remoteMessage.getNotification().getTitle().toString(), remoteMessage.getNotification().getBody());
}

//This method is only generating push notification
private void sendNotification(String messageTitle, String messageBody) {
    Intent intent = new Intent(this, MainActivity.class);
    intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
    intent.putExtra("Title", messageTitle);
    intent.putExtra("data", messageBody);
    intent.putExtra("KEY", "Notify");

    PendingIntent pendingIntent = PendingIntent.getActivity(this, 0, intent,
            PendingIntent.FLAG_ONE_SHOT);

    numNotifications = numNotifications + 1;
    Uri defaultSoundUri= RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION);

    inboxStyle.setBigContentTitle(getString(R.string.app_notification)) ;
    inboxStyle.setSummaryText(getString(R.string.app_count_notifications1)
            + numNotifications + getString(R.string.app_count_notifications2));

    inboxStyle.bigText(messageBody);

    NotificationCompat.Builder notificationBuilder = new NotificationCompat.Builder(this)
            .setSmallIcon(R.drawable.q_me_notify)
            .setAutoCancel(true)
            .setSound(defaultSoundUri)
            .setStyle(inboxStyle)
            .setGroup(TAG)
            .setContentIntent(pendingIntent);

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

    try {
        notificationManager.notify(TAG, APPID, notificationBuilder.build());
    } catch (Exception e) {
        e.printStackTrace();
    }
}

Мой файл манифеста Android выглядит следующим образом:

<application
    android:allowBackup="true"
    android:icon="@drawable/final"
    android:label="@string/app_name"
    android:supportsRtl="true"
    android:theme="@style/AppTheme">
    <activity
        android:name=".SplashActivity"
        android:theme="@style/SplashTheme">
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />

            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>
    <activity
        android:name=".LoginActivity"
        android:theme="@style/LoginTheme"
        android:launchMode="singleTask"/>
    <activity
        android:name=".MainActivity"
        android:theme="@style/AppTheme"
        android:launchMode="singleTask"/>

    <!-- Defining Services -->
    <service android:name=".services.FirebaseMessageService">
        <intent-filter>
            <action android:name="com.google.firebase.MESSAGING_EVENT" />
        </intent-filter>
    </service>
    <service android:name=".services.FirebaseInstanceService">
        <intent-filter>
            <action android:name="com.google.firebase.INSTANCE_ID_EVENT" />
        </intent-filter>
    </service>

Это происходит в моем Samsung On8 (J7 Pro) с Android 7.0 - независимо от того, находится ли приложение на переднем или заднем плане (оно всегда открывает LoginActivity).Но в моем Nexus 5 с Android 5.1.1 такое поведение наблюдается только тогда, когда приложение в фоновом режиме / завершено, тогда как оно работает, когда приложение находится на переднем плане.

Итак, мои вопросы:

  1. Как сделать так, чтобы приложение отображало MainActivity на переднем плане независимо от модели и версии ОС, чтобы данные сообщения уведомления отображались правильно?

  2. Когдаприложение находится в фоновом режиме / завершено, как я могу передать значения уведомлений (Splash -> LoginActivity -> MainActivity), чтобы сообщение правильно отображалось в MainActivity?

Ответы [ 2 ]

0 голосов
/ 15 марта 2019

Я решил, пройдя несколько постов и блогов. Самый лучший и подробный, который мне очень помог, - это ответ Мукеша Раны в этом посте При нажатии на уведомление не открывается упомянутое действие

Я отправляю данные «data» с сервера, используя API REST, который всегда выбирается независимо от того, находится ли приложение на переднем или на заднем плане. А в случае, когда приложение находится в фоновом режиме, onClick уведомления всегда запускает экран-заставку (панель запуска). В onMessageReceived я получаю «данные» с помощью remoteMessage.getData (). В намерении я использую intent.putExtra (ключ, значение) для передачи значений в намерение (по умолчанию экран-заставка для приложения в фоновом режиме). Оттуда я передаю его в MainActivity и получаю значения с помощью getStringExtra (key).

0 голосов
/ 09 марта 2019

Добавить TaskStackBuilder, заменить:

PendingIntent pendingIntent = PendingIntent.getActivity(this, 0, intent, PendingIntent.FLAG_ONE_SHOT);

с этим:

TaskStackBuilder stackBuilder = TaskStackBuilder.create(this);
stackBuilder.addNextIntentWithParentStack(intent);
PendingIntent pendingIntent = stackBuilder.getPendingIntent(0,PendingIntent.FLAG_UPDATE_CURRENT);

РЕДАКТИРОВАТЬ: Очевидно, что в вашем MainActivity вы должны иметь логику для извлечения данных из Intent и обновления Activity

...