# Health Connect'ten FHIR'a

> Android Health Connect verilerini Fitbit, Garmin, Oura, Withings ve Wear OS'ten Flutter'da okuyun ve izinler, geçmiş, Play incelemesi ile bir FHIR R4 kaydına yazın.

Source: https://developers.anpheros.com/tr/guides/health-connect-fhir

**Health Connect, Android'in cihaz içi sağlık deposudur: Samsung Health, Fitbit, Garmin Connect, Oura, Withings ve Wear OS uygulamaları buraya yazar ve sizin uygulamanız kişinin izniyle buradan okur.** Bu verileri bir FHIR kaydına koymak için, telefondaki günlük toplamları ve ortalamaları okuyun, bunları arka ucunuza gönderin ve her metriği bir LOINC kodu ve bir UCUM birimi ile bir Observation olarak yazın. Bu sayfa, Android'in gerektirdiği izinleri, aynı kodla Android'de Health Connect'i ve iOS'ta Apple Health'i okuyan bir Flutter örneğini (`flutter analyze` ile kontrol edildi) ve Google Play'de yayınlama kurallarını kapsar.

## Health Connect'e Neler Ulaşır

Health Connect, Android 14 ve sonraki sürümlere entegre edilmiştir ve daha eski sürümlerde uygulama olarak mevcuttur. `HeartRateRecord`, `RestingHeartRateRecord`, `HeartRateVariabilityRmssdRecord`, `OxygenSaturationRecord`, `RespiratoryRateRecord`, `StepsRecord`, `DistanceRecord`, `ActiveCaloriesBurnedRecord`, `SleepSessionRecord`, `WeightRecord`, `BloodPressureRecord`, `BloodGlucoseRecord`, `BodyTemperatureRecord` ve `ExerciseSessionRecord` gibi kayıtları tutar.

Her satıcı belgesine göre kimin oraya yazdığı:

