Skip to main content
Version: 2.0.0

Impilo Mobile SDK Integration Guide (React Native)

This guide covers the steps to add the Impilo Mobile SDK to your React Native application.

1. Unzip and Add the SDK

  1. Extract the SDK zip file to your project directory:

    unzip impilo_mobile_sdk_react_native.zip
  2. Add the SDK to your package.json:

    {
    "dependencies": {
    "react-native-impilo-mobile-sdk": "file:./react-native-impilo-mobile-sdk"
    }
    }
  3. Run yarn install --force to install the dependency.

2. iOS Configuration

Info.plist Permissions

Add the following entries to your ios/<YourApp>/Info.plist:

<!-- Apple Health -->
<key>NSHealthShareUsageDescription</key>
<string>This app requires access to read your health data to provide health monitoring features.</string>
<key>NSHealthUpdateUsageDescription</key>
<string>This app requires access to save health data to your Health app.</string>

<!-- Bluetooth -->
<key>NSBluetoothAlwaysUsageDescription</key>
<string>This app requires Bluetooth access to connect to medical devices such as blood pressure monitors.</string>
<key>NSBluetoothPeripheralUsageDescription</key>
<string>This app requires Bluetooth access to connect to medical devices such as blood pressure monitors.</string>

HealthKit Entitlements

  1. Open ios/<YourApp>.xcworkspace in Xcode
  2. Select the app target
  3. Go to "Signing & Capabilities"
  4. Click "+ Capability" and add "HealthKit"

Install Pods

cd ios && pod install

3. Android Configuration

Minimum SDK Version

Update your android/app/build.gradle:

android {
defaultConfig {
minSdkVersion 26 // Health Connect requires API 26+
}
}

AndroidManifest.xml

Add the following to android/app/src/main/AndroidManifest.xml:

<manifest xmlns:android="http://schemas.android.com/apk/res/android">
<!-- Bluetooth permissions -->
<uses-permission android:name="android.permission.BLUETOOTH" android:maxSdkVersion="30" />
<uses-permission android:name="android.permission.BLUETOOTH_ADMIN" android:maxSdkVersion="30" />
<uses-permission android:name="android.permission.BLUETOOTH_SCAN" android:usesPermissionFlags="neverForLocation" />
<uses-permission android:name="android.permission.BLUETOOTH_CONNECT" />

<!-- Health Connect permissions -->
<uses-permission android:minSdkVersion="28" android:name="android.permission.health.READ_BLOOD_PRESSURE" />
<uses-permission android:minSdkVersion="28" android:name="android.permission.health.WRITE_BLOOD_PRESSURE" />
<!-- Add other health permissions as needed -->

<application>
<activity
android:name=".MainActivity"
android:exported="true">
<!-- Intent filter for Health Connect -->
<intent-filter>
<action android:name="androidx.health.ACTION_SHOW_PERMISSIONS_RATIONALE" />
</intent-filter>
</activity>

<!-- Activity alias for Health Connect -->
<activity-alias
android:name="ViewPermissionUsageActivity"
android:exported="true"
android:targetActivity=".MainActivity"
android:permission="android.permission.START_VIEW_PERMISSION_USAGE">
<intent-filter>
<action android:name="android.intent.action.VIEW_PERMISSION_USAGE" />
<category android:name="android.intent.category.HEALTH_PERMISSIONS" />
</intent-filter>
</activity-alias>
</application>

<queries>
<package android:name="com.google.android.apps.healthdata" />
</queries>
</manifest>

Gradle Settings

Add the native SDK modules to your android/settings.gradle:

// Include native-sdk modules from bundled React Native SDK
def rnSdkNativePath = new File(rootDir, '../react-native-impilo-mobile-sdk/android/native-sdk')
if (rnSdkNativePath.exists()) {
include ':native-sdk:orchestration'
include ':native-sdk:impilomobilesdk'
project(':native-sdk:orchestration').projectDir = new File(rnSdkNativePath, 'orchestration')
project(':native-sdk:impilomobilesdk').projectDir = new File(rnSdkNativePath, 'impilomobilesdk')
}

4. Basic Usage

Initialize SDK

import { SDKProvider, useSDKContext, SDK } from 'react-native-impilo-mobile-sdk';

// Wrap your app
function App() {
return (
<SDKProvider>
<MainApp />
</SDKProvider>
);
}

// In your component
function MainApp() {
const { sdk, initializeSDK } = useSDKContext();

useEffect(() => {
if (!sdk) {
SDK.initialize();
initializeSDK();
}
}, [sdk]);

return <YourContent />;
}

Request Health Permissions

import { Platform } from 'react-native';
import { ReadingType } from 'react-native-impilo-mobile-sdk';

async function requestHealthPermissions(sdk) {
const types = [
ReadingType.BloodPressure,
ReadingType.BloodGlucose,
];

if (Platform.OS === 'ios') {
await sdk.appleHealth.requestAccess(types, types);
} else {
await sdk.androidHealthConnect.requestAccess(types, types);
}
}

Discover and Connect to Device

import { useDeviceDiscovery } from 'react-native-impilo-mobile-sdk';

function DeviceScreen() {
const { discoverTranstekBBZ32BB01 } = useDeviceDiscovery();

const startDiscovery = () => {
discoverTranstekBBZ32BB01((device) => {
console.log('Found:', device.bluetoothIdentifier());

// Pair the device
device.pair((pairedDevice) => {
console.log('Paired!');

// Monitor for readings
pairedDevice.monitorForReading((reading) => {
console.log('BP:', reading.data.systolicInMmHg, '/', reading.data.diastolicInMmHg);
});
});
});
};

return <Button title="Start Discovery" onPress={startDiscovery} />;
}

Next Steps

For detailed API documentation and advanced usage, see the React Native SDK Guide.