Flutter健康数据访问插件terra_apple_health的使用

Flutter健康数据访问插件terra_apple_health的使用

Terra Flutter Apple Healthkit

该(非官方)插件集成了一个与Terra的Apple SDK交互的桥接器和接口。这使开发者能够构建React Native应用程序,并将用户的Apple Healthkit连接到Terra生态系统。

安装

首先,安装插件:

dart pub add terra_apple_health

使用方法

你可以参考/example文件夹中的示例来了解如何使用。首先导入插件并创建一个实例:

import 'package:terra_apple_health/terra_apple_health.dart';

...

final terra = TerraAppleHealth(
    // 注意:传递你自己的API密钥和开发ID
    "terraTestDevID",
    "terraTestingAPIKey",
    autoFetch: true
);

在向用户展示小部件会话后,如果确定他们希望使用Apple Health进行认证,可以调用TerraApple.auth,这将对用户进行Terra认证并返回一个Future:

final authResult = await terra.auth();
if (authResult['terra_id'] != null) {
    // 获取响应映射中的userID或状态
}

一旦有了用户ID,就可以通过使用TerraApple.initTerra将设备SDK实例连接到Terra:

terra.initTerra(userId: authResult['terra_id']);

initTerra 将设备连接到Terra。每次用户打开应用时都需要执行此操作(如果SDK未初始化,则无法指示其连接到Terra)。另一方面,auth 仅在首次从您的应用连接用户时需要(在此之后,任何对auth的调用都将返回为该设备生成的相同用户ID)。

如果设置了autoFetch为true,当用户打开应用时,每8小时将数据发送到您的webhook。

活动数据会在用户打开应用时发送到您的webhook。你也可以通过调用getter请求数据发送到您的webhook:

terra.getBody(
   DateTime(2022, 01, 02),
   DateTime.now()
);
terra.getDaily(
  DateTime(2022, 01, 02),
   DateTime.now()
);
terra.getSleep(
  DateTime(2022, 01, 02),
   DateTime.now()
);
terra.getActivity(
  DateTime(2022, 01, 02),
   DateTime.now()
);

最后,你可以使用deauth()函数和调用Terra deauth API取消用户的认证:

terra.deauth();

完整示例代码

以下是完整的示例代码:

import 'package:flutter/material.dart';
import 'package:terra_apple_health/terra_apple_health.dart';
import 'package:terra_apple_health_example/secrets.dart';

void main() {
  runApp(const MyApp());
}

class MyApp extends StatefulWidget {
  const MyApp({Key? key}) : super(key: key);

  [@override](/user/override)
  State<MyApp> createState() => _MyAppState();
}

class _MyAppState extends State<MyApp> {
  [@override](/user/override)
  void initState() {
    super.initState();
  }

  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        floatingActionButton: FloatingActionButton(
            child: const Icon(Icons.medical_services),
            onPressed: () async {
              final terra = TerraAppleHealth(
                // 注意:传递你自己的API密钥和开发ID
                terraTestDevID,
                terraTestingAPIKey,
              );
              final authResult = await terra.auth();
              if (authResult['terra_id'] != null) {
                terra
                    .initTerra(userId: authResult['terra_id'])
                    .then((resultMap) {
                  // 发送示例数据到webhook
                  terra.getDaily(
                      DateTime.now().subtract(const Duration(days: 1)),
                      DateTime.now().add(const Duration(days: 1)));
                });
              }
            }),
        appBar: AppBar(
          title: const Text('Terra Plugin Demo'),
        ),
        body: const Center(
          child: Text('点击按钮以连接'),
        ),
      ),
    );
  }
}

更多关于Flutter健康数据访问插件terra_apple_health的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter健康数据访问插件terra_apple_health的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


terra_apple_health 是一个用于 Flutter 的插件,允许开发者访问 Apple Health 数据。该插件由 Terra 提供,主要用于从 Apple HealthKit 中读取健康数据,并将其传输到 Terra 的 API 或其他后端服务。

以下是使用 terra_apple_health 插件的基本步骤:

1. 添加依赖

首先,在 pubspec.yaml 文件中添加 terra_apple_health 插件的依赖:

dependencies:
  flutter:
    sdk: flutter
  terra_apple_health: ^1.0.0  # 使用最新版本

然后运行 flutter pub get 以安装依赖。

2. 配置 iOS 项目

在 iOS 项目中,你需要在 Info.plist 文件中添加 HealthKit 的权限声明:

<key>NSHealthShareUsageDescription</key>
<string>We need access to your health data to provide personalized insights.</string>
<key>NSHealthUpdateUsageDescription</key>
<string>We need access to your health data to provide personalized insights.</string>

3. 初始化插件

在 Flutter 应用中初始化 terra_apple_health 插件。你需要提供 Terra 的 API 密钥和开发者的 ID:

import 'package:terra_apple_health/terra_apple_health.dart';

void main() async {
  WidgetsFlutterBinding.ensureInitialized();

  // 初始化插件
  TerraAppleHealth terraAppleHealth = TerraAppleHealth();
  await terraAppleHealth.init(
    devId: 'YOUR_DEV_ID',
    apiKey: 'YOUR_API_KEY',
  );

  runApp(MyApp());
}

4. 请求权限

在访问健康数据之前,你需要请求用户的权限。你可以使用 requestPermissions 方法来请求访问特定类型的健康数据:

await terraAppleHealth.requestPermissions(
  types: [
    HealthDataType.steps,
    HealthDataType.heartRate,
    HealthDataType.sleep,
  ],
);

5. 获取健康数据

你可以使用 getHealthData 方法来获取特定类型的健康数据。例如,获取步数数据:

DateTime startDate = DateTime.now().subtract(Duration(days: 7));
DateTime endDate = DateTime.now();

List<HealthDataPoint> stepsData = await terraAppleHealth.getHealthData(
  type: HealthDataType.steps,
  startDate: startDate,
  endDate: endDate,
);

for (var dataPoint in stepsData) {
  print('Steps: ${dataPoint.value} on ${dataPoint.date}');
}

6. 同步数据到 Terra

如果你需要将数据同步到 Terra 的 API,可以使用 syncHealthData 方法:

await terraAppleHealth.syncHealthData(
  startDate: startDate,
  endDate: endDate,
);

7. 处理错误

在使用插件时,确保处理可能出现的错误:

try {
  await terraAppleHealth.requestPermissions(types: [HealthDataType.steps]);
} catch (e) {
  print('Error requesting permissions: $e');
}

8. 监听数据变化

你可以使用 listenToHealthData 方法来监听健康数据的变化:

terraAppleHealth.listenToHealthData((data) {
  print('New health data: $data');
});

9. 停止监听

当你不再需要监听健康数据时,可以停止监听:

terraAppleHealth.stopListeningToHealthData();

10. 清理资源

在应用退出时,确保清理插件资源:

[@override](/user/override)
void dispose() {
  terraAppleHealth.dispose();
  super.dispose();
}
回到顶部