Ответ 1
1. Кто начал службу уведомления FirebaseMessagingService? Должно быть какое-то место, вызывающее startService(), не так ли?
SDK делает это автоматически для вас.
2. Я понимаю, что уведомление о нисходящем потоке будет доставляться на мобильную службу Google Play, независимо от состояния моего приложения. Затем, насколько я могу гарантировать, что мой
onMessageReceive()
вызывается, когдаapp
илиservice
естьswipe closed/killed/force stop
? Является ли соответствующее поведение документированным где угодно?
Официальные документы для Получение сообщения для Android здесь. В нем обсуждается поведение сообщения (в зависимости от типа используемой полезной информации сообщения (т.е. notification
или data
)), когда ваше приложение находится на переднем плане и в фоновом режиме.
Чтобы иметь возможность обрабатывать сообщение самостоятельно (в onMessageReceived()
), вам придется отправлять сообщения data
-одно только сообщения.
В связи с тем, что тема касания закрыта/убита/сила остановлена, эта тема обсуждалась довольно долгое время, и, похоже, нет определенного ответа. Во время одного из моих тестов я могу получать сообщение (проверено с помощью полезной нагрузки data
-only message), если я закрою свое приложение. Но когда я принудительно закрыл его из меню "Настройки", я не смог получить никаких сообщений. Обратите внимание, что это не всегда поведение.
Есть несколько устройств, которые были разработаны, когда вы закрываете приложение, это будет то же самое, что и принудительная остановка (см. мой ответ здесь).
Существуют также устройства, в которых даже если приложение все еще просто просто удалено, хотя оно не принудительно закрывается, само устройство мешает ему получать сообщения. Другие говорят, что это не может быть так, потому что такие приложения, как WhatsApp, смогли это сделать. Причина, по которой я научился до сих пор, заключается в том, что производители устройств внедрили большинство известных приложений, чтобы это было возможно.
Итак, чтобы ответить на ваш вопрос, нет. Это не документировано нигде, потому что (IMO) это тема, которая также зависит от устройства и что FCM не имеет полного контроля.
3. Меня больше беспокоит следующий случай. Расскажите о сообщении данных. (по сравнению с уведомляющим сообщением.) Приложение-клиент получил сообщение FCM и отображает уведомление по умолчанию, поскольку служба воспроизведения Google запущена и отправляет ее на системный трей. Но мой onMessageReceive() не вызывается, потому что MyFirebaseMessagingService убит системой и не перезапускается. Возможно ли это?
AFAIK, Служба FirebaseMessagingService связана с Службой Google Play, поэтому пока Служба Google Play активна, так же как и сервис Firebase. Часть из моего ответьте здесь:
Однако, я видел, что ранее упоминалось ранее для
FirebaseMessagingService
(см. этот пост, комментарий от @ArthurThompson):Эти службы будут запускаться службами Google Play, которые всегда работают на устройстве. Вам не нужно и не следует начинать/останавливать эти службы самостоятельно.