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:
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.