SDK
Table of contents
Repository
You can browse the Sahha React Native SDK on Github.
Installation
NPM Package
Install the Sahha NPM Package inside the root folder of your React Native project.
React Native SDK [NPM Registry]
Terminal
$ npm i sahha-react-native
Android
Add the required permissions to your project’s AndroidManifest.xml.
AndroidManifest.xml
<uses-permission android:name="android.permission.FOREGROUND_SERVICE" />
<uses-permission android:name="android.permission.PACKAGE_USAGE_STATS" tools:ignore="ProtectedPermissions" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
<uses-permission android:name="android.permission.ACTIVITY_RECOGNITION" />
<uses-permission android:name="com.google.android.gms.permission.ACTIVITY_RECOGNITION" />
iOS
Step 1.) In addition to installing the NPM package, you must also install the Sahha SDK to your Xcode workspace via CocoaPods.
Run pod install
inside your Xcode project root folder.
Terminal
$ pod install
Step 2.) Add NSMotionUsageDescription
to your Xcode project’s Info.plist.
Step 3.) Add NSHealthShareUsageDescription
to your Xcode project’s Info.plist.
Step 4.) Add NSHealthUpdateUsageDescription
to your Xcode project’s Info.plist.
You will need to write a message explaining to the user why they should approve these permissions.
Info.plist
<key>NSMotionUsageDescription</key>
<string>This app would like access to your motion activity for analysis.</string>
<key>NSHealthShareUsageDescription</key>
<string>This app would like access to your health activity for analysis.</string>
<key>NSHealthUpdateUsageDescription</key>
<string>This app would like access to your health activity for analysis.</string>
Step 5.) Add HealthKit
entitlement to your Xcode project. Select your App Target in the Project panel, then Signing & Capabilities
, then tap the +
button, then select HealthKit
from the list.
App.entitlements
<key>com.apple.developer.healthkit</key>
<true/>
React Native Module Import
Import the Sahha module into any files inside your React Native project that use the SDK.
import Sahha from "sahha-react-native";
Configure
The Sahha SDK must be configured immediately on app launch. We suggest you configure Sahha inside your App’s export function
.
Option A) Use Default Values
import Sahha, { SahhaEnvironment, SahhaSensor } from "sahha-react-native";
export default function App() {
// Use default values
const settings = {
environment: SahhaEnvironment.development,
};
Sahha.configure(settings, (error: string, success: boolean) => {
console.log(`Success: ${success}`);
if (error) {
console.error(`Error: ${error}`);
}
});
}
Option B) Use Custom Values
import Sahha, { SahhaEnvironment, SahhaSensor } from "sahha-react-native";
export default function App() {
// Use custom values
const settings = {
environment: SahhaEnvironment.production,
sensors: [SahhaSensor.sleep, SahhaSensor.pedometer],
postSensorDataManually: true,
};
Sahha.configure(settings, (error: string, success: boolean) => {
console.log(`Success: ${success}`);
if (error) {
console.error(`Error: ${error}`);
}
});
}
Settings
You may pass an optional list of settings to the configure
method.
The SahhaEnvironment
determines if the SDK connects to the development
or production
server of the API. Setting this incorrectly will send data to the wrong server.
SahhaEnvironment | Description |
---|---|
development | For development and testing |
production | For submission to the App store |
enum SahhaEnvironment { development, production }
Which sensors do you want to enable? Passing an empty array will enable all sensors by default.
SahhaSensor | Description | Android | iOS |
---|---|---|---|
sleep | For tracking sleep patterns | ✓ | ✓ |
pedometer | For tracking walking patterns | ✓ | ✓ |
device | For tracking device usage patterns | ✓ | X |
enum SahhaSensor { sleep, pedometer, device }
If you would like to handle posting of sensor data to the Sahha API manually, set postSensorDataManually
to true
. You will then need to post sensor data to the Sahha API manually by calling postSensorData
.
If you would like the Sahha SDK to handle posting of sensor data to the Sahha API automatically, set postSensorDataManually
to false
.
postSensorDataManually
defaults to false
.
postSensorDataManually | Description |
---|---|
true | You will post sensor data to the Sahha API manually by calling postSensorData |
false | The Sahha SDK will post sensor data to the Sahha API automatically |
Profile
Each user of your app will be assigned a Sahha Profile for analyzation. This is not handled by the Sahha SDK. Please refer to the separate Sahha API documentation for steps to generate profiles and profile tokens.
Authenticate
The Sahha SDK must be authenticated in order to connect to the Sahha API. Do this once per user profile. Once the user is successfully authenticated, the SDK will take care of automatically refreshing expired tokens.
Sahha.authenticate(
"PROFILE_TOKEN",
"REFRESH_TOKEN",
(error: string, success: boolean) => {
console.log(`Success: ${success}`);
if (error) {
console.error(`Error: ${error}`);
}
}
);
Demographic
Each authenticated profile includes an optional demographic which can be used to increase the accuracy of analyzation. This data is not collected automatically. Your app can choose to GET or POST this demographic to the Sahha API.
// All values are optional
const demographic = {
age: 35, // number
gender: "Female", // string, "Male", "Female", "Gender Diverse",
country: "NZ", // ISO 2 digit code, i.e. "US", "UK", "AU", etc.
birthCountry: "UK" // ISO 2 digit code, i.e. "US", "UK", "AU", etc.
}
// Post a JSON object
Sahha.postDemographic(demographic, (error: string, success: boolean) => {
if error {
console.error(`Error: $ {error}`);
} else if success {
console.log(`Success: $ {success}`);
}
});
// Get a JSON object
Sahha.getDemographic((error: string, value: string) => {
if error {
console.error(`Error: $ {error}`);
} else if value {
console.log(`Value: $ {value}`);
}
});
Sensors
The Sahha SDK acts as a bridge between your app and the device sensors. You must enable each sensor that you want to start collecting data from. To optimize your analysis result, we suggest enabling all available sensors.
export enum SahhaSensor {
sleep = 'sleep',
pedometer = 'pedometer',
device = 'device',
}
Sensor Status
Each sensor has multiple possible statuses.
export enum SahhaSensorStatus {
pending = 0, /// Sensor data is pending User permission
unavailable = 1, /// Sensor data is not supported by the User's device
disabled = 2, /// Sensor data has been disabled by the User
enabled = 3, /// Sensor data has been enabled by the User
}
You can check the current status of each sensor by calling getSensorStatus
. This method is asynchronous and will return the updated SahhaSensorStatus
in its callback.
import Sahha, { SahhaSensor, SahhaSensorStatus } from 'sahha-react-native';
...
Sahha.getSensorStatus(
SahhaSensor.pedometer,
(error: string, value: SahhaSensorStatus) => {
if (error) {
console.error(`Error: ${error}`);
} else if (value) {
console.log(`Sensor Status: ${value}`);
}
}
);
Enable Sensor
You will need to manually enable each sensor by calling enableSensor
. This method is asynchronous and will return the updated SahhaSensorStatus
in its callback.
import Sahha, { SahhaSensor, SahhaSensorStatus } from 'sahha-react-native';
...
Sahha.enableSensor(
SahhaSensor.pedometer,
(error: string, value: SahhaSensorStatus) => {
if (error) {
console.error(`Error: ${error}`);
} else if (value) {
console.log(`Sensor Status: ${value}`);
setSensorStatus(value);
}
}
);
Prompt User to Activate
It’s possible for your app user to disable a sensor. In this case, you must send the user to the app settings to manually enable the sensor.
Sahha.openAppSettings();
NOTICE for iOS: If the user enables / disables a sensor permission from the device settings menu while your app is in the background, the iOS system will force your app to terminate. This is intentional behavior and your app will need to be relaunched.
Post Sensor Data
By default, the Sahha SDK will post sensor data automatically. However, if you set postSensorDataManually
to true
, you will need to post sensor data manutally to the Sahha API by calling postSensorData
at a regular interval of your choosing.
You have two options:
- A) Include a list of specific sensor data you want to post
- B) Post all sensor data
Option A) Post specific sensor data
// Include a list of sensors
Sahha.postSensorData(sensors: [SahhaSensor.device],
(error: string, success: boolean) => {
console.log(`Success: ${success}`);
if (error) {
console.error(`Error: ${error}`);
}
}
);
Option B) Post all sensor data
// Leave sensor list empty
Sahha.postSensorData((error: string, success: boolean) => {
console.log(`Success: ${success}`);
if (error) {
console.error(`Error: ${error}`);
}
});
Analyze
You can analyze a user’s activities over a period of time and receive a mental health personalized report which you can display or action within your app.
Sahha.analyze((response) => {
console.log(response);
});
The response will be in JSON format. An example response includes these fields:
JSON
{
"inferences": [
{
"createdAt": "2022-05-20T00:30:00+00:00",
"modelName": "automl_toolkit_randomForest",
"predictionState": "not_depressed",
"predictionSubState": "",
"predictionRange": -1,
"predictionConfidence": 0.8,
"dataSource": ["sleep", "screenTime"],
"dataSourceSummary": [
{
"type": "sleep",
"amount": "0"
},
{
"type": "screenTime",
"amount": "0"
}
]
}
]
}