@sonarhealth/react-native-sdk
v0.1.3
Published
Sonar health data sync for React Native: Apple Health and Health Connect.
Maintainers
Readme
@sonarhealth/react-native-sdk
Sonar health data sync for React Native (Expo SDK 54+): Apple Health on iOS, Health Connect on Android. A thin layer over the native Sonar SDKs; the sync, its background work and the session run natively, so they keep working when JavaScript is not running.
Beta: iOS only for now. Android apps build and run, but every Sonar call there rejects with a
SonarSdkError whose code is platform_unsupported (getState reports signed out, signOut
resolves). Gate Sonar on Platform.OS === "ios".
The iOS SDK needs iOS 16: the plugin raises the app's deployment target to 16.0 when it is lower.
Examples and a demo backend: https://github.com/Sonar-Health/sonar-sdk-examples
Setup
{
"expo": {
"plugins": [
["@sonarhealth/react-native-sdk", {
"appId": "app_…",
"historyDays": 730,
"healthShareUsageDescription": "…",
"privacyPolicyUrl": "https://…"
}]
]
}
}Sandbox or live follows the API key your backend mints client tokens with; the app is built the same
for both. The plugin writes the app ID and historyDays (30 to 1825 days a new connection imports, default 730)
for the native launch hooks, the HealthKit entitlement
with background delivery, the background task identifiers and modes, the Health usage text, and the
iOS deployment target.
Use
import { Platform } from "react-native";
import Sonar from "@sonarhealth/react-native-sdk";
export async function startSonar() {
if (Platform.OS !== "ios") return;
await Sonar.authenticate({
userId: currentUser.id,
clientTokenProvider: async ({ appId, installationId }) => (await myBackend.sonarToken(appId, installationId)).client_token,
});
Sonar.observeState((state) => render(state));
await Sonar.connect("apple_health");
}Call authenticate on every launch. The full contract is the Sonar SDK interface reference.
