Basically I will leave settings I don’t really care about (like whether the user preference for music and sound effects is ON or OFF) on the device. If they want to mess with those, that’s fine. I will also store high score, # games played, etc. on the device and they will be the authoritative numbers for game play UNTIL THE USER ESTABLISHES AN ACCOUNT (meaning registers with an email, a game nick and a password). So for a casual player (who is only playing the single-player game) they do not have to take the time to establish an account.
However, they MUST register if they want to do things like play multiplayer games, see themselves on the leaderboard, earn badges, etc. Once they register, the high score, number of games played, badges won storage will be on the server, and that storage will be the authoritative source for these numbers. Even if they’ve manipulated their high score and # of games played locally (prior to registration) it won’t really matter, because those numbers are for single-player games and they only show to the player, not to the community.
When they login, a unique session ID will be created for that login session and any previous active sessionIDs will be expired. This has the effect of ‘logging out’ any other devices logged-in with those same credentials, even if that player is in the middle of a game, so should discourage account sharing. Other things will also go into the creation of this session ID (like IP address, device Unique ID, etc.) to further protect. And since these things could also be spoofed by a clever person, the server will also watch for other scenarios (like… did this registered user start/finish a game while another was already in progress?) and will (probably) summarily invalidate all sessions that appear to be duplicates. The server will also have the ability to ban a player’s login for a certain amount of time based on perceived bad behavior (so perhaps if this happens repeatedly in the same hour, the player’s account will be suspended for 5 minutes on the first offense, an hour on the second, etc.)
There are some other techniques going on behind the scenes to watch for cheats as well, but I do not wish to divulge those here.
To be clear, I know that this is likely to be a never-ending cat and mouse game, but by moving as much as possible to server-side (as was correctly suggested in this thread) I think (hope?) we will be able to tweak the monitoring and responses locally without having to roll-out a lot of app updates every time we see a new technique for trying to bypass the system.
Although I am concerned about those who would patch the app locally to try and get a free version (i.e. theft) I am currently more concerned about those who would ‘cheat’ their scores and sully the experience for the rest of this game’s community.
FEEDBACK/CRITICISM IS WELCOME