|
Сохранить данные от FirebaseMessagingService в то время бездействия приложения
|
|||
---|---|---|---|
#18+
Всем привет, у меня мобильное приложение на Kotlin у которого логика работы следующая. Есть Activity, в new Fragment cо списком RecycleView. С другого web-приложения я с помощью REST API (https://fcm.googleapis.com/fcm/send)посылаю notification на конкретное устройство. Notification содержит id элемента, которое нужно подгрузить из мобильного приложения через POST запрос. Для того, чтобы пробрасывать информацию от сервиса в Activity использую синглтон с LiveData(если есть получше вариант подскажите плиз- везде пишут, что нужно BroadCastReceiver или Intent, но в официальных гугловских доках пишут, что они уже deprecated) Если приложение активно, то все работает нормально-push приходит, в Activity все пробрасывается. Проблема в том, что если Activity закрыто или находится в свернутом режиме, FirebaseMessagingService все равно работает и получает сообщения, но пробросить в Activity не может. Управлять в ручном режиме FirebaseMessagingService тоже нельзя. Как хотелось бы: из web клиента с помощью rest api отправляется notification и мобильное приложение его принимает только в случае двух состояний- когда оно открыто или свернуто. Если экземпляр приложения не запущен, то notification не принимаются, хранятся в очереди на google сервере, а ждут момента когда мобильное приложение откроется. Это можно было бы достичь, если привязать жизненный цикл FirebaseMessagingService к жизненному циклу Activity, но прокурив форумы я узнал, что для Android это типа что-то вроде более привилегированного сервиса и он будет периодически сам его поднимать. Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38.
Спасибо ... |
|||
:
Нравится:
Не нравится:
|
|||
17.01.2022, 11:11 |
|
Сохранить данные от FirebaseMessagingService в то время бездействия приложения
|
|||
---|---|---|---|
#18+
складывай полученные данные в очередь - например в табличку в БД. Если использовать jetpack room, то и костыль в виде статического LiveData в сервисе не понадобится - сервис только пишет в базу через дао, а во fragment будет получать автоматические изменения через LiveData из базы - хоть во время работы, хоть при восстановлении из фона. Главное не забывать удалять данные после обработки из очереди. ... |
|||
:
Нравится:
Не нравится:
|
|||
17.01.2022, 12:07 |
|
Сохранить данные от FirebaseMessagingService в то время бездействия приложения
|
|||
---|---|---|---|
#18+
chpasha, у меня в Activity в качестве DI-контейнера используется Kodein. Попытки внедрить зависимости в сервис были неудачными (например viewmodel), потому что они имеют разный контекст. В этой ситуации необходимо будет постоянно держать один инстанс RoomDataBase в Activity с LiveData, чтобы показывать данные из RecyclerView, а другой нужно будет держать в сервисе. Но в мануалах по Room написано, что не рекомендуется создать более одного инстанса. ... |
|||
:
Нравится:
Не нравится:
|
|||
17.01.2022, 15:12 |
|
Сохранить данные от FirebaseMessagingService в то время бездействия приложения
|
|||
---|---|---|---|
#18+
vb_sub Попытки внедрить зависимости в сервис были неудачными (например viewmodel) vb_sub потому что они имеют разный контекст. для RoomDatabase нужен ApplicationContext, неужели он разный для сервиса и Activity? vb_sub Но в мануалах по Room написано, что не рекомендуется создать более одного инстанса ... |
|||
:
Нравится:
Не нравится:
|
|||
17.01.2022, 22:44 |
|
Сохранить данные от FirebaseMessagingService в то время бездействия приложения
|
|||
---|---|---|---|
#18+
chpasha, chpashaдля RoomDatabase нужен ApplicationContext, неужели он разный для сервиса и Activity конкретно для FirebaseMessagingService контекст разный. Более того, служба работает, даже когда Application не запущено или закрыто окончательно. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.01.2022, 10:33 |
|
|
start [/forum/topic.php?fid=13&fpage=1&tid=1330660]: |
0ms |
get settings: |
11ms |
get forum list: |
15ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
48ms |
get topic data: |
11ms |
get forum data: |
2ms |
get page messages: |
43ms |
get tp. blocked users: |
2ms |
others: | 296ms |
total: | 436ms |
0 / 0 |