Analysis of Pokemon GO 0.125.1 APK: Adventure sync, fitness goals, smart watches and more

0
25
Trainers, a new update is slowly rolling out on Google’s Play Store, version number 0.125.1. The version contains a plethora of bug fixes and a metric ton of hidden code to support the upcoming Adventure Sync feature. The 0.125.1 (or .2) update is the one that needs to become a forced update before Niantic can enable the feature, so this is a fairly important data mine.

A huge shout out goes to J. MasFrancia for extracting the APK and sending it in hours before it hit APK Mirror! The GO Hub team wishes you all the best, hopefully you’ll get a perfect shiny Lick Gengar on November 3rd. Without further ado, let’s start with the new stuff. There’s a lot to cover, and it’s mainly Adventure Sync related, but it’s very interesting to read as it basically reveals the entire feature.

Adventure Sync supports walking and wheelchair usage

Adventure Sync will not be able to import everything you do in real life, it’s actually limited to five distinct activities that are currently being sampled:

  • Walking and wheelchair distance
  • Wheelchair push count
  • Calories burned during exercise
  • Time spent exercising

As expected, and later verified with Niantic, the game will import activities only from two services: HealthKit and Google Fit. Sorry Samsung Health users, you’ll need to switch for this functionality to work.

The following code fragment revealed the majority of info listed above:

.FitnessSampleType
.SAMPLE_UNSET
.STEPS
.WALKING_DISTANCE_METERS
.WHEELCHAIR_DISTANCE_METERS
.CALORIES_KCALS
.WHEELCHAIR_PUSH_COUNT
.EXERCISE_TIME_MI
.FitnessSourceType
.SOURCE_UNSET
.HEALTHKIT
.GOOGLE_FIT

Accordingly, a lot of new icons were added to support the new Pokemon GO fitness feature:

New fitness icons in 0.125.1
New fitness icons in 0.125.1

As far as we can see, the feature operates on an hourly basis, fetching hourly reports from the appropriate device service. It’s also aware of the last date when it performed a fetch request, so we’re not sure anyone will be able to cheat their way in. Additionally, we checked Google’s and Apple’s documentation and you’re able to query a specific date range on both HealthKit and Google Fit – no distance hoarding guys!

.FitnessRecordProto
.get_HourlyReports
.get_RawSamples
.get_LastAggregationTimestampMs
.set_LastAggregationTimestampMs
.get_FitnessStats
.set_FitnessStats
.HourlyReportsFieldNumber

Curiously, Pokemon GO is finally getting a dedicated background mode! Background mode is required for any type of scheduled processing on both platforms, so this is not surprising, but this is the first time we’re seeing an application (or rather notification) level background processing. Pokemon GO Plus and Gotcha are powered by Bluetooth Low Energy (BLE), while the Adventure Sync is powered by a RPC service.

.IBgModeRpcService
.Niantic
.Holoholo
.BgMode
.previousWeek
.getFitnessReport
.getFitnessRewards
.BgModeRpcService

RPC is a low level protocol that’s considered to be a very efficient mechanism for fetching data from remote servers. Additionally, we’ve found something very interesting. However… we’re not sure what’s the state of this, so we don’t want to create hype out of nothing. Please, take this with a grain of salt, there’s very information about this in the APK. Smart watches are seemingly supported.

Smart Watch support?

Smart watch telemetry:

.TelemetryDeviceServicesReflection
.UNDEFINED_DEVICE_SERVICE
.FITNESS
.SMART_WATCH
.SFIDA
.PermissionContextTelemetryIds
.UNDEFINED_PERMISSION_CONTEXT
.EGG_HATCH
.BUDDY_CANDY_FOUND
.PLAYER_PROFILE_CLICKED
.SMART_WATCH_INSTALLED
.SFIDA_SESSION_STARTED

Smart watch as notification source:

.PokemonFoundCandyNotificationSource
.DispatchPokemonFoundCandyNotification
.pendingNotifications
.Niantic
.Holoholo
.DevicePermissions
.SmartWatch
.Sfida
.PermissionContext
.EggHatch
.BuddyCandyFound
.PlayerProfileClicked
.SmartWatchInstalled
.SfidaSessionStarted

Again, keep your hype minimal, there’s just a few code lines that reference smart watches.

Manual fitness entries, location accuracy and entry age

We’re not sure how we feel about this, but the APK reveals that Niantic can choose if they want to import manual fitness entries by using a simple setting on the server side. We hope they keep it disabled, as manual fitness entries can easily be abused.

.get_AcceptManualFitnessSamples
.set_AcceptManualFitnessSamples

There are two additional settings we found interesting:

.get_MaximumSampleAgeMs
.set_MaximumSampleAgeMs
.get_MinimumLocationAccuracyMeters
.set_MinimumLocationAccuracyMeters

Essentially, Niantic can filter out entries based on age and on their accuracy, which is more than welcome in providing everyone with a fair experience and equal playing ground. Experimental tests will show the exact values of these settings, but we can only discover those once the feature goes live.

Fitness goals have daily and weekly tracking

As announced previously, Fitness goals in Pokemon GO indeed feature weekly and daily tracking, which is likely used for calculating special reward packages for achieving these goals. Rewards are served by the server, so we’re not able to provide a list of possible rewards yet.

.getFitnessReportProto
.get_NumOfDays
.set_NumOfDays
.get_NumOfWeeks
.set_NumOfWeeks
.NumOfDaysFieldNumber
.numOfDays_
.NumOfWeeksFieldNumber
.numOfWeeks_
.NumOfDays
.NumOfWeeks

New settings

Two new types of notifications were added:

.MARKETING_PUSH_NOTIFICATION_ENABLED
.BGMODE_PUSH_NOTIFICATIONS_ENABLED

Bug fixes

  • Changes for Pokemon spawn and despawn mechanisms
  • Various camera and map fixes

Our take on the APK

Niantic is seriously developing the Adventure Sync feature, checking all relevant technical check boxes along the way. Background processing? Check. RPC for low network usage? Check. Flexible device support? Check. We’re excited to see how it looks in action, especially given the potential support for smart watches.

We’ll keep a keen eye on the Adventure Sync as time goes on, but it looks like it’s going well. You can download the APK here: Google Drive link.

Update screenshots

Leave a Reply