2016-09-22 3 views
2

Я использую следующий код для получения сообщения fcm, отправленного через консоль firebase, но эта функция никогда не вызывается. Вместо этого я получаю сообщение в своем классе запуска, когда приложение находится в фоновом режиме, но когда приложение находится на переднем плане, я не могу его получить.onMessageReceived() не вызывается, когда приложение находится на переднем плане

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

Какова ваша полезная нагрузка в сообщении fcm – tyczj

ответ

4

я помещал заявление службы из тега приложения в манифесте:

<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> 

Это работает !!

0

попробовать это

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

} 

При отправке с помощью Firebase консоли, если приложение находится на переднем плане, то метод onMessageReceived() будет вызываться. Следовательно, пользователю предоставляется уведомление с изображением, полученным от URL-адреса. Но если приложение является фоновым или убитым, то метод onMessageReceived() не будет вызываться. Следовательно, простое уведомление, содержащее только сообщение, будет отображаться в панели уведомлений вашего устройства Android.

вам придется использовать

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

Content-Type: применение/JSon Authorization: ключ = Айза ************ adrTY

{ «данные ": { "образ":" https://ibin.co/2t1lLdpfS06F.png " "сообщение": "Firebase Нажмите сообщение, используя API" "AnotherActivity": "Правда" }, "до":" f25gYF3 ******** *************** HLI " }

Использование Messaging API: для отправки сообщения с использованием API вы можете использовать инструмент AdvancedREST Client, его расширение chrome и отправить сообщение со следующими параметрами.