React Native / Firebase App - отключение функции обратного отсчета, если пользователь выходит из приложения - PullRequest
0 голосов
/ 06 ноября 2019

Я построил собственное приложение / игру, в которой у пользователя есть 30 минут для завершения задачи .... когда они запускают задачу, через 30 минут начинается обратный отсчет, и пользователь регистрируется в БД (Firebase) "в игре". Когда они завершают задачу (или заканчивается 30 минут), БД снова обновляется до «не в игре».
Функция обратного отсчета работает на телефоне, а не на сервере.

Проблема в том, что если пользователь выходит из приложения, то счетчик на телефоне перестает работать (пользователь больше не «в игре»), но БД не знает об этом ..... быть никаким событием / обработчиком "пользователь вышел из приложения", который я могу использовать, чтобы сообщить БД, что пользователь вышел.

Я думал, может быть, логика обратного отсчета должна работать на бэкэнде, но я не могу думать, как ... ..есть идеи?

Ответы [ 2 ]

2 голосов
/ 06 ноября 2019

В настоящее время нет способа обработать приложение, прерванное в React Native, поэтому я думаю, что ваш лучший способ - внедрить его в бэкэнд.

Как насчет того, когда пользователь запускается, вы экономите время его запуска,и если разница во времени между текущим и началом обратного отсчета превышает 30 минут, пользователь больше не «в игре».

1 голос
/ 06 ноября 2019

Один из способов определить, что пользователь вышел из игры, - обработчик Firebase onDisconnect . С помощью этого вызова вы регистрируете операцию записи в базу данных, которая выполняется, когда сервер обнаруживает, что клиент ушел.

Сервер может обнаружить это двумя способами:

  1. Есликлиент отключается корректно, он отправляет сообщение серверу, который он отключает, и сервер сразу запускает обработчики отключения для этого клиента.
  2. Если клиент отключается другим способом, сервер обнаружит, что клиентпрошло, когда время ожидания сокета истекло, что может занять несколько минут.

Так что в вашем случае вы можете использовать обработчик onDisconnect, чтобы либо удалить игрока из игры, либо пометить его как "ушел ".

Единственная проблема с этим подходом состоит в том, что грязные разъединения могут занять несколько минут, что может быть слишком длинным для вашего сценария.


Альтернативой может быть наличиеклиент периодически записывает сообщение в базу данных, чтобы показать, что оно все еще здесь, например, lastUpdated отметка времени.

Затем вы можете в любом коде, который считывает данные, использовать эту временную метку, чтобы обнаружить, если игрок еще недавно играл, и считать их «пропавшими» после определенного периода, который хорошо работает для вашегоигра. Этот код может затем удалить проигрыватель из базы данных.

Этот код может запускаться в компоненте на стороне сервера, если вы хотите, но в прошлом я также запускал этот тип кода на клиенте и затем использовал(на стороне сервера) правила безопасности, обеспечивающие удаление только тех пользователей, которые «ушли».

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...