onMessageReceived не запускается, когда приложение находится на переднем плане - PullRequest
0 голосов
/ 20 июня 2020

В моем приложении я хочу получать сообщения FCM, даже когда приложение находится на переднем плане. Итак, я настроил все в соответствии с https://firebase.google.com/docs/cloud-messaging/android/receive#sample -receive

Но пока мое приложение находится на переднем плане, метод onMessageReceived не вызывается. Обратите внимание: когда мое приложение находится в фоновом режиме, оно получает уведомления, поэтому соединение с FCM работает нормально.

application часть моего AndroidManifest. xml

<activity android:name=".MainActivity">
    <intent-filter>
        <action android:name="android.intent.action.MAIN" />

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

<meta-data
    android:name="com.google.firebase.messaging.default_notification_icon"
    android:resource="@drawable/ic_stat_ic_notification" />

<meta-data
    android:name="com.google.firebase.messaging.default_notification_color"
    android:resource="@color/colorAccent" />

<service
    android:name=".MyFirebaseMessagingService"
    android:exported="false">
    <intent-filter>
        <action android:name="com.google.firebase.MESSAGING_EVENT" />
    </intent-filter>
</service>

MyFirebaseMessagingService.kt

class MyFirebaseMessagingService : FirebaseMessagingService() {
    override fun onMessageReceived(remoteMessage: RemoteMessage) {
        Timber.i("onMessageReceived") // never called
    }
}

Я отправляю свои уведомления с помощью консоли FCM. Есть идеи, что я делаю неправильно? Почему onMessageReceived не вызывается, когда мое приложение находится на переднем плане?

1 Ответ

0 голосов
/ 29 июня 2020

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

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

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

в onMessageReceived () обратитесь сюда, вы можете получить полезные данные уведомления / данных:

public class MyFirebaseMessagingService extends FirebaseMessagingService {
    private static final String TAG = "FCM Service";

    @Override
    public void onMessageReceived(RemoteMessage remoteMessage) {
        if (remoteMessage.getData().size() > 0) {
            Log.d(TAG, "Message data payload: " + remoteMessage.getData());
        }

        if (remoteMessage.getNotification() != null) {
            Log.d(TAG, "Message Notification Body: " +
                    remoteMessage.getNotification().getBody());
        }

    }

}

Вы можете см. здесь для получения дополнительной информации.

...