2

Я знаю, что этот вопрос кажется дублирующим, но для моего требования я искал много сообщений в Интернете, но для меня ничего не работало.Открыть конкретную активность/фрагмент после нажатия на уведомление Firebase, когда приложение закрыто

Мое требование

Я использую Firebase, чтобы получить уведомления толчка. Когда приложение было открыто, все работает нормально, но моя проблема заключается в том, что приложение находится в фоновом режиме/закрыто, если появилось какое-либо push-уведомление. Я хочу открыть конкретную активность или фрагмент при нажатии на это уведомление, но он всегда открывает запуск/основное действие.

Для этого я попытался следующие сценарии

Сценарий 1

Использовал bundle для передачи данных уведомления от FirebaseMessagingService на пусковую/Основной вид деятельности и на основе данных расслоении я перенаправляет к конкретной деятельности/фрагмент

Сценарий 2

С помощью Sharedpreference

Сценарий 3

Используя intent.putExtra

после вышеописанных сценариев все работает нормально, когда было открыто приложение, но если мое приложение было закрыто означает, что он всегда перенаправляет на главную/пусковой деятельности

Мой код

Intent intent = new Intent(this, MainActivity.class); 
    intent.putExtra("reqTo", messageBody); 

    intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); 
    PendingIntent pendingIntent = PendingIntent.getActivity(this, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT); 

    Uri defaultSoundUri= RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION); 
    NotificationCompat.Builder notificationBuilder = new NotificationCompat.Builder(this) 
      .setSmallIcon(R.mipmap.ic_launcher) 
      .setContentTitle(title) 
      .setContentText(messageBody) 
      .setAutoCancel(true) 
      .setSound(defaultSoundUri) 
      .setContentIntent(pendingIntent); 

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

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

Итак, кто-нибудь знает, как открыть конкретное мероприятие/фрагмент, когда вы нажимаете уведомление Push-Firebase, когда приложение закрыто.

+0

Пожалуйста, проверьте мой ответ.Если у вас все еще есть проблема, дайте мне ответ, я помогу вам –

ответ

1
public void showNotificationMessage(final String title, final String message, Intent intent) { 
    // Check for empty push message 
    if (TextUtils.isEmpty(message)) 
     return; 


// notification icon 
final int icon = R.drawable.logo; 

intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SINGLE_TOP); 
final PendingIntent resultPendingIntent = 
     PendingIntent.getActivity(
       mContext, 
       0, 
       intent, 
       PendingIntent.FLAG_CANCEL_CURRENT 
     ); 

final NotificationCompat.Builder mBuilder = new NotificationCompat.Builder(
     mContext); 

final Uri alarmSound = Uri.parse(ContentResolver.SCHEME_ANDROID_RESOURCE 
     + "://" + mContext.getPackageName() + "/raw/notification"); 


    showSmallNotification(mBuilder, icon, title, message, resultPendingIntent, alarmSound); 
    playNotificationSound(); 

} 



private void showSmallNotification(NotificationCompat.Builder mBuilder, int icon, String title, String message, PendingIntent resultPendingIntent, Uri alarmSound) { 

      NotificationCompat.InboxStyle inboxStyle = new NotificationCompat.InboxStyle(); 

      inboxStyle.addLine(message); 

      Notification notification; 
      notification = mBuilder.setSmallIcon(icon).setTicker(title).setWhen(0) 
        .setAutoCancel(true) 
        .setContentTitle(title) 
        .setContentIntent(resultPendingIntent) 
        .setSound(alarmSound) 
        .setStyle(inboxStyle) 
        .setSmallIcon(R.drawable.logo) 
        .setLargeIcon(BitmapFactory.decodeResource(mContext.getResources(), icon)) 
        .setContentText(message) 
        .build(); 

      NotificationManager notificationManager = (NotificationManager) mContext.getSystemService(Context.NOTIFICATION_SERVICE); 
      notificationManager.notify(Config.NOTIFICATION_ID, notification); 
     } 


private void showBigNotification(Bitmap bitmap, NotificationCompat.Builder mBuilder, int icon, String title, String message, PendingIntent resultPendingIntent, Uri alarmSound) { 
     NotificationCompat.BigPictureStyle bigPictureStyle = new NotificationCompat.BigPictureStyle(); 
     bigPictureStyle.setBigContentTitle(title); 
     bigPictureStyle.setSummaryText(Html.fromHtml(message).toString()); 
     bigPictureStyle.bigPicture(bitmap); 
     Notification notification; 
     notification = mBuilder.setSmallIcon(icon).setTicker(title).setWhen(0) 
       .setAutoCancel(true) 
       .setContentTitle(title) 
       .setContentIntent(resultPendingIntent) 
       .setSound(alarmSound) 
       .setStyle(bigPictureStyle) 
       .setSmallIcon(R.drawable.logo) 
       .setLargeIcon(BitmapFactory.decodeResource(mContext.getResources(), icon)) 
       .setContentText(message) 
       .build(); 

     NotificationManager notificationManager = (NotificationManager) mContext.getSystemService(Context.NOTIFICATION_SERVICE); 
     notificationManager.notify(Config.NOTIFICATION_ID_BIG_IMAGE, notification); 
    } 

Вы можете проверить приложение закрыто или не нравится этот

if (!NotificationUtils.isAppIsInBackground(getApplicationContext())) { 
+0

надеюсь, что это поможет. вы должны передать намерение в этой функции –

+0

okay thnq, я проверю его и дам знать – Bahu

+0

ok bro. поможет вам, если вы получите какую-то ошибку или проблему. –

1

Это очень похоже на мой ответ Приводимые здесь: https://stackoverflow.com/a/41441631/1291714

В целом, хотя, вы должны использовать Firebase Cloud Messaging и а не уведомления Firebase, чтобы получать сообщение в фоновом режиме и выполнять пользовательскую обработку. Вам нужно отправить сообщения «данные» клиенту, а затем в свою службу, вы тогда всегда получите обратный вызов, является ли приложение на переднем плане или на заднем плане.

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

Подробнее читайте здесь: https://firebase.google.com/docs/notifications/android/console-audience