2016-09-22 4 views
2

Ich verwende folgenden Code, um fcm-Nachricht zu empfangen, die über Firebase-Konsole gesendet wird, aber diese Funktion wird nie aufgerufen. Stattdessen kann ich in meiner Launcher-Klasse Nachrichten empfangen, wenn sich die App im Hintergrund befindet, aber wenn die App im Vordergrund ist, kann ich sie nicht abrufen.onMessageReceived() wird nicht aufgerufen, wenn App im Vordergrund ist

public class MyFirebaseMessagingService extends FirebaseMessagingService { 

private static final String TAG = "MyFirebaseMsgService"; 
String message=""; 
Map<String, String> m1; 

@Override 
public void onMessageReceived(RemoteMessage remoteMessage) { 
    //Displaying data in log 
    //It is optional 
    Log.d(TAG, "From: " + remoteMessage.getFrom()); 
    Log.d(TAG, "Notification Message Body: " + remoteMessage.getNotification().getBody()); 
    System.out.println("---------------------"); 

    message = remoteMessage.getNotification().getTitle(); 
    m1= remoteMessage.getData(); 
    System.out.println("=============="+m1); 
    System.out.println("=============="+m1.get("url")); 

    //Calling method to generate notification 
    //sendNotification(remoteMessage.getNotification().getBody()); 
    //sendNotification_test(message); 
    createNotification(m1,remoteMessage.getNotification().getBody()); 
} 


private void createNotification(Map<String,String> payload, String title){ 

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


    intent.putExtra("url",payload.get("url")); 
    intent.putExtra("package",payload.get("package")); 
    intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); 
    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.ic_launcher) 
      .setContentTitle("FCM Message") 
      .setContentText(title) 
      .setAutoCancel(true) 
      .setSound(defaultSoundUri) 
      .setContentIntent(pendingIntent); 

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

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

Manifest

<service 
    android:name="com.example.pranshusrivastav.fcmtest.MyFirebaseMessagingService"> 
    <intent-filter> 
     <action android:name="com.google.firebase.MESSAGING_EVENT"/> 
    </intent-filter> 
</service> 

<service 
    android:name="com.example.pranshusrivastav.fcmtest.MyFirebaseInstanceIDService"> 
    <intent-filter> 
     <action android:name="com.google.firebase.INSTANCE_ID_EVENT"/> 
    </intent-filter> 
</service> 
+0

Wie sieht Ihre fcm Nachrichtennutzlast aus? – tyczj

Antwort

4

i aus der Anwendung Tag in manifest den Dienst Erklärung anzog:

<application 
     android:allowBackup="true" 
     android:icon="@mipmap/ic_launcher" 
     android:label="@string/app_name" 
     android:supportsRtl="true" 
     android:theme="@style/AppTheme"> 
     <activity 
      android:name=".LoginActivity" 
      android:label="@string/app_name"> 
      <intent-filter> 
       <action android:name="android.intent.action.MAIN" /> 

       <category android:name="android.intent.category.LAUNCHER" /> 
      </intent-filter> 
     </activity> 

     <service 
      android:name="com.example.pranshusrivastav.fcmtest.MyFirebaseMessagingService"> 
      <intent-filter> 
       <action android:name="com.google.firebase.MESSAGING_EVENT"/> 
      </intent-filter> 
     </service> 

     <service 
      android:name="com.example.pranshusrivastav.fcmtest.MyFirebaseInstanceIDService"> 
      <intent-filter> 
       <action android:name="com.google.firebase.INSTANCE_ID_EVENT"/> 
      </intent-filter> 
     </service> 
    </application> 

Das funktionierte !!

0

versuchen dieses

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

    //The message which i send will have keys named [message, image, AnotherActivity] and corresponding values. 
    //You can change as per the requirement. 

    //message will contain the Push Message 
    String message = remoteMessage.getData().get("message"); 
    //imageUri will contain URL of the image to be displayed with Notification 
    String imageUri = remoteMessage.getData().get("image"); 
    //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 
    bitmap = getBitmapfromUrl(imageUri); 

    sendNotification(message, bitmap, TrueOrFlase); 

} 

Bei der Verwendung von Firebase Konsole gesendet, wenn der App im Vordergrund dann onMessageReceived() -Methode aufgerufen wird, ist. Daher wird dem Benutzer eine Benachrichtigung mit einem aus der URL abgerufenen Bild angezeigt. Wenn die App jedoch im Hintergrund oder im Status "Tot" ist, wird die Methode onMessageReceived() nicht aufgerufen. Daher wird eine einfache Benachrichtigung, die nur eine Nachricht enthält, in der Benachrichtigungsleiste Ihres Android-Geräts angezeigt.

Sie haben

https://fcm.googleapis.com/fcm/send 

Content-Type verwenden: application/json Berechtigung: key = aiza ************ adrTY

{ „Daten ": { "Bild":" https://ibin.co/2t1lLdpfS06F.png " "message": "Firebase Push-Nachricht mit API" "AnotherActivity": "True" }, "auf":" f25gYF3 ******** *************** HLI " }

Verwenden der Messaging-API: Um eine Nachricht mithilfe der API zu senden, können Sie ein Tool namens AdvancedREST Client verwenden, eine Chrome-Erweiterung, und eine Nachricht mit den folgenden Parametern senden.

Verwandte Themen