Android
Native Android toolkit that integrates the Zing Fitness experience into your app. The SDK ships as an AAR (coach.zing:fitness-sdk) consumable via GitHub Packages.
GitHub repository: https://github.com/Muze-Fitness/fitness-coach-sdk-android
Requirements
| Requirement | Value / Notes |
|---|---|
| Minimum Android version | 8.0 (API 26) |
| Compile SDK | 34+ |
| Kotlin | 2.1.0 |
| Dependency injection | Hilt (com.google.dagger:hilt-android) |
| Maven credentials | GitHub Packages PAT with read:packages |
Setup
Add the GitHub Packages Repository
Add the following to your settings.gradle or top-level build.gradle:
// settings.gradle or top-level build.gradle
dependencyResolutionManagement {
repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS)
repositories {
google()
mavenCentral()
maven {
url = uri("https://maven.pkg.github.com/Muze-Fitness/fitness-coach-sdk-android")
val localProperties = java.util.Properties()
val file = File(rootDir, "local.properties")
if (file.exists()) {
localProperties.load(file.inputStream())
}
credentials {
username = localProperties.getProperty("sdk_maven_read_username")
?: System.getenv("GITHUB_USER")
password = localProperties.getProperty("sdk_maven_read_token")
?: System.getenv("GITHUB_TOKEN")
}
}
}
}Create local.properties next to your top-level settings.gradle if it does not exist yet and provide the credentials:
sdk_maven_read_username=GITHUB_USERNAME
sdk_maven_read_token=ghp_xxx_with_read_packagesDeclare the Dependency
dependencies {
implementation("coach.zing:fitness-sdk:<latest-version>")
}Replace <latest-version> with the version published in GitHub Packages (e.g. 1.0.3).
Enable Hilt
Add the Hilt plugin and dependencies to your app-level build.gradle:
plugins {
id("com.android.application")
id("org.jetbrains.kotlin.android")
id("com.google.dagger.hilt.android")
kotlin("kapt") // or id("com.google.devtools.ksp")
}
dependencies {
implementation("com.google.dagger:hilt-android:2.56.1")
kapt("com.google.dagger:hilt-android-compiler:2.56.1")
// ksp("com.google.dagger:hilt-android-compiler:2.56.1")
}Create an Application Subclass
Create an Application subclass that extends SdkApplication:
@HiltAndroidApp
class FitnessApp : SdkApplication()Register it in AndroidManifest.xml:
<application
android:name=".FitnessApp"
... />Initialization
Initialize the SDK in your Application class:
class FitnessApp : SdkApplication() {
override fun onCreate() {
super.onCreate()
ZingSdk.init()
}
}Logout
When your user logs out, call the SDK logout method:
fun onLogout(scope: CoroutineScope) {
scope.launch {
ZingSdk.logout()
// e.g. navigate to login or clear user data
}
}Launching Zing Screens
You can open any major Zing screen explicitly via ZingSdkActivity.launch(context, StartingRoute.<Destination>).
Supported Destinations
StartingRoute.CustomWorkoutStartingRoute.AiAssistantStartingRoute.WorkoutPlanDetailsStartingRoute.FullScheduleStartingRoute.ProfileSettingsStartingRoute.HealthConnectPermissions(optional)
Example
button.setOnClickListener {
ZingSdkActivity.launch(this, StartingRoute.AiAssistant)
}Health Connect (optional)
The SDK can show a Health Connect permissions screen and run background Health Connect sync.
Permissions
Add the following to your host app AndroidManifest.xml:
<uses-permission android:name="android.permission.ACTIVITY_RECOGNITION" />
<uses-permission android:name="android.permission.SCHEDULE_EXACT_ALARM" />
<uses-permission android:name="android.permission.FOREGROUND_SERVICE" />
<uses-permission android:name="android.permission.FOREGROUND_SERVICE_HEALTH" />
<uses-permission android:name="android.permission.POST_NOTIFICATIONS" />
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />Boot receiver (restart sync after reboot)
Register the boot receiver inside <application>:
<receiver
android:name="coach.zing.fitness.coach.broadcast.SdkHealthSyncBootReceiver"
android:exported="false">
<intent-filter>
<action android:name="android.intent.action.BOOT_COMPLETED" />
</intent-filter>
</receiver>Health Connect permissions screen
ZingSdkActivity.launch(context, StartingRoute.HealthConnectPermissions)