FCM ile uygulama kapalı veya arka plandayken alınan mesajda bildirimi açılıyor ve intent ile notification içindeki datayı alıp süreçte ilerliyorum.
Uygulama önplanda çalışırken Firebase servise oluşturdum onMessageReceived içinde bildirim oluşturup ekranda bildirimi gösteriyorum. Burda istediğim farklılık ise uygula içinde oluşan bildirimi bulunduğum sayfadan veya activitiyi tekrar başlatmadan nasıl devam edebilirim. Navigation ile C sayfasındaysam bildirim ile A sayfasına gidebilmem gerek. Burda navigation kontrolu yapmam lazım. Mesela D sayfasındaysam bildirime tıklasa bile işlem yapmamalı veya altan toast mesajı ile kullanıcı uyarılmalı gibi.
Bildirime tıkladığımda hep mainActivity oncreate tetikleniyor.
onMessageReceived bir event oluşturup MainActiviy içinde dinleyip işlem yapabiliyorum ama bildirime tıklandığında navcontrollerda tekrar initialize oluyor.
Kullandığınız bir yöntem var mı benzer senaryolar için.
FCM uygulama ön plandayken alınan mesajlar
10
●206
- 06-08-2023, 18:07:10
- 06-08-2023, 18:10:28
- 06-08-2023, 18:12:59Teşekkürler hocam, o dokumanı yuttum diyebilirim
uygulama önlandayken bildirim oluşturup gönderme yapmaya kadar anlatıyor. Burdan sonrası için bir çözüm üretemedim bir türlü.
- 07-08-2023, 10:50:24Bildirime tıkladığınızda uygulamanızın belirli bir sayfasına (activity veya fragment) yönlendirme yapmakmı istiyorsunuzmetinguner adlı üyeden alıntı: mesajı görüntüle
- 07-08-2023, 11:00:10Aslında evet ama on create üzerinden değil. Yani uygulama Life Cycle yeniden oluşmasını istemiyorum. Bildirime tıklandığında oncreate çağrılıyor orda notification içinden gelen datayı alıp ilgili fragmenta gidebiliyorsun. Benim istediğim notificationa tıklayıp uygulama içinden bir aksiyon almış gibi ilgili fragmenta tıklamak. Bildirime tıklandığında her durumda oncreate çalışıyor sanırım. Bir formulunu bulamadım.
Şuan için basit ürettiğim çözüm, uygulama içinde ise bir Event ile dinleyip (belirli sayfalarda tetikleme yapmayacak) alert çıkacak (bildirim değil) o alert ile yönlendirilecek. - 07-08-2023, 11:09:46Bildirimin içeriğini al
Fragment 'ya git işlemini gerçekleştir
Fragment Bye git işlemini gerçekleştir
click_action alanı yerine özel bir veri örnek, bir komut veya işlem adı taşıyan bir veri alanı ekleyebiliriz
@Override public void onMessageReceived(RemoteMessage remoteMessage) { String notificationMessage = remoteMessage.getNotification().getBody(); String customAction = remoteMessage.getData().get("customAction"); if ("goToFragmentA".equals(customAction)) { performActionInFragmentA(notificationMessage); } else if ("goToFragmentB".equals(customAction)) { performActionInFragmentB(notificationMessage); } } private void performActionInFragmentA(String message) { FragmentA fragmentA = (FragmentA) getSupportFragmentManager().findFragmentByTag("fragmentA"); if (fragmentA != null) { fragmentA.doSomethingWithMessage(message); } } private void performActionInFragmentB(String message) { FragmentB fragmentB = (FragmentB) getSupportFragmentManager().findFragmentByTag("fragmentB"); if (fragmentB != null) { fragmentB.doSomethingWithMessage(message); } }Olabilirmi ? - 07-08-2023, 12:52:23Teşekkürler,
Bu senaryoda bildirim üstten açılmıyor diye anladım. Aslında benzer bir senaryo geliştirdim şuanda, bildirim içeriğini alıyorum, bildirim mesajı yukarda çıkmıyor. Uygulama içinde public bir bildirim açıyorum kullanıcıya ve o şekilde yönetiyorum. - 07-08-2023, 13:12:37showNotification(notificationMessage, customAction);
kullanarak üsttende gösterebiliriz
@Override public void onMessageReceived(RemoteMessage remoteMessage) { String notificationMessage = remoteMessage.getNotification().getBody(); String customAction = remoteMessage.getData().get("customAction"); showNotification(notificationMessage, customAction); } private void showNotification(String message, String customAction) { Intent intent = new Intent(this, YourTargetActivity.class); intent.putExtra("notificationData", message); intent.putExtra("customAction", customAction); PendingIntent pendingIntent = PendingIntent.getActivity(this, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT); NotificationCompat.Builder notificationBuilder = new NotificationCompat.Builder(this, CHANNEL_ID) .setContentTitle("Başlık") .setContentText(message) .setSmallIcon(R.drawable.ic_notification) .setContentIntent(pendingIntent); NotificationManagerCompat notificationManager = NotificationManagerCompat.from(this); notificationManager.notify(notificationId, notificationBuilder.build()); }bundan sonra onCreate veya onNewIntent kullanmamız gerek
@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_your_target); if (getIntent() != null && getIntent().hasExtra("notificationData") && getIntent().hasExtra("customAction")) { String notificationMessage = getIntent().getStringExtra("notificationData"); String customAction = getIntent().getStringExtra("customAction"); if ("goToFragmentA".equals(customAction)) { navigateToFragmentA(notificationMessage); } else if ("goToFragmentB".equals(customAction)) { navigateToFragmentB(notificationMessage); } } } private void navigateToFragmentA(String message) { FragmentA fragmentA = new FragmentA(); } private void navigateToFragmentB(String message) { FragmentB fragmentB = new FragmentB(); } - 07-08-2023, 15:00:19Bu code içinde gösterebiliyoruzda geçici dosyalar silinmiş oluyor. Kullandığım naticigation stack komple gidiyor bu şekilde.
Çok teşekkürler cevaplar için hocam. Şuan için gecici çözüm olarak kendi içinde alert göstererek ilerleyeceğim. Proje büyük nereye dokunsam ek bişeyler çıkıyor diye fazla üstelemedim artık
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_your_target);
if (getIntent() != null && getIntent().hasExtra("notificationData") && getIntent().hasExtra("customAction")) {
String notificationMessage = getIntent().getStringExtra("notificationData");
String customAction = getIntent().getStringExtra("customAction");
if ("goToFragmentA".equals(customAction)) {
navigateToFragmentA(notificationMessage);
} else if ("goToFragmentB".equals(customAction)) {
navigateToFragmentB(notificationMessage);
}
}
}
private void navigateToFragmentA(String message) {
FragmentA fragmentA = new FragmentA();
}
private void navigateToFragmentB(String message) {
FragmentB fragmentB = new FragmentB();
}

uygulama önlandayken bildirim oluşturup gönderme yapmaya kadar anlatıyor. Burdan sonrası için bir çözüm üretemedim bir türlü.