UNPKG

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
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); } }