Я использую GraphQL для запросов к своему бэкэнду и использую его подписки, чтобы информировать интерфейс об обновлениях существующего запрашиваемого объекта, а также узнать, был ли новый объект вставлен в бэкэнд другим пользователем / устройством.
Работает хорошо, но я не знаю, как действовать после того, как приложение переходит в фоновый режим. Потому что приложение потеряет соединение с веб-сокетом для подписок. Поэтому, если мой пользователь возвращается через 10 минут, у меня есть 2 решения:
Во-первых, уродливый веб-интерфейс запрашивал некоторые объекты перед переходом в фоновый режим, поэтому при переходе на передний план я пытался запросить их у бэкенда, чтобы узнать, есть ли у них обновления, и в то же время запрос, чтобы увидеть, если любой новый объект доступен. ---> Я не хочу реализовывать это, совсем не эффективно
Во-вторых, если мой бэкэнд не может отправить события подписки во внешний интерфейс, потому что они просто отключены, я сохраняю их в стеке для этого конкретного пользователя / устройства, и когда это становится живым благодаря подпискам, я отправь ему все в короткие сроки.
Что касается второго, я предполагал, что этот стек для каждого устройства будет иметь срок действия. Например, если пользовательское устройство не возвращается через X дней, я просто очищаю его стек. Затем, если пользователь возвращается после истечения срока действия, он знает, что его локальное хранилище десинхронизировано, и интерфейс очищает собственное локальное хранилище и выполняет запросы инициализации (запросы GraphQL), чтобы получить минимальное состояние.
Что вы думаете об этом? У вас есть какие-нибудь статьи об этом? Возможно, я пропустил лучшее решение, но не нашел общеизвестного шаблона, одобренного сообществом.
Большое спасибо,