Quickstart
Five minutes, one app. You'll install the heliumOS Wi-Fi offload SDK, configure the native projects, and provision your first subscriber.
This guide assumes a working React Native (or Expo) app. If you don't
have one, npx create-expo-app is the fastest path. You'll also need a
partner record and an API key: see
prerequisites.
1. Install the SDK
iOS only:
cd ios && pod install
2. Configure the native projects
iOS. In Xcode, on your app target:
- Signing & Capabilities → add Hotspot Configuration.
- Signing & Capabilities → add Keychain Sharing with the
group:
$(AppIdentifierPrefix)com.apple.networkextensionsharing - Note your Team ID. You'll need it for
keychainAccessGroupin the next step.
Android. Ensure app/build.gradle has minSdk 26 or higher. The
SDK ships its own AndroidManifest with the Wi-Fi and location
permissions; they merge automatically.
Request location at runtime. On Android you must request
ACCESS_FINE_LOCATIONbefore callinginstall(), or the SDK rejects withPERMISSION_DENIED.
3. Wrap your app in <PasspointProvider>
import { PasspointProvider } from '@helium/passpoint-sdk';
export default function App() {
return (
<PasspointProvider
config={{
apiKey: process.env.EXPO_PUBLIC_HELIUM_WIFI_API_KEY!,
environment: 'development',
keychainAccessGroup: 'YOUR_TEAM_ID.com.apple.networkextensionsharing',
}}
>
<RootNavigator />
</PasspointProvider>
);
}
4. Provision a subscriber
import { usePasspoint, PasspointError } from '@helium/passpoint-sdk';
function WifiToggle({ subscriberId }: { subscriberId: string }) {
const { isInstalled, install, remove, isLoading } = usePasspoint();
if (isInstalled === null) return null; // still loading
return isInstalled ? (
<Button onPress={remove} title="Disable WiFi offload" />
) : (
<Button
onPress={() => install(subscriberId).catch(handle)}
title="Enable WiFi offload"
disabled={isLoading}
/>
);
}
subscriberId is an opaque string you choose. See
subscriber IDs for the contract.
5. Verify
After install() resolves, the device should auto-associate to nearby
Helium hotspots. To confirm server-side state from another device:
const status = await sdk.getRemoteStatus(subscriberId);
// { presetId, eapType: 13, expiresAt, active: true }