6

Ich arbeite an einer App, in der ich eine Benachrichtigung anzeigen muss. Für die Benachrichtigung verwende ich FireBase Cloud Messaging (FCM). Ich kann Benachrichtigungen erhalten, wenn die App im Hintergrund ist.Bestimmte Aktivität öffnen, wenn Benachrichtigung in FCM geklickt wurde

Aber wenn ich auf die Benachrichtigung klicke, wird es umgeleitet auf home.java Seite. Ich möchte es auf Notification.java Seite umleiten.

Also, bitte sagen Sie mir, wie Sie Aktivität in auf Klick der Benachrichtigung angeben. Ich bin mit zwei Dienste an:

1.) MyFirebaseMessagingService

2.) MyFirebaseInstanceIDService

Dies ist mein Codebeispiel für onMessageReceived() Methode in 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; 

    } 
} 
+0

entfernen "Benachrichtigung" von Ihrer fcm Nutzlast und es wird funktionieren –

+0

Dank für deine Antwort! –

+0

Sie wollen sagen, entfernen getNotification() von getNotification(). GetBody(); ?? –

Antwort

0

Wenn App im Hintergrund Absicht ist, müssen in Ihrem Launcher Aktivität geliefert werden .So es Launcher öffnet activity.Now Sie überprüfen, ob Daten in Intent es dann in Launcher Aktivität ist Ihre gewünschte Aktivität starten.

10

Nach FCM Dokument Receive and handle notifications

  • Benachrichtigungen geliefert, wenn die App im Hintergrund ist. In diesem Fall wird die Benachrichtigung an die Systemablage des Geräts gesendet. Ein Benutzer, der auf eine Benachrichtigung klickt, öffnet standardmäßig den App Launcher.
  • Nachrichten mit sowohl Benachrichtigungs- als auch Datennutzinformationen, sowohl im Hintergrund als auch im Vordergrund. In diesem Fall wird die Benachrichtigung an die Systemablage des Geräts gesendet, und die Datennutzlast wird in den Extras der Absicht Ihrer Startaktivität bereitgestellt.

Handle Benachrichtigung Nachrichten in einer backgrounded App:

Wenn Ihre App im Hintergrund ist, leitet Android-Benachrichtigungen in der Taskleiste. Ein Benutzer, der auf die Benachrichtigung klickt, öffnet standardmäßig den App Launcher.

Dies umfasst Nachrichten, die sowohl Benachrichtigungs- als auch Datennutzdaten (und alle Nachrichten, die von der Notification-Konsole gesendet werden) enthalten. In diesen Fällen wird die Benachrichtigung an die Systemablage des Geräts gesendet, und die Datennutzlast wird in den Extras mit der Absicht Ihrer Startaktivität geliefert.

Mit FCM können Sie zwei Arten von Nachrichten an Kunden senden:

1. Benachrichtigungsmeldungen: „Display-Meldungen“ manchmal als gedacht

FCM zeigt die Nachricht im Namen der Client-App automatisch den Endbenutzergeräten an.Benachrichtigungsnachrichten haben einen vordefinierten Satz von für den Benutzer sichtbaren Schlüsseln.

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

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

Kasse hier, um mehr About FCM Messages

Set click_action in der Benachrichtigung Nutzlast:

Also, wenn Sie die Nachrichten kamen im Hintergrund verarbeiten wollen, müssen Sie click_action mit Nachricht senden. click_action ein parameter of the notification payload

ist, wenn Sie möchten, dass Ihre App öffnen und eine bestimmte Aktion ausführen, setzen click_action in der Meldung Nutzlast und wo es zu einer Intent-Filter in der Aktivität, die Sie starten möchten. Zum Beispiel setzen click_action zu OPEN_ACTIVITY_1 eine Absicht Filters auszulösen, wie die folgenden:

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

FCM Nutzlast sieht aus wie folgt:

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

schön kopieren eingefügt, aber was antwortet das? –

+0

@TimCastelijns Überprüfen Sie meine aktualisierte Antwort. –

0

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> 

Sie r 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()); 
} 

Ihr Cloud-Funktion/Server-Code für die Benachrichtigung:

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