| Kaynak | Ne Beklemeli |
|---|---|
| Fitbit ve Pixel Watch | Kişi kurulumu yaptıktan sonra Fitbit uygulaması Health Connect ile eşitlenir ([Google yardımı](https://support.google.com/fitbit/answer/14506680)) |
| Garmin | Garmin Connect, Android 14 ve sonraki sürümlerde Health Connect'i destekler: kalp atış hızı ve kalori gibi aktivite ve sağlık verileri ([Android Developers, Ağustos 2025](https://developer.android.com/health-and-fitness/community/newsletters/2025/08)) |
| Oura | Kalp atış hızı, HRV, evrelerle uyku, adımlar, mesafe, kalori ve antrenmanlar ([Oura](https://ouraring.com/blog/data-sharing-partner-integrations/)) |
| Withings | Health Mate, Health Connect aracılığıyla aktivite, ağırlık, uyku ve diğer verileri alışverişinde bulunur ([Android Developers blogu](https://android-developers.googleblog.com/2023/03/withings-reduces-data-sync-code-with--health-and-fitness-api-health-connect.html)) |
| Samsung Health, Galaxy Watch | Samsung Health'in kendi hızında bir alt küme — [Samsung Health'ten FHIR'e](https://developers.anpheros.com/tr/guides/samsung-health-fhir) bakın |

Her satıcı uygulamasının Health Connect'e **yazma** iznine sahip olması gerekir; bu izin kişi tarafından o uygulamada veya Health Connect ayarlarında verilir. Bir kaynak eksikse, kontrol edilecek ilk şey budur.

## İzinler Android gerektirir

- Kayıt türü ve yönü başına bir izin, örneğin `android.permission.health.READ_HEART_RATE` ve `android.permission.health.READ_STEPS`, manifest'te beyan edilir ve çalışma zamanında istenir.
- **Geçmiş:** `android.permission.health.READ_HEALTH_DATA_HISTORY` olmadan, bir uygulama yalnızca izin verilmeden önceki son 30 günü okuyabilir.
- **Arka Plan:** uygulama ön planda değilken okuma `android.permission.health.READ_HEALTH_DATA_IN_BACKGROUND` gerektirir.
- Gizlilik politikanızı açıklayan bir **izin gerekçesi** ekranı (`ACTION_SHOW_PERMISSIONS_RATIONALE`'i işleyen bir aktivite, ayrıca Android 14'te bir aktivite takma adı) olmadan izin iletişim kutusu açılmaz.
- Flutter'da, `MainActivity` izin istekleri başarısız olursa `FlutterActivity` yerine `FlutterFragmentActivity`'ten genişletilmelidir.

## Flutter'da Günlük Değerleri Okuma

[`health`](https://pub.dev/packages/health) paketi, Android'de Health Connect'i ve iOS'te Apple Health'i tek bir API'nin arkasında okur. Örnek, Anpheros Daily'nin birlikte gönderdiği 13.2.1 sürümünü kullanır:

```dart
import 'dart:math' as math;

import 'package:health/health.dart';

/// One day of data from Health Connect (Android) or Apple Health (iOS), ready for your backend.
class DailyValue {
  DailyValue(this.metric, this.day, this.value, {this.min, this.max});
  final String metric; // 'heart_rate', 'steps'
  final String day; // '2026-10-01', the user's local day
  final double value;
  final double? min, max;

  Map<String, Object?> toJson() => {'metric': metric, 'day': day, 'value': value, 'min': min, 'max': max};
}

final health = Health();

Future<List<DailyValue>> collectLastDays({int days = 30}) async {
  await health.configure();
  if (!await health.isHealthConnectAvailable()) {
    await health.installHealthConnect(); // opens the Play Store on Android; always available on iOS
    return [];
  }
  const types = [HealthDataType.HEART_RATE, HealthDataType.STEPS];
  final granted = await health.requestAuthorization(types, permissions: [HealthDataAccess.READ, HealthDataAccess.READ]);
  if (!granted) return [];

  final now = DateTime.now();
  final out = <DailyValue>[];
  for (var i = days - 1; i >= 0; i--) {
    final start = DateTime(now.year, now.month, now.day - i); // local midnight, safe across DST changes
    final end = DateTime(start.year, start.month, start.day + 1);
    final day = start.toIso8601String().substring(0, 10);

    final steps = await health.getTotalStepsInInterval(start, end);
    if (steps != null) out.add(DailyValue('steps', day, steps.toDouble()));

    final samples = await health.getHealthDataFromTypes(types: [HealthDataType.HEART_RATE], startTime: start, endTime: end);
    final bpm = [for (final p in samples) if (p.value is NumericHealthValue) (p.value as NumericHealthValue).numericValue.toDouble()];
    if (bpm.isNotEmpty) {
      out.add(DailyValue('heart_rate', day, bpm.reduce((a, b) => a + b) / bpm.length,
          min: bpm.reduce(math.min), max: bpm.reduce(math.max)));
    }
  }
  return out; // POST these to your backend, which writes them to the FHIR record
}
```

`getTotalStepsInInterval`, Health Connect'ten toplu toplamını ister; bu, zaten çakışan kaynakları (aynı yürüyüşü sayan bir telefon ve bir saat) kişinin Health Connect'te ayarladığı veri kaynağı önceliğine göre çözer. Ham adım kayıtlarını kendiniz toplamak çift saymaya neden olur.

Anpheros Daily'de bunu göndermeyle ilgili notlar:

- **Uygulama ön plana geldiğinde senkronize edin**, tekrarlanan senkronizasyonlara karşı kısa bir koruma ile. Diğer uygulamalar kendi programlarına göre Health Connect'e yazar, bu nedenle bir kişinin satıcı uygulamasında gördüğü veriler dakikalar veya saatler sonra gelebilir.
- **Kalp atış hızı tek bir değer değil, bir seridir**: Her okumayı yüklemek yerine telefonda özetleyin (günlük veya grafikler için 4 saatlik pencerelerde).
- **Buradaki HRV RMSSD'dir.** Apple Health için kullanılan SDNN kodu altında saklamayın.

## Flutter Değerlerinden FHIR Gözlemlerine

Değerleri arka uç sisteminize gönderin ve her kişi, metrik ve gün için kararlı bir tanımlayıcı ile bir Gözlem yazın, aynı gün tekrar gönderildiğinde güncelleyin. Tam eşleme tablosu (Health Connect kaydı → LOINC → UCUM), doğrulanmış bir FHIR örneği ve platforma karşı çalıştırılan TypeScript upsert, [FHIR'de Giyilebilir Veriler](https://developers.anpheros.com/tr/guides/wearable-data-fhir) bölümünde bulunmaktadır.

## Google Play'da Yayınlama

Health Connect'i okuyan uygulamalar, Play Console'da Health Connect izin beyannamesini tamamlamalı, her veri türünü gerekçelendirmeli ve buna uygun bir gizlilik politikasına sahip olmalıdır. Uygulamanın görünür şekilde kullanmadığı veri türleri için yapılan istekler reddedilir. İnceleme için plan yapın: her türü onu kullanan ekranın yanına listeleyin.

## Wear OS

Bir Wear OS saatinde, bir uygulama Health Services aracılığıyla canlı sensör verilerini okuyabilir (örneğin, bir egzersiz sırasında kalp atış hızı). Saatin kendi sağlık uygulamasının kaydettiği veriler, satıcının telefon uygulaması aracılığıyla telefonun Health Connect'ine ulaşır. Tıbbi bir kayıt için, telefondaki Health Connect'i okumak genellikle yeterlidir; bir saat uygulaması canlı özellikler içindir.

## Anpheros Nerede Yer Alıyor?

Anpheros Platformu, kişinin FHIR R4 kaydını, her giyilebilir cihaz değerini bir Observation olarak işaretlenmiş, onay, kaynak bilgisi ve erişim günlüğü arkasında saklar. Health Connect'i kendisi okumaz; bunu Android uygulamanız yapar. Anpheros'un kendi uygulaması olan **Anpheros Daily**, Android'de Health Connect'i okur (Plus ve Max planları) ve günlük özetleri kayda yazar.

## Sıkça Sorulan Sorular

### Health Connect'in bir bulut API'si var mı?
Hayır. Health Connect verileri telefonda depolar ve yalnızca o telefondaki uygulamalar, kişinin izniyle okuyabilir. Verileri bir sunucuya almak için uygulamanız verileri okur ve gönderir.

### Health Connect REST API veya web API'si var mı?
Hayır. Health Connect, REST veya web uç noktası olmayan, cihaz üzerinde çalışan bir Android API'sidir. Bir sunucu, yalnızca telefondaki bir uygulama verileri okuyup gönderdiğinde, örneğin Anpheros'a FHIR Observations olarak, verileri alır.

### Health Connect API'sini Python veya React Native'den kullanabilir miyim?
Python'dan hayır, çünkü Python telefonda çalışır, sunucuda değil. React Native veya Flutter'dan ise evet, uygulama içindeki Android API'sini çağıran topluluk veya resmi eklentiler aracılığıyla.

### Uygulamam neden yalnızca 30 günlük Health Connect verisini okuyabiliyor?
`READ_HEALTH_DATA_HISTORY` izni olmadan, Health Connect ilk izin verilmeden önceki 30 güne okumaları sınırlar. Daha eski verilere ihtiyacınız varsa geçmiş iznini isteyin.

### Garmin Health Connect ile senkronize oluyor mu?
Evet. Google, Ağustos 2025'te Garmin Connect'in Android 14 ve sonraki sürümlerde aktivite ve sağlık verileri (kalp atış hızı ve kalori gibi) için Health Connect'i desteklediğini duyurdu. Garmin'in kendi puanları (Body Battery gibi) paylaşılmaz.

### Fitbit Web API'si olmadan Fitbit verilerini okuyabilir miyim?
Android'de evet: Kişi Fitbit uygulamasında Health Connect'i etkinleştirdikten sonra, Fitbit verileri, yetkilendirdikleri uygulamalar için Health Connect'te kullanılabilir hale gelir.

### Health Connect adım sayısı neden satıcı uygulamamdan farklı?
Satıcı uygulaması en son verilerini henüz dışa aktarmamış olabilir, yalnızca bazı türleri dışa aktarıyor olabilir veya Health Connect aynı dönem için başka bir kaynağı tercih ediyor olabilir. Health Connect ayarlarındaki veri kaynaklarını ve önceliklerini kontrol edin.

## İlgili Konular

- [Fitbit Web API kapanışı (Ekim 2026)](https://developers.anpheros.com/tr/guides/fitbit-web-api-shutdown)
- [FHIR'da giyilebilir cihaz verileri](https://developers.anpheros.com/tr/guides/wearable-data-fhir): eşleme tablosu ve arka uç kodu
- [Samsung Health'ten FHIR'a](https://developers.anpheros.com/tr/guides/samsung-health-fhir)
- [Apple Health (HealthKit)'ten FHIR'a](https://developers.anpheros.com/tr/guides/apple-health-fhir)
- [Flutter ile bir sağlık uygulaması nasıl oluşturulur](https://developers.anpheros.com/tr/guides/healthcare-app-flutter)
