docs

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

pnpm add @helium/passpoint-sdk

iOS only:

cd ios && pod install

2. Configure the native projects

iOS. In Xcode, on your app target:

  1. Signing & Capabilities → add Hotspot Configuration.
  2. Signing & Capabilities → add Keychain Sharing with the group:
    $(AppIdentifierPrefix)com.apple.networkextensionsharing
    
  3. Note your Team ID. You'll need it for keychainAccessGroup in 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_LOCATION before calling install(), or the SDK rejects with PERMISSION_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 }

Next