¿Hay alguna manera de evitar que el usuario juegue el juego simultáneamente en 2 dispositivos?

Nuestro juego usa Google Play Services para authentication, multijugador y guardado en la nube. Guardamos el deviseio de los usuarios como un guardado en la nube, y como el jugador participa en partidas multijugador, pueden usar elementos de su deviseio (monedas, etc.). Además, pueden usar en compras de aplicaciones para agregar artículos a su deviseio.

Quiero intentar evitar la molestia de los conflictos de juego de guardado en la nube cuando el jugador (por el motivo que sea) decida jugar el juego en 2 dispositivos al mismo time.

Me preocupa que puedan perder datos al resolver los juegos guardados y que sus juegos guardados pueden contener monedas y otros elementos obtenidos a través de IAP, esto es inaceptable.

¿Hay alguna manera de verificar si el usuario está actualmente conectado al juego en otro dispositivo y está jugando activamente en ese dispositivo? No tenemos nuestros propios serveres y usamos el GPS para todo nuestro trabajo. ¿Cuál es una posible solución aquí?

El lado del cliente le pregunta al service "¿Puedo seguir jugando contigo?" cada cinco segundos y el server responde con true o false . Almacena el valor de date que representa la última vez que el jugador "conectó" el service. También almacene una key de session única que se aleatoriza y se envía al cliente al iniciar session o al comienzo de un juego (si no se necesita iniciar session). El cliente sigue sondeando un package o una request http o lo que sea bueno para usted que le dice al server y, a su vez, la database con la que el reproductor está conectado y activo.

Cuando alguien conecta el server con la misma identidad, el server reemplaza la key de session. Cuando el jugador o dispositivo anterior continúa comunicándose con la key de session anterior, se les informa que han sido desconectados porque alguien conectó el juego con su identidad desde otro dispositivo. Esto sucede como una respuesta al "¿Todavía estamos en buen package".

La alternativa es verificar cuándo fue la última vez que el usuario con esta identidad estaba vivo y si esa date es inferior a, por ejemplo, 15 segundos, decirle a la nueva persona / dispositivo que intenta conectarse que esta count ya está activa.

Como puede tener limitaciones en cuanto a la cantidad de requestes que se podrían hacer al server, simplemente agregue esta respuesta "Todavía está permitido jugar" como respuesta a cada request que ya está haciendo. Solo guarde el estado del jugador cuando hagan una request válida y todavía se les permite jugar el juego.

Como sugirió, puede almacenar la ID de session única en el estado guardado, si un jugador inicia session desde otro dispositivo, ellos harán una request de inicio de session, aleatorizarán otra ID de session y actualizarán la database. Cuando el otro dispositivo realiza alguna request, el server amablemente notificará que esta session se ha interrumpido ya que se inició otra session con un dispositivo diferente.

De esta forma, no le costará ninguna llamada API adicional (creo).

Después de leer esta pregunta una vez más, me pregunto si podría simplemente save el estado para múltiples dispositivos como sucursales, y luego quizás fusionar el delta según sea necesario. En lugar de sobreescribir, cargue el estado actual que describirá la cantidad de logros y / o logros en cada dispositivo hasta el momento y cuando vuelva a save, guarde los cambios para el dispositivo actualmente utilizado.

Intereting Posts