PokemonGo is a free-to-play, location-based augmented reality game developed by Niantic for iOS and Android devices, released in July 2016 with a slow release schedule around the globe.
First off, I'd like to clarify: I do not condone the use of third party tools for PokemonGo as they break the terms of service. I personally use a scanner (Described later) as I feel the game is unfairly balanced for players outside of large cities. I definitely do not condone spoofing or botting, and if you do either of these, you should feel bad.
With the disclaimer out of the way, I'll say it. I love PokemonGo. It's the perfect blend of fresh gameplay with the nostalgia of a well known IP. It's not without it's problems, though. The game has become increasingly frustrating to play due to a combination of terrible changes and lack of communication.
When the game first launched, I'd argue the core gameplay was at its best. It included an in-game tracker that allowed users to track down exactly where rare Pokemon were quickly, provided they were in the sightings list (Around 500 meters)
It's easy to see why this system was so appealing. You notice a rare Pokemon on the sightings list, then wander in certain directions until the distance changes, allowing you to triangulate exactly where the Pokemon is.
During this early period, server issues plagued the game, often only having ~60% uptime - likely an effect caused by the insane popularity of the game. Just before the official UK launch, the footstep tracking system suddenly broke. The number of footsteps remained forever at three, making it much harder to track down. It's estimated that this was to try and combat the server issues, as the distance of the Pokemon to the user would have to be calculated server-side and would likely take a large amount of resources.
This "bug" caused an uproar in the PokemonGo community. The only way you could really catch Pokemon was by walking around until you happen across it. People experimented with triangulating by watching to see when the Pokemon dropped off of the sightings list, but this didn't work due to the Pokemon not being removed from the sightings list. Only by closing the app would the list be cleared. You could travel from London to Manchester and still have Pokemon from London in your sightings.
The lack of any direction to reach Pokemon prompted people to find other ways of finding these Pokemon - and so the dev community excelled...
The most important discovery in the developer community for PokemonGo was that of the API. GitHub user Mila432 (Project recently removed because of a cease and desist letter) reverse engineered the game and discovered the use of an internal API by Niantic. He then developed a publicly accessible version, which used the official Niantic servers to make calls as if you were a normal user, but without the need to actually use a mobile device or use the games UI.
This included functionality to retrieve Pokemon co-ordinates, find local Pokestops, catch Pokemon and lots of other things. This really opened the door for a ton of third party tools, some more sinister than others. The largest projects were "scanners", which allowed players to find Pokemon across their whole city through a web browser.
I'll explain briefly HOW these scanners work. You create a large amount of Pokemon accounts, then use these to repeatedly log into the servers at differing locations to check for Pokemon. Any pokemon found are added to the database, which are then displayed using some front-end system. The issue with this method of finding Pokemon is the scan range is only ~70 meters. When I was scanning across my whole city (186km squared or thereabouts), I was using upwards of 200 accounts, each logging in and scanning every 10-15 seconds. I've heard stories of people using upwards of 5000+ accounts for some services. As you can guess, this is a huge drain on the Niantic servers.
The biggest online service was likely Pokevision (Pictured above). At its peak, it was costing them more than $500 per day for the maps licensing. The service gained 1.2 million Twitter followers in less than 3 weeks. On July 31st, they shutdown due to pressure from Niantic and Nintendo.
With the lack of a good replacement for Pokevision, players (including me), began to look at privately hosted map services, with the most popular options being PokemonGo-map and Pokeminer. Both tried to achieve different objectives - Pokeminer was more suited towards mass analysis of Pokemon spawn-points over large areas. It included heat-map data from you scans (Which is how I created a list of "nests" for my local city, found here). It's easy to use with large amounts of accounts (200+) and didn't have many issues. I originally used this to create city-wide alerts for rare Pokemon using a Twitter and Facebook bot
PokemonGo-Map, on the other-hand, was the much more publicly accepted home scanner solution. It was trending on GitHub for several days. Although difficult to get working with multiple accounts originally, it has developed into a huge project with many optimisations added. The front-end is much higher quality than Pokeminer, and was generally easier to set up with MySQL.
The absolute biggest of these optimisations was by reddit user TBTerra. It had been found that each spawnpoint had a specific time at which a random Pokemon spawned at each hour, such as 11 minutes 55 seconds past every hour. This meant that instead of repeatedly scanning areas where Pokemon might not be, we could scan a spawn-point just after the Pokemon should have spawned. This does require a list of spawn-points, but this is fairly easy to extract from running the program normally and extracted using a simple SQL query to get a JSON file of all spawns. This new method worked incredibly, reducing the amount of accounts needed to efficiently scan a 186km squared area from 200+ accounts to only 15! It would seem all the issues surrounding scanners are solved, right? Low impact on the server, low complexity scanning systems, easy installation.
But alas, Niantic continued to brigade against the use of scanners. They introduced IP bans, where if x number of requests are made from a single IP within y time, the API would send back empty objects, as if nothing nearby was found. After this, they started permanently banning scanning accounts, as well as added captchas to the account creation process, preventing the mass creation of accounts for scanning.
So where do we go from here? There are several options from what I can see:
Niantic optimise their API and make it an official, public API. This would give them a chance to prevent the high server load and possibly close off the API from bots. They tried to prevent unofficial access with Unknown 6 which I didn't cover here, but it didn't last long.
A crowdsourced, decentralised PokemonGo-Map. Essentially, have a VPS running an application server, where users use a modified scanning client and submit locations of rare Pokemon back to the application server. You could gather a community of local players, give them the client (In which they make all the API calls, with their own accounts) that scans locations given to them by the main server. As long as the clients are listening to the server, they would be able to effectively cover ground rather than having 3-4 people all scanning one dense area. Accounts would be unlikely to get scanning accounts banned in this scenario too, as users would use their own small set of accounts, likely no bigger than 4-5 accounts - No IP bans with so little accounts and it's not difficult to create a new account if one gets banned. Since the server would need to be open, rare Pokemon finds would have to be verified server side to ensure it's not a faked Pokemon. This wouldn't be load heavy, though, as it's unlikely to find more than 1-2 rare pokemon every 15 minutes over large areas. It's also important to note that this would only work with rare Pokemon, as having too many Pokemon to verify would cause IP bans/account bans on the server-side of things.
Niantic need to realise that the balance for rural areas is off, and unless they change the meta of the game from "Wander round for 30 hours until you find something rare" then people will always try and create these tools. It's better to be in control of how these systems work/ Hopefully they'll find the error of their ways until it's too late.