Skip to main content

Virtual Fitness (Video On-Demand)

Virtual Fitness connects members to third-party video content providers -- currently NEOU and Lifetime Digital. Members can browse on-demand workout classes through partner platforms. The SDK handles registration, sign-up URL generation, and profile disconnection.


How It Works

  1. Check registration -- Determine if the member is already linked to a provider.
  2. Get sign-up details -- Retrieve the partner's sign-up URL, redirect URL, and promo code.
  3. Register -- Create the member's profile with the provider.
  4. Watch content -- Load the provider's content in a WebView or redirect to their app.
  5. Disconnect -- Unlink the member's profile when they no longer want the service.

Data Model

VirtualFitnessSignUpDetails

Returned by getNEOUSignUpDetails() and getLifetimeSignUpDetails().

FieldTypeDescription
signUpUrlString?URL of the partner's sign-up page.
redirectUrlString?URL to return to after sign-up completes.
promoCodeString?Promotional code applied during registration.

NEOU

Check Registration

// Android
val registered = AFCore.virtualFitness().isMemberRegisteredToNeou()

Get Sign-Up Details

Retrieve the NEOU sign-up URL and promo code. Use this to present the sign-up page in a WebView.

// Android
val details = AFCore.virtualFitness().getNEOUSignUpDetails()
webView.loadUrl(details.signUpUrl ?: "")

Register

// Android
val success = AFCore.virtualFitness().registerNEOUProfile()

Disconnect

// Android
val disconnected = AFCore.virtualFitness().disconnectNEOUProfile()

Lifetime Digital

Check Registration

// Android
val registered = AFCore.virtualFitness().isMemberRegisteredToLifetimeDigital()

Get Sign-Up Details

// Android
val details = AFCore.virtualFitness().getLifetimeSignUpDetails()
webView.loadUrl(details.signUpUrl ?: "")

Register

// Android
val success = AFCore.virtualFitness().registerLifetimeDigitalProfile()

Disconnect

// Android
val disconnected = AFCore.virtualFitness().disconnectLifetimeDigitalProfile()

Integration Example

A typical flow checks registration first, then either shows content or presents the sign-up page.

lifecycleScope.launch {
try {
if (AFCore.virtualFitness().isMemberRegisteredToNeou()) {
// Member is registered -- show NEOU content
navigateToNEOUContent()
} else {
// Not registered -- show sign-up page
val details = AFCore.virtualFitness().getNEOUSignUpDetails()
val registered = AFCore.virtualFitness().registerNEOUProfile()
if (registered) {
webView.loadUrl(details.signUpUrl ?: "")
} else {
showError("Could not register with NEOU")
}
}
} catch (e: Exception) {
showError("Virtual Fitness unavailable: ${e.message}")
}
}

Best Practices

  • Open partner content in a WebView. Keep the experience within your app rather than opening an external browser.
  • Explain the partner relationship. Let members know that Virtual Fitness content is provided by a third party and may require a separate account.
  • Handle partner downtime gracefully. If registration or sign-up details fail, show a clear message and offer a retry option.
  • Confirm before disconnecting. Show a dialog explaining that disconnecting removes access to the partner's content.

Quick Reference

// Android -- NEOU
AFCore.virtualFitness().isMemberRegisteredToNeou()
AFCore.virtualFitness().getNEOUSignUpDetails()
AFCore.virtualFitness().registerNEOUProfile()
AFCore.virtualFitness().disconnectNEOUProfile()

// Android -- Lifetime Digital
AFCore.virtualFitness().isMemberRegisteredToLifetimeDigital()
AFCore.virtualFitness().getLifetimeSignUpDetails()
AFCore.virtualFitness().registerLifetimeDigitalProfile()
AFCore.virtualFitness().disconnectLifetimeDigitalProfile()