wake-up-neo.net

Bestimmte Aktivität öffnen, wenn in FCM eine Benachrichtigung angeklickt wurde

Ich arbeite an einer App, in der ich die Benachrichtigung anzeigen muss .. Für die Benachrichtigung verwende ich FireBase Cloud Messaging (FCM) . Ich kann Benachrichtigungen erhalten, wenn sich die App im Hintergrund befindet.

Wenn ich jedoch auf Benachrichtigung klicke, leite ich zu home.Java page. Ich möchte, dass es auf Notification.Java page umleitet.

Sagen Sie mir bitte, wie Sie die Aktivität in Click of notification .. angeben. Ich benutze zwei Dienste: 

1.) MyFirebaseMessagingService

2.) MyFirebaseInstanceIDService

Dies ist mein Codebeispiel für die onMessageReceived () - Methode in der MyFirebaseMessagingService-Klasse.

public class MyFirebaseMessagingService extends FirebaseMessagingService {

private static final String TAG = "FirebaseMessageService";
Bitmap bitmap;


public void onMessageReceived(RemoteMessage remoteMessage) {



    Log.d(TAG, "From: " + remoteMessage.getFrom());

    // Check if message contains a data payload.
    if (remoteMessage.getData().size() > 0) {
        Log.d(TAG, "Message data payload: " + remoteMessage.getData());
    }

    // Check if message contains a notification payload.
    if (remoteMessage.getNotification() != null) {
        Log.d(TAG, "Message Notification Body: " + remoteMessage.getNotification().getBody());
    }

    // Also if you intend on generating your own notifications as a result of a received FCM
    // message, here is where that should be initiated. See sendNotification method below.
}
/**
 * Create and show a simple notification containing the received FCM message.
 */

private void sendNotification(String messageBody, Bitmap image, String TrueOrFalse) {
    Intent intent = new Intent(this, Notification.class);
    intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);

    intent.putExtra("Notification", TrueOrFalse);
    PendingIntent pendingIntent = PendingIntent.getActivity(this, 0 /* Request code */, intent,
            PendingIntent.FLAG_ONE_SHOT);

    Uri defaultSoundUri = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION);
    NotificationCompat.Builder notificationBuilder = new NotificationCompat.Builder(this)
            .setLargeIcon(image)/*Notification icon image*/
            .setContentTitle(messageBody)
            .setStyle(new NotificationCompat.BigPictureStyle()
             .bigPicture(image))/*Notification with Image*/
            .setAutoCancel(true)
            .setSound(defaultSoundUri)
            .setContentIntent(pendingIntent);

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

    notificationManager.notify(0 /* ID of notification */, notificationBuilder.build());
}

/*
*To get a Bitmap image from the URL received
* */
public Bitmap getBitmapfromUrl(String imageUrl) {
    try {
        URL url = new URL(imageUrl);
        HttpURLConnection connection = (HttpURLConnection) url.openConnection();
        connection.setDoInput(true);
        connection.connect();
        InputStream input = connection.getInputStream();
        Bitmap bitmap = BitmapFactory.decodeStream(input);
        return bitmap;

    } catch (Exception e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
        return null;

    }
}
13
Arman Reyaz

Mit FCM können Sie zwei Nachrichtentypen an Clients senden:

1. Benachrichtigungsnachrichten: wird manchmal als "Displaynachrichten" betrachtet.

FCM zeigt die Nachricht automatisch im Namen der Client-App an Endgeräte an. Benachrichtigungsnachrichten verfügen über vordefinierte, für Benutzer sichtbare Schlüssel. 

2. Datennachrichten:, die von der Client-App verarbeitet werden.

Die Client-App ist für die Verarbeitung von Datennachrichten verantwortlich. Datennachrichten haben nur benutzerdefinierte Schlüssel-Wert-Paare.

Laut FCM-Dokument Nachrichten in einer Android-App empfangen

  • Benachrichtigungen werden gesendet, wenn sich Ihre App im Hintergrund befindet. In diesem Fall wird die Benachrichtigung an die Systemablage des Geräts gesendet. Wenn ein Benutzer auf eine Benachrichtigung tippt, wird standardmäßig das App-Startprogramm geöffnet.
  • Nachrichten mit sowohl Benachrichtigungs- als auch Datennutzdaten, sowohl Hintergrund als auch Vordergrund. In diesem Fall wird die Benachrichtigung an den gesendet
    Systemablage des Geräts, und die Datennutzlast wird in den Extras geliefert der Absicht Ihrer Launcher-Aktivität.

Setzen Sie click_action in der Benachrichtigungsnutzlast:

