react-native-healthkit-bridge
Version:
A comprehensive React Native bridge for Apple HealthKit with TypeScript support, advanced authorization, and flexible data queries
177 lines (176 loc) β’ 7.39 kB
JavaScript
import { HealthKitBridge, QuantityTypeIdentifier, CategoryTypeIdentifier, HealthKitUnit } from '../index';
// Example 1: Full authorization (read and write all data)
export async function exampleFullAuthorization() {
const bridge = new HealthKitBridge();
console.log('π Requesting full authorization...');
const isAuthorized = await bridge.requestFullAuthorization();
if (isAuthorized) {
console.log('β
Full authorization granted!');
console.log('π Now you can read and write all HealthKit data types');
}
else {
console.log('β Full authorization denied');
}
return isAuthorized;
}
// Example 2: Show available types for user selection
export async function exampleShowAvailableTypes() {
const bridge = new HealthKitBridge();
console.log('π Getting available types for authorization...');
const availableTypes = await bridge.getAvailableTypesForAuthorization();
console.log('π Available types:');
availableTypes.forEach(type => {
console.log(` β’ ${type.name} (${type.identifier})`);
console.log(` Category: ${type.category}`);
console.log(` Description: ${type.description}`);
console.log('');
});
// Here you can show an interface for the user to select
// which types they want to authorize
const selectedTypes = availableTypes
.filter(type => type.category === 'activity' || type.category === 'heart')
.map(type => type.identifier);
console.log('π― Types selected by user:', selectedTypes);
return availableTypes;
}
// Exemplo 3: AutorizaΓ§Γ£o de leitura especΓfica
export async function exampleReadAuthorization() {
const bridge = new HealthKitBridge();
const readTypes = [
QuantityTypeIdentifier.StepCount,
QuantityTypeIdentifier.HeartRate,
QuantityTypeIdentifier.DistanceWalkingRunning,
CategoryTypeIdentifier.SleepAnalysis
];
const isAuthorized = await bridge.requestReadAuthorization(readTypes);
if (isAuthorized) {
console.log('β
Read authorization granted!');
console.log('π Authorized types for reading:');
readTypes.forEach(type => console.log(` β’ ${type}`));
// Now we can read the data
const steps = await bridge.getQuantitySamplesForDays(QuantityTypeIdentifier.StepCount, HealthKitUnit.count, 1);
console.log('π Steps today:', steps.reduce((sum, s) => sum + s.value, 0));
}
else {
console.log('β Read authorization denied');
}
return isAuthorized;
}
// Example 4: Write authorization for specific types
export async function exampleWriteAuthorization() {
const bridge = new HealthKitBridge();
console.log('βοΈ Requesting write authorization for specific types...');
const writeTypes = [
QuantityTypeIdentifier.StepCount,
QuantityTypeIdentifier.ActiveEnergyBurned
];
const isAuthorized = await bridge.requestWriteAuthorization(writeTypes);
if (isAuthorized) {
console.log('β
Write authorization granted!');
console.log('π Authorized types for writing:');
writeTypes.forEach(type => console.log(` β’ ${type}`));
// Here you could implement the logic to write data for the authorized types
console.log('π‘ Now you can write data for the authorized types');
}
else {
console.log('β Write authorization denied');
}
return isAuthorized;
}
// Example 5: Full selective authorization flow
export async function exampleSelectiveAuthorizationFlow() {
const bridge = new HealthKitBridge();
console.log('π Starting selective authorization flow...');
// 1. Check availability
const isAvailable = await bridge.checkAvailability();
if (!isAvailable) {
console.log('β HealthKit is not available');
return false;
}
// 2. Get available types
const availableTypes = await bridge.getAvailableTypesForAuthorization();
console.log(`π ${availableTypes.length} available types`);
// 3. Simulate user selection (in a real app, it would be an interface)
const userSelectedReadTypes = [
QuantityTypeIdentifier.StepCount,
QuantityTypeIdentifier.HeartRate,
CategoryTypeIdentifier.SleepAnalysis
];
const userSelectedWriteTypes = [
QuantityTypeIdentifier.StepCount
];
// 4. Request selective authorization
const isAuthorized = await bridge.requestSelectiveAuthorization(userSelectedReadTypes, userSelectedWriteTypes);
if (isAuthorized) {
console.log('β
Selective authorization granted!');
console.log('π Authorized types for reading:');
userSelectedReadTypes.forEach(type => console.log(` β’ ${type}`));
console.log('π Authorized types for writing:');
userSelectedWriteTypes.forEach(type => console.log(` β’ ${type}`));
// 5. Check authorization status
const status = await bridge.getAuthorizationStatus([
...userSelectedReadTypes,
...userSelectedWriteTypes
]);
console.log('π Authorization status:');
status.forEach(item => console.log(` β’ ${item.identifier}: ${item.status}`));
}
else {
console.log('β Selective authorization denied');
}
return isAuthorized;
}
// Example 6: User selection interface (conceptual)
export function createUserSelectionInterface(availableTypes) {
console.log('π¨ User selection interface:');
console.log('');
// Group by category
const groupedTypes = availableTypes.reduce((acc, type) => {
if (!acc[type.category]) {
acc[type.category] = [];
}
acc[type.category].push(type);
return acc;
}, {});
Object.entries(groupedTypes).forEach(([category, types]) => {
console.log(`π ${category.toUpperCase()}:`);
types.forEach((type) => {
console.log(` β ${type.name} - ${type.description}`);
});
console.log('');
});
console.log('π‘ In a real app, this would be a graphical interface');
console.log(' where the user can mark/unmark the desired types');
}
// Example of complete usage
export async function runAllAuthorizationExamples() {
console.log('π Running all authorization examples...\n');
try {
// Example 1: Full authorization
console.log('='.repeat(50));
await exampleFullAuthorization();
console.log('');
// Example 2: Show available types
console.log('='.repeat(50));
const availableTypes = await exampleShowAvailableTypes();
console.log('');
// Example 3: Read authorization
console.log('='.repeat(50));
await exampleReadAuthorization();
console.log('');
// Example 4: Write authorization
console.log('='.repeat(50));
await exampleWriteAuthorization();
console.log('');
// Example 5: Full selective authorization flow
console.log('='.repeat(50));
await exampleSelectiveAuthorizationFlow();
console.log('');
// Example 6: Conceptual user selection interface
console.log('='.repeat(50));
createUserSelectionInterface(availableTypes);
}
catch (error) {
console.error('β Error during execution of examples:', error);
}
}