sdk360 v0.0.46
HealthThreeSixty SDK Documentation
Installation
To install the SDK, use the following command:
npm install @droobismit/sdk360
To install all the peerdependencies , use the following command
npm i pnpm
pnpm install @droobismit/sdk360
Android Configuration
Set Minimum SDK Version
Update
minSdkVersion
in yourandroid/build.gradle
to 28 or above.Add Permissions to
AndroidManifest.xml
Navigate to
android/app/src/main/AndroidManifest.xml
and add the following permissions:
<!-- Essential Health Data Permissions -->
<uses-permission android:name="android.permission.health.READ_STEPS"/>
<uses-permission android:name="android.permission.health.READ_SLEEP"/>
<uses-permission android:name="android.permission.health.READ_EXERCISE"/>
<uses-permission android:name="android.permission.health.READ_ACTIVE_CALORIES_BURNED"/>
<uses-permission android:name="android.permission.health.READ_TOTAL_CALORIES_BURNED"/>
<!-- make it remove so this permission is not required -->
<uses-permission android:name="android.permission.health.READ_HEART_RATE" tools:node="remove"/>
<uses-permission android:name="android.permission.health.READ_BASAL_METABOLIC_RATE" tools:node="remove"/>
<uses-permission android:name="android.permission.health.READ_BLOOD_GLUCOSE" tools:node="remove"/>
<uses-permission android:name="android.permission.health.READ_BLOOD_PRESSURE" tools:node="remove"/>
<uses-permission android:name="android.permission.health.READ_BODY_FAT" tools:node="remove"/>
<uses-permission android:name="android.permission.health.READ_BODY_TEMPERATURE" tools:node="remove"/>
<uses-permission android:name="android.permission.health.READ_BODY_WATER_MASS" tools:node="remove"/>
<uses-permission android:name="android.permission.health.READ_BONE_MASS" tools:node="remove"/>
<uses-permission android:name="android.permission.health.READ_DISTANCE" tools:node="remove"/>
<uses-permission android:name="android.permission.health.READ_ELEVATION_GAINED" tools:node="remove"/>
<uses-permission android:name="android.permission.health.READ_FLOORS_CLIMBED" tools:node="remove"/>
<uses-permission android:name="android.permission.health.READ_HEART_RATE_VARIABILITY" tools:node="remove"/>
<uses-permission android:name="android.permission.health.READ_HEIGHT" tools:node="remove"/>
<uses-permission android:name="android.permission.health.READ_HYDRATION" tools:node="remove"/>
<uses-permission android:name="android.permission.health.READ_LEAN_BODY_MASS" tools:node="remove"/>
<uses-permission android:name="android.permission.health.READ_MENSTRUATION" tools:node="remove"/>
<uses-permission android:name="android.permission.health.READ_NUTRITION" tools:node="remove"/>
<uses-permission android:name="android.permission.health.READ_OXYGEN_SATURATION" tools:node="remove"/>
<uses-permission android:name="android.permission.health.READ_POWER" tools:node="remove"/>
<uses-permission android:name="android.permission.health.READ_RESPIRATORY_RATE" tools:node="remove"/>
<uses-permission android:name="android.permission.health.READ_RESTING_HEART_RATE" tools:node="remove"/>
<uses-permission android:name="android.permission.health.READ_SPEED" tools:node="remove"/>
<uses-permission android:name="android.permission.health.READ_STEPS_CADENCE" tools:node="remove"/>
<uses-permission android:name="android.permission.health.READ_SWIMMING_STROKES" tools:node="remove"/>
<uses-permission android:name="android.permission.health.READ_VO2_MAX" tools:node="remove"/>
<uses-permission android:name="android.permission.health.READ_WEIGHT" tools:node="remove"/>
- Add Privacy Policy Intent Filters
Include these under the MainActivity
in AndroidManifest.xml
:
In AndroidManifest.xml
include the following under the Activity you wish to display to the user when user wants to see your app's privacy policy:
Add them to the MainActivity
activity so both will run when the user launches your app
<intent-filter>
<action android:name="androidx.health.ACTION_SHOW_PERMISSIONS_RATIONALE" />
</intent-filter>
<intent-filter>
<action android:name="android.intent.action.VIEW_PERMISSION_USAGE" />
<category android:name="android.intent.category.HEALTH_PERMISSIONS" />
</intent-filter>
- Update Proguard Rules
-keep class co.tryterra.** { *; }
iOS Configuration
1. Set Minimum Deployment
Update Minimum Deployment Target
for your app to iOS 13.0+.
2. Enable HealthKit
- Add HealthKit as a capability to your project.
- Enable Background Delivery in the HealthKit entitlements.
<dict>
<key>com.apple.developer.healthkit</key>
<true/>
<key>com.apple.developer.healthkit.background-delivery</key>
<true/>
</dict>
3. Add Privacy Keys
Go to Info.plist and include the following:
- Go to main app folder > Click on the icon below TARGETS on the sidebar > click on Info on menu bar > go to Custom iOS Target Properties > hover over any key and click + button > add Privacy - Health Share Usage Description, once you add , you info.plist wil have these , you can change the string as per your requirement which will be visible for user
<key>NSHealthShareUsageDescription</key>
<string>We require access to your health data to provide personalized insights.</string>
<key>NSHealthUpdateUsageDescription</key>
<string>We need to update your health data to ensure accuracy.</string>
4. Enable Background Modes
<key>UIBackgroundModes</key>
<array>
<string>fetch</string>
<string>processing</string>
</array>
5. Add Background Task Scheduler
Add the following to Info.plist
:
<key>BGTaskSchedulerPermittedIdentifiers</key>
<array>
<string>co.tryterra.data.post.request</string>
</array>
6. Setup Background Delivery
Add this code to your AppDelegate’s didFinishLaunchingWithOptions
function:
[Terra setUpBackgroundDelivery];
SDK Initialization
To initialize the SDK, provide the required parameters as shown below.
Required Parameters
- userId: User's unique ID
- apiKey: API key
- apiSecret: API secret
- language (Optional):
en
(default) orar
- fullName (Optional): User's full name
- autoUpdateIntervalInMinutes (Optional): Minutes to refresh apis
- handleInfoPoints (Optional): Function for Info points click
- handleRedeemPoints (Optional): Function for Redeem points click
Initialization Example
import { init360, init360QA } from '@droobismit/sdk360';
const config = {
userId: 'yourUserId',
apiKey: 'yourApiKey',
apiSecret: 'yourApiSecret',
language: 'en',
fullName: 'userFullName',
autoUpdateIntervalInMinutes:5,
handleInfoPoints:handleInfoPoints,
handleRedeemPoints:handleRedeemPoints
};
// For production version, use init360
init360(config)
.then(() => console.log('SDK initialized successfully'))
.catch(error => console.error('SDK initialization failed:', error));
// For testing purposes, use init360QA with testing api key, secret, etc.
const testConfig = {
userId: 'testUserId',
apiKey: 'testApiKey',
apiSecret: 'testApiSecret',
language: 'en',
fullName: 'testUserFullName',
autoUpdateIntervalInMinutes:5,
handleInfoPoints:handleInfoPoints,
handleRedeemPoints:handleRedeemPoints
};
init360QA(testConfig)
.then(() => console.log('SDK initialized successfully in QA mode'))
.catch(error => console.error('SDK initialization failed in QA mode:', error));
Device Connectivity
Check Device Connection
Verify if a device is connected for the user:
import { checkDeviceConnection } from '@droobismit/sdk360';
checkDeviceConnection()
.then(isConnected=> {
if (isConnected) {
console.log('Device is connected.');
} else {
console.log('No device connected.');
}
})
.catch(error => {
console.error('Error checking device connection:', error);
});
Get Detailed Device Status
Retrieve detailed status of connected devices:
import { getDetailedDeviceStatus } from '@droobismit/sdk360';
getDetailedDeviceStatus()
.then(response => {
console.log('response ',response );
})
.catch(error => {
console.error('Error checking device details :', error);
});
Device List Screen
Use the DevicesList
component to display the device list component to connect devices:
import { DevicesList} from '@droobismit/sdk360';
const App = () => {
return <DevicesList/>;
};
HealthContentLibrary SDK Documentation
Content Library Screen
Use the HealthContentLibrary
component to display the content library screen:
import { HealthContentLibrary } from '@droobismit/sdk360';
const App = () => {
return <HealthContentLibrary />;
};
Health Graph Card SDK Documentation
Content Library Screen
Use the HealthGraphView
component to display the content library screen:
import { HealthGraphView } from '@droobismit/sdk360';
const App = () => {
return <HealthGraphView />;
};
Quiz Screen
A React Native quiz module that displays daily health questions, handles user responses, shows correct/incorrect feedback with explanations, and rewards points for correct answers through a congratulatory popup.
Required Parameters
successPopupSubmitCallback :Optional callback that runs after user collects points from popup.
import { HealthThreeSixtyQuiz } from '@droobismit/sdk360';
const App = () => {
return <HealthThreeSixtyQuiz />;
};
Success Popup
A modal component that shows a congratulatory message with earned points and a collect button. Displays points in a stylized view with background image.
Required Parameters
showPopup
: Controls modal visibility (boolean)handleClose
: Called when modal is closed (function)handleSubmit
: Called when "Collect Points" is pressed (function)points
: Points to display in popup (number, default: 10)import { Popup } from '@droobismit/sdk360'; const App = () => { return <Popup />; };
Required Parameters
Points Management
The SDK provides several methods to manage and retrieve user scores and rankings.
Get User Points Details
Retrieve detailed points information for a specific activity type:
import { fetchUserPoints } from '@droobismit/sdk360';
try {
const scoreDetails = await fetchUserPoints({
startDate: '2024-03-01',
endDate: '2024-03-14',
type: 'STEP', // Available types: 'STEP', 'SLEEP', 'CALORIES', 'QUIZ'
page: 1, // Optional, defaults to 1
size: 10 // Optional, defaults to 10
});
console.log('Score details:', scoreDetails);
} catch (error) {
console.error('Error:', error);
Get Leaderboard
Retrieve user rankings for a specified period:
import { fetchLeaderboard } from '@droobismit/sdk360';
try {
const leaderboard = await fetchLeaderboard({
startDate: '2024-03-01',
endDate: '2024-03-14',
page: 1, // Optional, defaults to 1
size: 10 // Optional, defaults to 10
});
console.log('Leaderboard:', leaderboard);
} catch (error) {
console.error('Error:', error);
}
Get Points Summary
Retrieve a summary of user points for a specified period:
import { fetchPointsSummary } from '@droobismit/sdk360';
try {
const summary = await fetchPointsSummary({
startDate: '2024-03-01',
endDate: '2024-03-14'
});
console.log('Score summary:', summary);
} catch (error) {
console.error('Error:', error);
}
Get Reward Rules
Retrieve the current reward rules and conditions:
import { fetchRewardsRules } from '@droobismit/sdk360';
try {
const rules = await fetchRewardsRules();
console.log('Scoring rules:', rules);
} catch (error) {
console.error('Error:', error);
}
Parameter Validation
The SDK performs strict validation on all parameters:
- Dates: Must be in 'YYYY-MM-DD' format
- Activity Types: Must be one of: 'STEP', 'SLEEP', 'CALORIES', 'QUIZ'
If any validation fails, the SDK throws a HealthThreeSixtyError
with appropriate error code and message.
Health Stats Methods
Today's Health Data
Get today's health statistics:
import {
fetchTodaysSteps,
fetchTodaysCalories,
fetchTodaysSleep
} from '@droobismit/sdk360';
// Get today's step count
const stepsData = await fetchTodaysSteps();
// Returns: { date: "2024-03-14", value: 8547 }
// Get today's calories burned
const caloriesData = await fetchTodaysCalories();
// Returns: { date: "2024-03-14", value: 1850 }
// Get today's sleep duration
const sleepData = await fetchTodaysSleep();
// Returns: {
// date: "2024-03-14",
// value: 27000, // seconds
// formatted: "07:30" // HH:MM format
// }
Historical Health Records
Get health data for a specific date range:
import {
fetchStepsRecords,
fetchCaloriesRecords,
fetchSleepRecords
} from '@droobismit/sdk360';
// Get steps data for a date range
const stepsData = await fetchStepsRecords("2024-03-01", "2024-03-07");
// Returns: [
// { date: "2024-03-01", value: 9876 },
// { date: "2024-03-02", value: 10234 },
// ...
// ]
// Get calories data for a date range
const caloriesData = await fetchCaloriesRecords("2024-03-01", "2024-03-07");
// Returns: [
// { date: "2024-03-01", value: 1950 },
// { date: "2024-03-02", value: 2100 },
// ...
// ]
// Get sleep data for a date range
const sleepData = await fetchSleepRecords("2024-03-01", "2024-03-07");
// Returns: [
// {
// date: "2024-03-01",
// value: 27000, // seconds
// formatted: "07:30" // HH:MM format
// },
// ...
// ]
Parameters
For historical records methods:
startDate
: Start date in YYYY-MM-DD formatendDate
: End date in YYYY-MM-DD format
Error Handling
try {
const stepsData = await fetchTodaysSteps();
} catch (error) {
switch (error.code) {
case 7400: // DATA_ERROR
console.error('Failed to fetch health data');
break;
case 7501: // MISSING_PARAMETER
console.error('Missing required parameters');
break;
case 7603: // USER_NOT_INITIALIZED
console.error('User not initialized');
break;
default:
console.error('An unexpected error occurred:', error.message);
}
}
Notes
- All methods require the SDK to be initialized with
init360()
orinit360QA()
first - Sleep duration is provided in both seconds (
value
) and formatted HH:MM string (formatted
) - Delete node_modules inside sdk360 if error comes from react-native(to automate add to the scripts in package.json - "postinstall": "rd /s /q node_modules" (windows OS) , "postinstall": "rm -rf node_modules/sdk360/node_modules" (Mac OS)
- If there are any peer dependencies that did not get installed, install them manually by running the following command:
npm install \
@react-native-async-storage/async-storage \
@react-navigation/bottom-tabs \
@react-navigation/native \
@react-navigation/stack \
@reduxjs/toolkit \
axios \
link \
match-sorter \
moment \
react \
react-native \
react-native-chart-kit \
react-native-dotenv \
react-native-elements \
react-native-fast-image \
react-native-gesture-handler \
react-native-linear-gradient \
react-native-orientation-locker \
react-native-raw-bottom-sheet \
react-native-responsive-screen \
react-native-safe-area-context \
react-native-screens \
react-native-simple-toast \
react-native-svg \
react-native-svg-transformer \
react-native-vector-icons \
react-native-webview \
react-native-youtube-iframe \
react-redux \
react-test-renderer \
redux \
redux-flipper \
redux-persist \
redux-thunk \
remote-redux-devtools \
terra-react \
typescript
10 months ago
10 months ago
10 months ago
10 months ago
10 months ago
10 months ago
10 months ago
10 months ago
10 months ago
10 months ago
10 months ago
10 months ago
10 months ago
10 months ago
10 months ago
10 months ago
10 months ago
10 months ago
10 months ago
10 months ago
10 months ago
10 months ago
10 months ago
10 months ago
10 months ago
10 months ago
10 months ago
10 months ago
10 months ago
10 months ago
11 months ago
11 months ago
11 months ago
11 months ago
11 months ago
11 months ago
11 months ago
11 months ago
11 months ago
11 months ago
11 months ago