Skip to main content
This guide gets you from a freshly installed SDK to a working 60-second vitals scan in approximately five minutes. By the end you will have initialized the SDK with your license key, presented the scan UI, received a VitalsResult object, and learned how to interpret the quality tier before displaying or persisting any metric. If you haven’t added the SDK to your project yet, complete Installation first.
1

Initialize the SDK

Call VitalsSDK.configure once during app startup — typically in your AppDelegate (iOS) or Application subclass (Android). Initialization validates your license key and prepares the measurement engine. Attempting to present a scan before calling configure will throw a runtime error.
Place this call in application(_:didFinishLaunchingWithOptions:) inside your AppDelegate, or in the init() of your top-level App struct if you are using SwiftUI.
Replace "YOUR_LICENSE_KEY" with the key you received from Neurofit. Do not commit this value to source control. See Installation — Securing Your License Key for recommended storage patterns.
2

Present the scan view

The SDK ships a purpose-built scan UI that handles camera preview, the 60-second countdown, real-time signal quality feedback, and user guidance. Present it when the user initiates a scan.
Instantiate VitalsScanViewController, assign your delegate, and present it. It can be pushed onto a navigation stack or presented modally.
The view controller manages its own camera session lifecycle. It requests camera permission on first presentation if the user has not yet been prompted.
The scan requires 60 seconds of continuous rear-camera contact with a fingertip. The SDK UI guides the user through correct finger placement and will surface a .withheld quality tier if the signal is too noisy to produce a reliable result.
3

Handle results

When the scan completes, the SDK delivers a VitalsResult containing all measured metrics. Implement the appropriate callback for your platform.
Conform to VitalsScanDelegate in the view controller (or object) that owns the scan:
didComplete fires when the 60-second capture finishes and the engine has produced a result. didFailWith fires for hard errors such as camera access denial or an invalid license key.

Available metrics on VitalsResult

4

Check the quality tier before using results

Every VitalsResult carries a qualityTier that tells you whether the SDK has enough confidence in the signal to consider the result reliable. Always inspect this value before displaying metrics to a user or writing them to a data store.
.accepted / QualityTier.ACCEPTED The photoplethysmography signal met the SDK’s internal quality thresholds throughout the 60-second window. The result has been validated against the methodology used in Polar H10 comparison testing and is reliable for wellness reporting..withheld / QualityTier.WITHHELD The signal contained too much motion artifact or noise for the engine to produce a result within validation tolerances. Individual metric properties on the result object will not contain usable values. Prompt the user to retake the scan with their finger resting steadily against the lens in a well-lit environment.
The Neurofit Vitals SDK is a wellness tool validated against the Polar H10 chest strap. It is not a medical device. Quality tier .accepted means the result is within the SDK’s own validation bounds — it does not constitute a clinical determination.

Next Steps

iOS Integration Guide

Deep-dive into SwiftUI and UIKit integration patterns, background handling, and lifecycle best practices for iOS.

Android Integration Guide

Jetpack Compose and View-based integration, runtime permissions flow, and activity result API migration.

Handling Results

Store, display, and trend vitals results — including quality filtering, local persistence, and charting guidance.

Metrics Overview

Understand what each metric measures, how it is computed from the PPG signal, and how to interpret values for your users.