Firebase Messaging in Background

A

AndrejT

Neues Mitglied
5
Guten Tag

Ich habe in meiner App ein Firebase Messaging eingebaut. Der Server sendet in einer Nachricht die Notification sowie Datas.. Nun funktioniert die
Java:
onMessageReceived(RemoteMessage remoteMessage)
Methode solange die App läuft aber auch nur zur Hälfte. Die "Datas" werden zwar rausgeholt und richtig behandelt jedoch funktioniert nicht die Notification... Mit den Data's kann ich arbeiten die Notification wird jedoch nicht angezeigt. Wenn ich aber die App schliesse (Background oder kill) dann kriege ich eine Notification jedoch passiert nichts mit den Data's ...

Ich habe gelesen, das die Datas in der Launcher Activity behandelt werden wenn man auf die Notification drückt wenn die App geschlossen ist. Die Daten befinden sich im Intent unter den Extras. Ich finde das aber sehr blöd das es erst im Intent unter den Extras erscheint wenn man auf die Notification klickt.. Jemand kann die App auch öffnen ohne auf die Notification zu drücken.

Mein Vorhaben ist es: Der Server sendet einen TAG und eine ID. Sobald die App diesen TAG und diese ID kriegt (egal ob Foreground, Background oder killed), macht es einen REST-Call auf den Server und bezieht die Daten dieses Objekts mit dieser ID neu... Ich mag nicht das jede Minute ein Service den Server fragt ob sich was geändert hat, sondern möchte vom Server selbst benachrichtigt werden ob sich was geändert hat und was sich geändert hat.

Hier der Code:
Java:
 @Override
    public void onMessageReceived(RemoteMessage remoteMessage) {
        super.onMessageReceived(remoteMessage);

        if (remoteMessage.getNotification() != null) {
            String title = "";
            String body = "";
            if (FirebaseResponse.Action.ONE.toString().equals(remoteMessage.getNotification().getBody())) {
                title = getResources().getString(R.string.title_firebase_notification_one);
                body = getResources().getString(R.string.firebase_notification_one);
            }
            sendNotification(title, body);
        }

        if (remoteMessage.getData().size() > 0) {
            if (FirebaseResponse.Action.MY_TAG.toString().equalsIgnoreCase(remoteMessage.getData().get("action"))) {
                databaseHelper = new DatabaseHelper(getApplicationContext());
                reloadObjektById(remoteMessage.getData().get("id"), remoteMessage.getData().get("country"));
            } else if (FirebaseResponse.Action.MY_TAG_2.toString().equalsIgnoreCase(remoteMessage.getData().get("action"))) {
                // TODO
            }
        }
    }
    
    
    
    
    private void sendNotification(String messageBody,String title) {
        Intent intent = new Intent(this, MainActivity.class);
        intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
        PendingIntent pendingIntent = PendingIntent.getActivity(this, 0 , intent, PendingIntent.FLAG_ONE_SHOT);

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

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

Ähnliche Themen

Gemini-Media
Antworten
1
Aufrufe
1.840
swa00
swa00
J
Antworten
0
Aufrufe
556
JoEntwickler
J
D
Antworten
23
Aufrufe
2.538
Data2006
D
Zurück
Oben Unten