Облачные сообщения Firebase не получены, когда приложение в фоновом режиме

Недавно я обновил приложение для отправки сообщений через FCM, и он отлично работает, когда приложение запускается на желе Bean. Проблема заключается не в том, что она Lollipop, а приложение находится в фоне.

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

Вот как выглядит начало моего FirebaseMessagingService:

public class FirebaseBroadcastReceiverService extends FirebaseMessagingService {
    private final String TAG = FirebaseBroadcastReceiverService.class.getName();

    @Override
    public void onMessageReceived(RemoteMessage message){
        Log.i(TAG, "A message is received");
        String from = message.getFrom();
        Map<String, String> data = message.getData();
        .....
    }
}

манифест:

<application
    android:name=".controller.application.AppResources"
    android:allowBackup="true"
    android:icon="@mipmap/ic_launcher_shadow"
    android:label="@string/app_name"
    android:supportsRtl="true"
    android:theme="@android:style/Theme.Black.NoTitleBar">

   <service
        android:name=".model.firebase.FirebaseListenerService">
        <intent-filter>
            <action android:name="com.google.firebase.INSTANCE_ID_EVENT"/>
        </intent-filter>
    </service>
    <service android:name=".model.firebase.FirebaseBroadcastReceiverService">
        <intent-filter>
            <action android:name="com.google.firebase.MESSAGING_EVENT" />
        </intent-filter>
    </service>
    .......
</application>

И полезная нагрузка:

{ 
    "data": {
        "test": "test"
    },
    "to" : "MY FCM REGISTRATION ID"
}

который отправляется через POST в https://fcm.googleapis.com/fcm/send с заголовками Authorization и Content-type.

Возможно, я прочитал все другие связанные с ним потоки SO, но я не смог найти ответа на него, а также нет следов журналов в Android Monitor. Кто-нибудь имеет намек на это?

Ответ 1

Хорошо, получается Huawei имеет некоторые энергосберегающие функции, из-за которых некоторые приложения не смогут получать уведомления, поэтому они не связаны с версией Android.

Я не мог найти способ исправить это программно, но если кому-то интересно, зайдите в Настройки/Защищенные приложения и выберите приложения, которые вы хотите разрешить запускать в фоновом режиме, чтобы они получали уведомления.

Подробнее здесь.

Ответ 2

Перейдите в приложение настроек, выберите свое приложение, затем отметьте галочкой Show Notification и Untick Restrict to Launch

Ответ 3

Похоже, что в вашем файле манифеста отсутствует разрешение на блокировку после входа.