2017-06-01 4 views
1

Es gibt zwei Arten von Nachrichten in FCM (Firebase Cloud Messaging):öffnen spezifische Aktivität, wenn Benachrichtigung geklickt im Hintergrund

Display-Meldungen: Diese Meldungen die onMessageReceived() Callback auslösen nur dann, wenn Ihre Anwendung im Vordergrund ist

Datennachrichten: Arbeiten Meldungen lösen die onMessageReceived() Rückruf auch wenn der App im Vordergrund/Hintergrund/getötet

wenn die Meldung im Vordergrund empfangen wird, ich bin die Lage, die spezifische Aktivität auf Benachrichtigung drücken zu öffnen, aber wenn die Benachrichtigung wird empfangen in Hintergrund ich kann t die Benachrichtigung drücken behandeln (es startet automatisch die Haupttätigkeit)

Ich habe einige Suche und fand:

Ich habe diese Absicht-Filter zu meiner Benachrichtigung Aktivität:

<activity android:name="com.mahdi.tiger.alahedclubnewtesting.activity.News_description" 
      android:exported="true"> 
      <intent-filter> 
       <action android:name="com.mahdi.tiger.alahedclubnewtesting.activity.News_description"></action> 
       <category android:name="android.intent.category.DEFAULT"></category> 
      </intent-filter> 
     </activity> 

aber es doesn t Arbeit ..

fand ich auch:

When your app is in the background, Android directs notification messages to the system tray. A user tap on the notification opens the app launcher by default. 

Also was soll ich tun? Ich möchte, wenn die Benachrichtigung im Hintergrund empfangen wird, um den Klick zu bearbeiten und meine spezifische Aktivität zu öffnen.

Dies ist der Code ich verwende:

public class myFirebaseMessagingService extends FirebaseMessagingService { 

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

     /** 
     * Called when message is received. 
     * 
     * @param remoteMessage Object representing the message received from Firebase Cloud Messaging. 
     */ 
     @Override 
     public void onMessageReceived(RemoteMessage remoteMessage) { 
      // There are two types of messages data messages and notification messages. Data messages are handled 
      // here in onMessageReceived whether the app is in the foreground or background. Data messages are the type 
      // traditionally used with GCM. Notification messages are only received here in onMessageReceived when the app 
      // is in the foreground. When the app is in the background an automatically generated notification is displayed. 
      // When the user taps on the notification they are returned to the app. Messages containing both notification 
      // and data payloads are treated as notification messages. The Firebase console always sends notification 
      // messages. For more see: https://firebase.google.com/docs/cloud-messaging/concept-options 
      // 
      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()); 

       String title=remoteMessage.getNotification().getTitle(); 
       String body=remoteMessage.getNotification().getBody(); 
       String action=remoteMessage.getNotification().getClickAction(); 



       sendNotification2(title,body,action); 
      } 

      //The message which i send will have keys named [message, image, AnotherActivity] and corresponding values. 
      //You can change as per the requirement. 
      String text = remoteMessage.getData().get("title"); 
      //message will contain the Push Message 
      String message = remoteMessage.getData().get("message"); 
      //imageUri will contain URL of the image to be displayed with Notification 
      //If the key AnotherActivity has value as True then when the user taps on notification, in the app AnotherActivity will be opened. 
      //If the key AnotherActivity has value as False then when the user taps on notification, in the app MainActivity will be opened. 
      String TrueOrFlase = remoteMessage.getData().get("AnotherActivity"); 

      //To get a Bitmap image from the URL received 
      sendNotification(message, text,TrueOrFlase); 

     } 


     /** 
     * Create and show a simple notification containing the received FCM message. 
     */ 

     private void sendNotification(String messageBody,String text, String TrueOrFalse) { 
      Intent intent = new Intent(this, Slider_description.class); 
      intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); 
      intent.putExtra("AnotherActivity", 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) 
        .setSmallIcon(R.mipmap.ahed_me) 
        .setContentTitle(text) 
        .setAutoCancel(true) 
        .setContentText(messageBody) 
        .setSound(defaultSoundUri) 
        .setContentIntent(pendingIntent); 

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

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

HINWEIS: i Firebase Konsole verwenden Benachrichtigung zu senden.

Vielen Dank.

+0

Wie lautet der Name der Aktivität, die Sie starten möchten? –

+0

News_description Aktivität –

Antwort

1

Nach ein bisschen Testen habe ich das gefunden.

https://github.com/firebase/quickstart-android/blob/master/messaging/app/src/main/java/com/google/firebase/quickstart/fcm/MyFirebaseMessagingService.java

Der interessante Teil für Sie.

Es gibt zwei Arten von Nachrichten Datennachrichten und Benachrichtigungen Nachrichten. Datennachrichten werden hier in onMessageReceived behandelt, unabhängig davon, ob sich die App im Vordergrund oder im Hintergrund befindet ( ). Datennachrichten sind der Typ , der traditionell mit GCM verwendet wird. Benachrichtigungsnachrichten werden hier nur in in OnMessageReceived empfangen, wenn die App im Vordergrund ist. Wenn sich die App im Hintergrund befindet, wird eine automatisch generierte Benachrichtigung angezeigt: . Wenn der Benutzer auf die Benachrichtigung tippt, werden sie an die App zurückgegeben. Nachrichten, die sowohl Benachrichtigungs- als auch Datennutzlasten enthalten, werden als Benachrichtigungsnachrichten behandelt. Die Firebase-Konsole sendet immer Benachrichtigungsmeldungen.

Wenn Sie die volle Kontrolle über die Mitteilung Sie benötigen Datennachricht zu senden. Sie können die Firebase-Konsole nicht nach meinem Verständnis verwenden.

+0

Nein, nein, es ist egal, weil ich Slider_description in News_description geändert habe –

+0

@MahdiHraybi hast du versucht, mit Datennachricht? –

+0

Ich habe die Lösung dank @Kevin gefunden, aber jetzt sehe ich ein anderes Problem ist, dass beim Senden einer anderen Benachrichtigung ..Es ersetzt die erste –

Verwandte Themen