Changelog
3.3.0 — Long-Term Support (LTS)
rook_sdk_health_connect v3.3.0 remains our Long-Term Support (LTS) version. It will continue to receive bug fixes, security patches, and maintenance updates until May 31, 2026.
What this means
- Guaranteed long-term stability for existing integrations.
- Continued critical updates and security maintenance.
- Ideal for production environments requiring predictable and reliable support.
Release notes
- Improved logging
Local Summaries and Activity
You can now get a local copy of a Sleep Summary, Physical Summary, Body Summary and Activity events after syncing, check the documentation for more details.
Dependency updates
- rook-sdk (Gradle): 2.3.1 → 2.4.0
3.2.1
- Fixed sleep rem and deep calculations
Dependency updates
- rook-sdk (Gradle): 2.3.0 → 2.3.1
3.2.0
- Migrated to 16KB page size
- Improved Samsung Health metrics calculation.
- Improved logging
- Added
getAuthorizedDataSourcesV2toHCRookDataSources, This is an improved version ofgetAuthorizedDataSourcesthat returns a list ofAuthorizedDataSourceV2with the name, authorization status and image URL of each data source. - Added optional parameter
cancelAndRescheduletoHCRookBackgroundSync, If true, cancels any previously scheduled or currently running background sync and schedules a new one. False by default.
Deprecated components removed
- Removed
HCRookEventManagerandHCRookSummaryManager, go to the new manual sync section to check the new way of syncing health data manually.
Dependency updates
- rook-sdk (Gradle): 2.1.0 → 2.3.0
3.1.0
- Reduced the recovery time that automatic syncs will wait before syncing again when Health Connect rate limit is exceeded to 45 minutes.
- Fewer restrictions on manual syncs after Health Connect rate limit is exceeded.
- Optimized metadata logging
- Optimized time zone syncing
Dependency updates
- rook-sdk (Gradle): 2.0.0 → 2.1.0
3.0.0
Android 15
- Updated
compileSdkandtargetSdkto 35.
Background Sync
- Health Connect now supports background data reads, a new class;
HCRookBackgroundSyncwas added to schedule data synchronizations every hour, see the Background sync documentation to learn more. - Added experimental stream
isScheduledUpdatestoHCRookBackgroundSyncto get real-time background sync schedule state updates. - Added new
backgroundReadGrantedproperty toHealthConnectPermissionsSummaryto check if background read permission was granted by the user. Note that if this device does not support background read, this will be false. - The method
requestHealthConnectPermissionsinHCRookHealthPermissionsManagerwill also ask for the permission to read data in background (if the device supports it). - Not all devices support background reads, some may have to update its Health Connect application, to check
compatibility a new method;
checkBackgroundReadStatuswas added toHCRookHealthPermissionsManager. Go to the Background Read permissions section in the documentation to learn more.
Deprecated components removed
- Removed deprecated method
shouldSyncForfrom HCRookHelpers:HCRookSyncManageralready uses it internally. (HCHealthDataTypewas also removed). - Removed deprecated method
hasPermissionsfrom AndroidStepsManager. - Removed deprecated method
requestPermissionsfrom AndroidStepsManager. - Removed deprecated method
checkAvailabilityfrom HCRookHealthPermissionsManager. - Removed deprecated method
checkPermissionsfrom HCRookHealthPermissionsManager. - Removed deprecated method
requestPermissionsfrom HCRookHealthPermissionsManager. - Removed deprecated class
HCRookYesterdaySyncPermissions.
Removed old storage
The encrypted preferences storage was superseded by secure storage introduced in 2.4.0.
All SDK versions starting from 2.4.0 have a procedure to migrate the data from the old storage to the new storage during SDK initialization, if you are upgrading from version 2.4.0+ you don't need to do anything as your data is already in the new storage.
If you are upgrading from a version prior to 2.4.0 you may need to re-do the SDK initialization and user initialization steps.
Aggregate based calculation
In order to increase accuracy of data we increased our usage of Health Connect's aggregate API for Min, Avg and Max values calculation (where possible, otherwise raw data based calculation was left as it was).
Below you will see a table describing which health data was migrated to the aggregate API.
| Health data | Calculation procedure | Calculated values |
|---|---|---|
| Hydration | Aggregate API | Total |
| Steps | Aggregate API | Total |
| Floors Climbed | Aggregate API | Total |
| Elevation Gained | Aggregate API | Total |
| Heart Rate | Aggregate API | MIN, AVG, MAX |
| Resting Heart Rate | Aggregate API | AVG |
| Weight | Aggregate API | AVG |
| Height | Aggregate API | AVG |
| Blood Pressure | Aggregate API | AVG |
| Speed | Aggregate API | AVG, MAX |
| Steps Cadence | Aggregate API | AVG, MAX |
| Power | Aggregate API | AVG, MAX |
| Cycling Pedaling Cadence | Aggregate API | MIN, AVG, MAX |
It is highly recommended to use the min, avg, max values instead of granular data to avoid issues with duplicate data when 2 or more apps are writing to Health Connect.
Bug fixes
- Fixed Health Connect permissions request launcher crash when requesting permissions with an empty list of permissions.
Dependency updates
- rook-sdk (Gradle): 1.11.0 → 2.0.0
2.8.0
HCRookSummaryManagerandHCRookEventManagerhave been deprecated and will be replaced byHCRookSyncManager, go to the new manual sync section to check the new way of syncing health data manually.- Fixed physical events speed, cadence and power "extra" granular data bug when there are 2 or more exercise sessions in the same day.
- Improved event syncing of
HCRookYesterdaySyncManager.scheduleYesterdaySync - The methods
HCRookDataSources.getAvailableDataSourcesandHCRookDataSources.presentDataSourceViewhave been deprecated, useHCRookDataSources.getDataSourceAuthorizerto get a more efficient and scalable solution, reducing unnecessary data retrieval. If you previously relied onHCRookDataSources.getAvailableDataSourcesto build your own connections page, you can change toHCRookDataSources.getAuthorizedDataSourcesto get the authorization state of each API data source however you will need to use your own assets if you want to show an image.
BREAKING CHANGES
AuthorizedDataSourcesproperties have been changed to nullable in order to show data source availability.- Added Dexcom to
AuthorizedDataSourcesproperties.
- Added Dexcom to
HCRookDataSources.revokeDataSource(DataSourceType)was replaced byrevokeDataSource(String)to allow more flexibility. Allowed values: Garmin, Oura, Polar, Fitbit, Withings, Whoop.
Dependency updates
- rook_sdk_core: 0.4.5 → 1.0.0
- rook-sdk (Gradle): 1.10.0 → 1.11.0
2.7.0
- Added
getTodayCaloriesCounttoHCRookEventManagerto sync the calories count of the current day, if successful it will return aSyncStatusWithData.Syncedobject with theDailyCaloriesobject that was uploaded orSyncStatusWithData.RecordsNotFoundif the SDK could not find any calories records. For more information see the example. - Fixed error when optional metadata tags are not found.
Dependency updates
- rook-sdk (Gradle): 1.9.0 → 1.10.0
2.6.0
- RookDataSources
- Added
getAuthorizedDataSourcestoHCRookDataSourcesto get a summary of all data sources authorized by the current user.
- Added
- Improvements
- Optimized logging
- Bug fixes
- Fixed metrics extraction error on Samsung devices with Android 14+.
- Fixed Body a Physical summaries extraction when only minimal data is available.
- Fixed
revokeDataSourcemissing plugin implementation.
- Other
- Increased timeout of health data request to 15 seconds.
New variables
Added new data types BasalBodyTemperature, BodyFat, LeanBodyMass, CyclingPedalingCadence, BoneMass and BodyWaterMass extraction to Physical and Body summaries:
- PhysicalSummary
- cyclingPedalingCadenceMinRpm
- cyclingPedalingCadenceAvgRpm
- cyclingPedalingCadenceMaxRpm
- BodySummary
- basalTemperatureAvgCelsius
- bodyFatAvgPercentage
- leanBodyMassAvgKg
- boneMassAvgKg
- bodyWaterMassAvgKg
Added new permissions:
- android.permission.health.READ_BASAL_BODY_TEMPERATURE
- android.permission.health.READ_BODY_FAT
- android.permission.health.READ_LEAN_BODY_MASS
- android.permission.health.READ_BODY_WATER_MASS
- android.permission.health.READ_BONE_MASS
Dependency updates
- rook-sdk (Gradle): 1.8.0 → 1.9.0
2.5.0
- Customizable permissions
- Now the permissions that you remove from the AndroidManifest will affect the behavior of requesting/checking permissions methods, learn more about this in the customizing permissions section.
- Permissions Revocation
- Added
revokeHealthConnectPermissionstoHCRookHealthPermissionsManagerto reset all granted Health Connect permissions. Learn more about this in the Revoke permissions section
- Added
- Improvements
- Greatly reduced the recovery time that automatic syncs will wait before syncing again when Health Connect rate limit is exceeded to 45 minutes.
- Improved Health Connect permissions requests behavior.
- Optimized
HCRookYesterdaySyncManagerdata extraction procedure. - Added Vo2Max granular data to oxygenation events.
- Added current day Steps and Activity events to
HCRookYesterdaySyncManager. - Added
checkHealthConnectPermissionsPartiallytoHCRookHealthPermissionsManagerto check if at least one Health Connect permission is granted.
- Bug fixes
- Fixed Samsung Health steps count -1 (the SDK will always add +1 to steps count from Samsung).
- Breaking changes
HCRookHealthPermissionsManager.requestHealthConnectPermissionsUpdatesnow returns aHealthConnectPermissionsSummaryinstead of a Bool.HCRookHealthPermissionsManager.requestAndroidPermissionsUpdatesnow returns aAndroidPermissionsSummaryinstead of a Bool.HCRookYesterdaySyncManager.scheduleYesterdaySyncno longer requires you provide your credentials and environment. It will use the last used credentials and environment.
- Other
- Removed unused class
HCSyncInstruction
- Removed unused class
Dependency updates
- rook-sdk (Gradle): 1.6.0 → 1.8.0
- com.google.protobuf:protobuf-java (Gradle): 4.28.1 → Removed
- com.google.protobuf:protobuf-javalite (Gradle): New → 4.28.3
2.4.0
- Improvements
- Improved sleep summary extraction to prevent bad Samsung Health behaviour.
- Bug fixes
- Fixed error when trying to delete a user that no longer exists using
RookConfiguration.deleteUserFromRook, in this case the method will return success. - Fixed preferences being restored by Google backup.
- Fixed error when trying to delete a user that no longer exists using
- Secure storage
- Now you can set the file name and password of the storage that this SDK will use to save sensitive information, read more about this in the security section of the documentation. Please note that this is an optional configuration the SDK will use a default file name and auto-generate a password if you don't set one.
- RookHelpers
HCRookHelpers.shouldSyncForis deprecated, you no longer need to use this method sinceHCRookEventManagerandHCRookSummaryManageralready performs allshouldSyncForchecks.
- DataSources
- Added
revokeDataSourcetoHCRookDataSourcesthis will allow you to disconnect a user from the providedDataSourceType.
- Added
Dependency updates
- rook_sdk_core: 0.4.0 → 0.4.3
- rook-sdk (Gradle): 1.5.0 → 1.6.0
- com.google.crypto.tink:tink-android (Gradle): New → 1.4.0-rc2
- androidx.security:security-crypto (Gradle): 1.1.0-alpha01 → Removed
- org.jetbrains.kotlinx:kotlinx-serialization-json (Gradle): New → 1.5.0
- net.zetetic:sqlcipher-android (Gradle): New → 4.6.0@aar
- androidx.sqlite:sqlite (Gradle): New → 2.3.1
2.3.0
- New Permissions methods
- The
HCRookHealthPermissionsManagerclass will contain an improved version of all permissions methods, follow the single permission class migration guide to successfully migrate all deprecated methods to its new implementation. - Permissions classes deprecations
AndroidStepsManagerpermissions methods were deprecated.HCRookYesterdaySyncPermissionsand all its methods were deprecated.HCRookHealthPermissionsManager.checkAvailabilitywas deprecated.HCRookHealthPermissionsManager.checkPermissionswas deprecated.HCRookHealthPermissionsManager.requestPermissionswas deprecated.
- The methods
requestHealthConnectPermissionsandrequestAndroidPermissionswill return aRequestPermissionsStatus. - Added a stream for Health Connect permissions, listen to
requestHealthConnectPermissionsUpdatesto receive granted/denied status every timerequestHealthConnectPermissionsis called. - Added a stream for Android permissions, listen to
requestAndroidPermissionsUpdatesto receive granted/denied status every timerequestAndroidPermissionsis called.
- The
- HCRookYesterdaySyncManager
scheduleYesterdaySyncno longer requires thedoOnEndparameter.
- Exceptions
RequestQuotaExceededExceptionwill require the next importpackage:rook_sdk_core/rook_sdk_core.dart.MissingAndroidPermissionsExceptionwill require the next importpackage:rook_sdk_core/rook_sdk_core.dart.HealthConnectNotInstalledExceptionwill require the next importpackage:rook_sdk_core/rook_sdk_core.dart.DeviceNotSupportedExceptionwill require the next importpackage:rook_sdk_core/rook_sdk_core.dart.
- Other
- Fixed documentation typos
Dependency updates
- rook-sdk (Gradle): 1.4.0 → 1.5.0
- rook_sdk_core: 0.2.1 → 0.4.0
2.2.0
- Added
enableBackgroundSynctoRookConfiguration. RookConfigurationparameters were changed to required named parameters.- When
enableBackgroundSyncis true yesterday sync and steps tracking will start when initRook is called. - Improved rookYesterdaySync behaviour when switching users.
- Improved user storage, please verify that you are following the recommended user update procedure.
- Added optional parameter
redirectUrltogetAvailableDataSourcesandpresentDataSourceViewinHCRookDataSourcesclass. - Logcat logging improvements.
Dependency updates
- rook-sdk (Gradle): 1.3.1 → 1.4.0
2.1.1
- Optimized all data types upload process
- If a data type is not authorized, it will be counted as empty to extract only the authorized data types.
- Fixed Android and HealthConnect steps events datetime
Dependency updates
- rook-sdk (Gradle): 1.3.0 → 1.3.1
2.1.0
- Breaking changes
SyncStatuswill require the next importpackage:rook_sdk_core/rook_sdk_core.dart.
- Optimizations
- When calling
deleteUserFromRookall pending syncs will be deleted. - Modified the internal user creation process to only succeed if all data sources are registered correctly.
- Optimized Sleep Summaries upload.
- When calling
- Bug fixes
- Fixed a bug where the data sources Health Connect and Android could have different user ids assigned, from
this version all data sources will be checked after initialization and if their user ids don't match they will be
deleted (locally) and you will have to call
updateUserIDto assign the correct userID. UsinggetUserIDyou can verify the current status of the userID, more information in update userID. - Fixed a bug that caused NullPointerException when trying to get the Exception message in native.
- Fixed a bug where the data sources Health Connect and Android could have different user ids assigned, from
this version all data sources will be checked after initialization and if their user ids don't match they will be
deleted (locally) and you will have to call
- Health Connect
- Added
HCRookEventManager.syncTodayHealthConnectStepsCountto sync the steps count of the current day, if successful it will return aSyncStatusWithData.Syncedobject with the steps information that was uploaded orSyncStatusWithData.RecordsNotFoundif the SDK could not find any steps records.
- Added
- Android steps
- The background steps feature will require individual authorization, if you encounter the
exception
SDKNotAuthorizedExceptionplease contact ROOK support. - The background steps feature will send a Steps Event every hour instead of a summary every 12 hours.
AndroidStepsManager.getTodayStepswas removed.AndroidStepsManager.isActivewas renamed toAndroidStepsManager.isBackgroundAndroidStepsActive.AndroidStepsManager.startwas renamed toAndroidStepsManager.enableBackgroundAndroidSteps.AndroidStepsManager.stopwas renamed toAndroidStepsManager.disableBackgroundAndroidSteps.- Added
AndroidStepsManager.syncTodayAndroidStepsCountto sync the steps count of the current day, if successful it will return the number of steps taken.
- The background steps feature will require individual authorization, if you encounter the
exception
Dependency updates
- rook-sdk (Gradle): 1.2.4 → 1.3.0
- rook_sdk_core: 0.1.2 → 0.2.1
2.0.0
- Breaking changes
- All classes were converted to "static" classes, meaning that you won't need to create an instance to use its methods, also, to avoid instance creation all constructors access have been changed to private.
1.2.0
- Removed deprecated methods
syncYesterdaySummariesandsyncYesterdayEvents - Breaking changes
- The methods
checkPermissions(HCHealthPermission hcHealthPermission)andrequestPermissions(HCHealthPermission hcHealthPermission)have been replaced by ofcheckPermissions()andrequestPermissions().
- The methods
Dependency updates
- rook-sdk (Gradle): 1.2.3 → 1.2.4
1.1.1
- Fixed missing Proto files error
Dependency updates
- rook-sdk (Gradle): 1.2.2 → 1.2.3
1.1.0
- Added
RookDataSourcesto help developers build a custom API data sources lists, more information in Data Sources - Added
presentDataSourceViewto show a pre-built connections page. - Sleep Summary sync improvements.
New dependencies:
- androidx.lifecycle:lifecycle-viewmodel-ktx → 2.6.2
- androidx.activity:activity-ktx → 1.8.2
- androidx.swiperefreshlayout:swiperefreshlayout → 1.1.0
- androidx.constraintlayout:constraintlayout → 2.1.4
- com.google.android.material:material → 1.10.0
- io.coil-kt:coil → 2.5.0
Dependency updates
- rook-sdk (Gradle): 1.2.0 → 1.2.2
- rook_sdk_core: 0.1.0 → 0.1.2
1.0.1
Yesterday sync manager
Added a new class HCRookYesterdaySyncManager, to schedule an immediate health data synchronization,
see Sync health data automatically for more information.
HCRookYesterdaySyncManager is the equivalent of rookYesterdaySync but focused on hybrid environments like flutter. If
you are already using the rookYesterdaySync in the native side we strongly recommend you to migrate to this new
feature, but beware that you MUST NOT use rookYesterdaySync and HCRookYesterdaySyncManager at the same
time as it can provoke unexpected behavior.
Dependency updates
- rook-sdk (Gradle): 1.1.0 → 1.2.0
1.0.0
- Replaced
AndroidStepsTrackerwithAndroidStepsManager - If multiple sleep sessions are found when calling
RookSummaryManager.syncSleepSummaryall sessions will be synced individually. - Migrated to new ROOK SDKs api (This change is internal and does not require any change in your code).
Background steps re-work
The steps feature was re-worked and is now named as "Background steps"
The background steps feature now uploads summaries of daily total steps to ROOK servers, go to Background steps documentation to see the new implementation steps.
Dependency updates
- rook-sdk (Gradle): 0.8.1 → 1.1.0
- security-crypto (Gradle): 1.0.0 → 1.1.0-alpha01
0.5.1
- Fixed crash on Android 13 or lower devices when using
rookYesterdaySyncwithout having health connect installed.
If you are using rookYesterdaySync you also MUST update the native rook-sdk dependency in your app module
build.gradle to 0.8.1
Dependency updates
- rook-sdk (Gradle): 0.8.0 → 0.8.1
0.5.0
- Major performance improvements
- Added Physical events to
rookYesterdaySync - Deprecated
HCRookSummaryManager.syncYesterdaySummariesandHCRookEventManager.syncYesterdayEvents.
Automatic Sync
The following data types were added to rookYesterdaySync:
- Physical Event
If you have already implemented rookYesterdaySync this change won't require any other change in your end, after
updating to this version you will start to notice Physical events extraction and
upload logs.
Dependency updates
- rook-sdk (Gradle): 0.7.1 → 0.8.0
0.4.1
-
Fixed
rookYesterdaySynccrash on Android 10 -
Added Permissions and Query declarations to this SDK manifest, adding these declarations to your own manifest is optional as they will be included in the merged manifest.
-
rook-sdk (Gradle): 0.7.0 → 0.7.1
0.4.0
- Renamed
HealthPermissiontoHCHealthPermission. - Added
HCRookYesterdaySyncPermissions - Added Sync health data automatically tutorial.
- Sync methods of
HCRookSummaryManagerandHCRookEventManagernow returnFuture<SyncStatus>instead ofFuture<void>
Dependency updates
- protobuf:
>=2.0.0 <3.0.0→>=3.0.0 <4.0.0 - protobuf (Gradle): 3.24.4 → 3.25.3
- rook-sdk (Gradle): 0.5.6 → 0.7.0
0.3.4
- Updated rook-transmission module:
- All data types date and datetime properties will be converted to the device timezone before uploading.
0.3.3
- Improved
syncYesterdaySummariesandsyncYesterdayEventsperformance.
0.3.2
- Added
syncYesterdaySummariesandsyncYesterdayEvents - When initializing with
initRookan attempt to autoconfigure the userID (using a previously saved userID) will be made, more information in Update userID
0.3.1
- Added
deleteUserFromRook, this method will remove a user from both server and preferences, see Removing registered users for more information.
0.3.0
- Added StepsTracker to extract steps from phones, more information in the Steps Tracker Documentation
- When registering a user the Health Connect data source status will be changed to active.
- When requesting permissions the Health Connect data source status will be changed to active.
- Changed all
clientPasswordinstances tosecretKey.
0.2.1
- Optimized the number of calls to Health Connect required to extract Temperature Events.
0.2.0
Android 14
This version will only compile against Android 14 (SDK 34). Please follow the steps to migrate
- Update your gradle version to 8.1.2
- Update your
compileSdkandtargetSdkto 34 - Update your
sourceCompatibility,targetCompatibilityandjvmTargetto Java 17
Changes
- Permissions methods have changed, see Permissions for more information.
- Privacy policy configuration has changed, see Privacy policy for more information.
- Updated data access links, see Privacy policy for more information.
- Added new obfuscation rules, see Obfuscation for more information.
Known issues
If you are using the flutter plugin receive_intent you may encounter some
compilation errors, this is because receive_intent is not ready for java 17 and gradle 8+, this can be solved by editing
the receive_intent build.gradle file, add the following inside the android block:
android {
namespace "com.bhikadia.receive_intent"
compileOptions {
sourceCompatibility JavaVersion.VERSION_17
targetCompatibility JavaVersion.VERSION_17
}
kotlinOptions {
jvmTarget = JavaVersion.VERSION_17.toString()
}
}
0.1.0
- Changed
setLocalLoggingLeveltoenableNativeLogs, see Logging for more information. - Added
RookEnvironmentto configure internal behaviour, see Environment for more information. - Changed
RookConfigurationconstructor parameters, see Initialize for more information.
0.0.2
- Added Time Zone sync, see Update userID for more information.
0.0.1
- Initial release.