Недавно я обновил приложение для отправки сообщений через 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. Кто-нибудь имеет намек на это?