-1

Ich versuche, Benachrichtigungen mit FCM zu senden, funktioniert wie erwartet, aber ich habe zwei verschiedene Verhaltensweisen, die ich behandeln möchte, weil ich bigtextstyle und eine Aktion verwenden:Android-Benachrichtigungen nicht erweitert, wenn App im Hintergrund

Erster Fall: App im Vordergrund, arbeitet onReceiveMessage wie erwartet und die Meldung korrekt

Case 1

Zweiter Fall gezeigt: App im Hintergrund, getötet oder die Dokumentation sagt, dass Nachrichten in der onReceiveMessage nicht behandelt werden e entlüften, und das Layout der Meldung ist nicht die bigtextstyle ein:

Case 2

ich für die Ansicht das gewünschte Layout, einen Weg zu finden versucht, aber nichts funktioniert, sagten sie, dass Datennutzlast in den Extras geliefert der Absicht des Launcher Activity!

Also, was ich will, ist das gleiche Benachrichtigungslayout in den beiden Fällen zu zeigen, weil ich irgendwann die Benachrichtigung verwenden, um einen Anruf auszulösen oder einen Link in einem Browser zu öffnen, nicht die App selbst zu öffnen.

Ich habe meine Nachrichten von Firebase Console wie folgt: Firebase console

und hier ist die Funktion, die mitteilen:

private void notifyMe(RemoteMessage rm){ 
    String title = ""; 
    String body = ""; 
    String phone = ""; 
    String link = ""; 
    long time = System.currentTimeMillis(); 
    Intent iCall; 
    PendingIntent pintCall = null; 
    Intent notificationIntent = null; 
    NotificationManager notificationManager; 
    notificationManager = (NotificationManager)FirebaseMessagingService.this.getSystemService(Context.NOTIFICATION_SERVICE); 

    if (rm.getNotification() != null) { 
     title = rm.getNotification().getTitle(); 
     body = rm.getNotification().getBody(); 
    } 

    if (rm.getData().size() > 0) { 
     phone = rm.getData().get("phone"); 
     link = rm.getData().get("link"); 

     if(link.contains("http://")){ 
      notificationIntent = new Intent(Intent.ACTION_VIEW, Uri.parse(link)); 
     }else{ 
      notificationIntent = new Intent(FirebaseMessagingService.this, MainActivity.class); 
     } 

     if(phone.equalsIgnoreCase("")){ 
      iCall = new Intent(Intent.ACTION_DIAL, Uri.fromParts("tel", phone, null)); 
      pintCall = PendingIntent.getActivity(FirebaseMessagingService.this, 0, iCall, PendingIntent.FLAG_UPDATE_CURRENT); 
     } 

    } 

    notificationIntent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_NEW_TASK); 
    PendingIntent pint = PendingIntent.getActivity(FirebaseMessagingService.this, 0, notificationIntent, 0); 

    NotificationCompat.Builder mBuilder = new NotificationCompat.Builder(this) 
      .setSmallIcon(R.mipmap.ic_launcher) 
      .setContentTitle(title) 
      .setContentText(body) 
      .setWhen(time) 
      .setPriority(Notification.PRIORITY_MAX) 
      .setDefaults(Notification.DEFAULT_LIGHTS| Notification.DEFAULT_SOUND) 
      .setContentIntent(pint); 


    NotificationCompat.BigTextStyle bigtext = new NotificationCompat.BigTextStyle(); 

    bigtext.setBigContentTitle(title); 
    bigtext.bigText(body); 

    mBuilder.setStyle(bigtext); 

    if(!phone.equalsIgnoreCase("")){ 
     mBuilder.addAction(android.R.drawable.ic_menu_call, "Call me!", pintCall); 
    } 

    notificationManager.notify(0, mBuilder.build()); 
} 

Jemand hat einen Weg auf, wie dies zu tun?

Danke.

Antwort

2

Die Firebase-Benachrichtigungskonsole sendet sogenannte "Benachrichtigungsnachrichten". Wenn sich Ihre App nicht im Vordergrund befindet, werden diese Benachrichtigungen vom System selbst verarbeitet und automatisch in der Benachrichtigungsleiste in dem Format angezeigt, das Sie sehen. Wenn der Nutzer auf diese Benachrichtigung klickt, wird die App aktiviert.

Um sicherzustellen, dass die Nachricht immer an Ihre onReceiveMessage-Methode gesendet wird, verwenden Sie "Datennachrichten".

Für eine gute Erklärung, siehe documentation on the different message types.

+0

Sie meinen, dass ich meinen eigenen Server bauen und Registrierung und Senden dort verwalten muss? – Houssem

+0

Das Senden von Datennachrichten ist derzeit nur über Firebase Cloud Messaging und nicht über Firebase Notifications möglich. FCM erfordert, dass Ihr Code Ihren Serverschlüssel angibt, der (wie der Name angibt) nur in einem vertrauenswürdigen Prozess auf einem Server verwendet werden sollte. –

+0

Frank, ich muss mit meinem Server-Typ sprechen, aber ich bin sicher, dass wir immer "Datennachricht" -Typen senden. Wenn sich meine Anwendung im Hintergrund befindet, werden meine ausstehenden Absichten ignoriert und das Benachrichtigungsobjekt wird in meine Startprogrammaktivität geöffnet. Außerdem verwendet es mein Vollfarbsymbol, das ich in meinem onReceive speziell auf Graustufen eingestellt habe. Einige Forum-Threads sagen, dass dies ein Fehler von Firebase ist, aber Sie vermuten, dass es einen Weg gibt, indem Sie einfach einen "Datennachricht" -Typ festlegen? – CQM