Wenn Sie also die im Hintergrund eingegangenen Nachrichten bearbeiten möchten, müssen Sie click_action mit der Nachricht senden. 

click_action ist ein Parameter der Benachrichtigungsnutzlast

Wenn Sie Ihre App öffnen und eine bestimmte Aktion ausführen möchten, setzen Sie click_action in der Benachrichtigungsnutzlast und ordnen Sie sie einem Absichtsfilter in der zu startenden Aktivität zu. 

Setzen Sie zum Beispiel click_action auf OPEN_ACTIVITY_1, um einen Intent-Filter wie folgt auszulösen:

<intent-filter>
  <action Android:name="OPEN_ACTIVITY_1" />
  <category Android:name="Android.intent.category.DEFAULT" />
</intent-filter>

Die FCM-Nutzlast sieht wie folgt aus:

{
  "to":"some_device_token",
  "content_available": true,
  "notification": {
      "title": "hello",
      "body": "test message",
      "click_action": "OPEN_ACTIVITY_1"
  },
  "data": {
      "extra":"juice"
  }
}
25
Priyank Patel

Wenn sich die App im Hintergrund befindet, muss die Absicht in Ihrer Starteraktivität bereitgestellt werden. Damit wird Ihre Startaktivität geöffnet. Jetzt prüfen Sie, ob sich Daten in der Startfunktion in der Startfunktion befinden, und starten Sie dann die erforderliche Aktivität.

4
ak0692

AndroidManifest.xml

<activity Android:name="YOUR_ACTIVITY">
    <intent-filter>
        <action Android:name="com.example.yourapplication_YOUR_NOTIFICATION_NAME" />
        <category Android:name="Android.intent.category.DEFAULT" />
    </intent-filter>
</activity>

Ihre FirebaseMessagingService.Java-Datei onMessageReceived-Methode:

public void onMessageReceived(RemoteMessage remoteMessage){
    String title=remoteMessage.getNotification().getTitle();
    String message=remoteMessage.getNotification().getBody();
    String click_action=remoteMessage.getNotification().getClickAction();
    Intent intent=new Intent(click_action);
    intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
    PendingIntent pendingIntent=PendingIntent.getActivity(this,0,intent,PendingIntent.FLAG_ONE_SHOT);
    NotificationCompat.Builder notificationBuilder=new NotificationCompat.Builder(this);
    notificationBuilder.setContentTitle(title);
    notificationBuilder.setContentText(message);
    notificationBuilder.setSmallIcon(R.mipmap.ic_launcher);
    notificationBuilder.setAutoCancel(true);
    notificationBuilder.setContentIntent(pendingIntent);
    NotificationManager notificationManager=(NotificationManager)getSystemService(Context.NOTIFICATION_SERVICE);
    notificationManager.notify(0,notificationBuilder.build());
}

Ihre Cloud-Funktion/Servercode für Benachrichtigung:

    notification: {
        title: "TITLE OF NOTIFICATION",
        body: "NOTIFICATION MESSAGE",
        sound: "default",
        click_action: "com.example.myapplication_YOUR_NOTIFICATION_NAME"
    }
3

Öffnen Sie die Datei MyFirebaseMessagingService.Java

in dieser Datei befindet sich eine sendNotification () -Methode. Dort müssen Sie Ihre Aktivität angeben, zu der Sie im Intent navigieren müssen (siehe unten) 

Intent intent = new Intent(this, YourActivityName.class);

wenn Sie mehrere Benachrichtigungen senden und Sie durch Klicken auf eine bestimmte Benachrichtigung zu verschiedenen Aktivitäten navigieren möchten, können Sie eine bedingte Anweisung verwenden, um dies zu erreichen. Mein Vorschlag ist die Verwendung eines switch case wie unten gezeigt

private void sendNotification(String messageBody, Bitmap image, String TrueOrFalse) {

    Intent intent = new Intent();
    switch(condition) {
       case '1': intent = new Intent(this, ActivityOne.class);
                 break;
       case '2': intent = new Intent(this, ActivityTwo.class);
                 break;
       case '3': intent = new Intent(this, ActivityThree.class);
                 break;
       default : intent = new Intent(this, DefaultActivity.class);
                 break;
    }
    intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);

    intent.putExtra("Notification", TrueOrFalse);
    PendingIntent pendingIntent = PendingIntent.getActivity(this, 0 /* Request code */, intent,
        PendingIntent.FLAG_ONE_SHOT);
}

Mit dieser Logik können Sie eine bestimmte Aktivität über den Benachrichtigungsklick in FCM .. öffnen. Dies funktioniert perfekt für mich .. Danke 

1
Darshuu