Java Android versiyonda Firebase mesaj ile belirli bir kullanıcıya bildirim göndermek

BayCoder

Hectopat
Katılım
8 Mart 2021
Mesajlar
533
Makaleler
4
Çözümler
4
Daha fazla  
Cinsiyet
Erkek
Merhabalar, Android Studio ile Java'yla bir uygulama yazıyorum. Bir EditText'im ve buton'um var. Sistemde onay istekleri var. Onay istekleri reddedilince kişiye bildirim göndermek istiyorum. Buton tıklanınca EditText'deki veriyi alacak ve kullanıcıya o veriyi bildirim gösterecek. FCM ile token oluşturma ve firebase kaydını yaptım. Ama bildirim gönderme kısmını yapamadım. Güncel bir şekilde anlatabilecek olan var mı? Allta token oluşturma için oluşturduğum class ve red kısmı ayrı ayrı bulunuyor. Bu haliyle bildirim gönderirken bir hata almıyorum. Log'da bir problem görünmüyor ama bildirim gönderip gösteremiyorum. Yalnızca Firebase Console'dan bildirim gönderince görünüyor.




Java:
public class MessageService extends FirebaseMessagingService {
    private static final String TAG = "FCM";

    @Override
    public void onNewToken(@NonNull String token) {
        super.onNewToken(token);
        Log.d(TAG, "New Token: " + token);
    }

    @Override
    public void onMessageReceived(@NonNull RemoteMessage message) {
        super.onMessageReceived(message);
        Log.d(TAG, "Gönderen: " + message.getFrom());
        if (message.getData().size() > 0) {
            Log.d(TAG, "Mesaj Verileri: " + message.getData());
            sendNotification(message.getNotification().getBody());
        }
        if (message.getNotification() != null)
            Log.d(TAG, "Message Notification Body:" + message.getNotification().getBody());
    }

    private void sendNotification(String messageBody) {
        Intent intent = new Intent(getApplicationContext(), IsteklerimActivity.class);
        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.drawable.logo_beyaz)
                .setContentTitle("Arşiv Numara")
                .setContentText(messageBody)
                .setAutoCancel(true)
                .setSound(defaultSoundUri)
                .setContentIntent(pendingIntent);

        NotificationManager notificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
        notificationManager.notify(0, notificationBuilder.build());

    }
}

Java:
btnRedGonder.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                redNeden = etRedNeden.getText().toString();
                contactAdapter.redOnayli(seciliNumara, redNeden);

                bildirimGonder(seciliNumara, redNeden);
                RedActivity.super.onBackPressed();
            }
        });
    }

    private void bildirimGonder(String secilinumara, String redNeden) {
        FirebaseFirestore db = FirebaseFirestore.getInstance();
        FirebaseMessaging firebaseMessaging = FirebaseMessaging.getInstance();

        CollectionReference onayliArsivIstekRef = db.collection("istek");

        Query query = onayliArsivIstekRef.whereEqualTo("number", secilinumara);

        query.get().addOnCompleteListener(new OnCompleteListener<QuerySnapshot>() {
            @Override
            public void onComplete(@NonNull Task<QuerySnapshot> task) {
                if (task.isSuccessful()) {
                    for (QueryDocumentSnapshot document : task.getResult()) {
                        String mail = document.getString("mail");
                        if (mail != null) {
                            // Eşleşen numaradaki maili bulduk, şimdi kullanıcının tokenını alalım
                            DocumentReference kullaniciRef = db.collection("kullanici").document(mail);
                            kullaniciRef.get().addOnCompleteListener(new OnCompleteListener<DocumentSnapshot>() {
                                @Override
                                public void onComplete(@NonNull Task<DocumentSnapshot> task) {
                                    if (task.isSuccessful()) {
                                        DocumentSnapshot kullaniciDocument = task.getResult();
                                        if (kullaniciDocument.exists()) {
                                            String hedefCihazToken = kullaniciDocument.getString("token");
                                            String bildirimBaslik = "Onay Reddedildi";
                                            String bildirimIcerik = "Gönderdiğiniz onay red edildi. Red nedeni: " + redNeden;

                                            Map<String, String> bildirimVerileri = new HashMap<>();
                                            bildirimVerileri.put("title", bildirimBaslik);
                                            bildirimVerileri.put("body", bildirimIcerik);

                                            RemoteMessage.Builder mesajOlusturucu = new RemoteMessage.Builder(hedefCihazToken);
                                            mesajOlusturucu.setData(bildirimVerileri);

                                            firebaseMessaging.send(mesajOlusturucu.build());
                                        } else {
                                            Log.d("kullanici", "Kullanıcı bulunamadı");
                                        }
                                    } else {
                                        Log.d("kullanici", "Firestore hatası: " + task.getException());
                                    }
                                }
                            });
                        } else {
                            Log.d("kullanici", "Eşleşen numarada mail yok");
                        }
                    }
                } else {
                    Log.d("kullanici", "Query hatası: " + task.getException());
                }
            }
        });
    }
 
Son düzenleyen: Moderatör:

Technopat Haberler

Geri
Yukarı