Flutter健康数据同步插件withings_flutter的使用
Flutter健康数据同步插件withings_flutter的使用
使用说明
安装WithingsFlutter
要安装WithingsFlutter,请在项目的pubspec.yaml
文件的依赖项中添加以下内容:
dependencies:
withings_flutter: #最新版本
保存后运行flutter pub get
以获取该包。
Android平台设置
在Android平台上,你需要在android/app/src/main/AndroidManifest.xml
文件中添加以下代码:
<activity android:name="com.linusu.flutter_web_auth.CallbackActivity"
android:exported="true" >
<intent-filter android:label="flutter_web_auth">
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" />
<data android:scheme="CALLBACK_SCHEME" />
</intent-filter>
</activity>
并将CALLBACK_SCHEME
替换为你自己的回调方案(例如example
)。
Web平台设置
在Web平台上,你需要创建一个端点来捕获回调URL,并将其发送到应用中。在项目中的./web
文件夹下,创建一个名为auth.html
的HTML文件,内容如下:
<!DOCTYPE html>
<title>认证完成</title>
<p>认证已完成。如果没有自动关闭,请手动关闭此窗口。</p>
<script>
window.opener.postMessage({
'flutter-web-auth': window.location.href
}, window.location.origin);
window.close();
</script>
重定向URL应与应用程序运行的URL相同(包括模式、主机和端口),路径应指向创建的HTML文件,例如/auth.html
。callbackUrlScheme
参数在authenticate()
方法中不考虑,因此可以使用原生平台的方案。
测试WithingsFlutter
安装完成后,我们可以开始测试WithingsFlutter。在这个示例中,我们将使用WithingsFlutter对我们的应用进行授权,并获取一段时间内的ECG记录和Afib分类列表。
注册你的应用
要使用Withings API执行任何操作,首先需要在Withings开发者门户中注册你的应用并获取两个ID,即Client ID
和(Client) Secret
。以下是步骤:
-
在https://developer.withings.com/dashboard/welcome上选择你的应用将运行的环境。
-
创建或登录你的Withings帐户。
-
在https://developer.withings.com/dashboard/create上注册新应用,点击按钮
+ 创建应用
。 -
选择集成平面并接受条款和条件。
-
填写表单:
- 设置
应用名称
- 设置简短的
应用描述
(例如,“只是一个简单的测试应用。”) - 设置
注册URL
为回调URL
(例如,example://withings/auth
) - 上传项目徽标(可选)
- 点击
完成
按钮 - 在随后的页面中复制并保存
Client ID
和(Client) Secret
。 - 点击
确认
按钮,你会看到应用的相关信息摘要,包括:Client ID
(Client) Secret
Callback URL
API Endpoint
- 设置
应用授权
现在你已经准备好授权你的应用了。只需调用异步方法WithingsConnector.authorize()
,在代码中如:
WithingsCredentials? withingsCredentials = await WithingsConnector.authorize(
clientID: Strings.withingsClientID,
clientSecret: Strings.withingsClientSecret,
scope: 'user.activity,user.metrics,user.sleepevents',
redirectUri: Strings.withingsRedirectUri,
callbackUrlScheme: Strings.withingsCallbackScheme);
其中:
clientID
: 获取的Client ID
clientSecret
: 获取的(Client) Secret
scopes
: 逗号分隔的字符串列表,表示你想要请求的权限范围redirectUri
: 获取的Callback URL
,例如'example://withings/auth'
callbackUrlScheme
: 回调URL方案,例如'example'
这将打开一个网页视图,用户可以在其中输入他们的Withings凭据并登录。登录后,网页视图将关闭,并返回一个包含用于通过withings_flutter
向Withings Web API发起请求的凭据的WithingsCredentials?
实例。具体地,withingsCredentials.userID
包含刚刚授权的用户的Withings用户ID,withingsCredentials.withingsAccessToken
包含Withings访问令牌,withingsCredentials.withingsRefreshToken
包含Withings刷新令牌,withingsCredentials.expires
定义了访问令牌的有效期延迟(秒)。
⚠️ 凭证不会自动存储在持久位置。你必须根据你的策略管理这些凭证。
获取ECG记录和Afib分类
授权应用后,你可以开始从Withings获取数据。在这个示例中,我们将获取一段时间内的ECG记录和Afib分类列表。
首先实例化一个WithingsHeartListDataManager
:
WithingsHeartListDataManager withingsHeartListDataManager =
WithingsHeartListDataManager();
然后使用WithingsHeartListDataManager
的fetch
方法获取所需数据,使用正确的WithingsHeartAPIURL
:
WithingsHeartListData listheartdata = await withingsHeartListDataManager
.fetch(WithingsHeartAPIURL.list(accessToken: withingsCredentials.accessToken));
更多关于Flutter健康数据同步插件withings_flutter的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter健康数据同步插件withings_flutter的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
当然,以下是一个关于如何使用 withings_flutter
插件来同步健康数据的示例代码。这个插件允许你与 Withings API 交互,从而获取用户的健康数据。
首先,确保你已经在 pubspec.yaml
文件中添加了 withings_flutter
依赖:
dependencies:
flutter:
sdk: flutter
withings_flutter: ^最新版本号 # 请替换为最新的版本号
然后,运行 flutter pub get
来获取依赖。
接下来,你需要配置 Withings API 的客户端凭证。这通常包括一个消费者密钥(Consumer Key)和消费者秘密(Consumer Secret)。你需要从 Withings 开发者门户注册并获取这些凭证。
以下是一个示例代码,展示如何使用 withings_flutter
插件来同步健康数据:
import 'package:flutter/material.dart';
import 'package:withings_flutter/withings_flutter.dart';
void main() {
runApp(MyApp());
}
class MyApp extends StatefulWidget {
@override
_MyAppState createState() => _MyAppState();
}
class _MyAppState extends State<MyApp> {
WithingsClient? _withingsClient;
String? _accessToken;
String? _userId;
String? _measureData;
@override
void initState() {
super.initState();
// 初始化 WithingsClient
_initWithingsClient();
}
void _initWithingsClient() {
final consumerKey = '你的消费者密钥';
final consumerSecret = '你的消费者秘密';
_withingsClient = WithingsClient(consumerKey, consumerSecret);
// 在这里你可以实现 OAuth2 授权流程来获取 accessToken 和 userId
// 这里假设你已经有了 accessToken 和 userId
_accessToken = '你的访问令牌';
_userId = '用户ID';
// 使用 accessToken 和 userId 获取健康数据
_fetchMeasureData();
}
void _fetchMeasureData() async {
if (_withingsClient != null && _accessToken != null && _userId != null) {
try {
final measures = await _withingsClient!.getMeasures(
accessToken: _accessToken!,
userId: _userId!,
measureTypes: ['weight', 'height'], // 你可以根据需要添加其他测量类型
startDate: DateTime.now().subtract(Duration(days: 365)), // 过去一年的数据
endDate: DateTime.now(),
);
setState(() {
_measureData = measures.toJson().toString();
});
} catch (e) {
print('Error fetching measures: $e');
}
}
}
@override
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
appBar: AppBar(
title: Text('Withings Flutter Example'),
),
body: Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: [
if (_measureData != null)
Text(
'Measure Data:\n$_measureData',
style: TextStyle(fontSize: 16),
),
ElevatedButton(
onPressed: () {
// 这里可以放置重新获取数据的按钮逻辑,如果需要的话
},
child: Text('Refresh Data'),
),
],
),
),
),
);
}
}
注意:
-
在实际使用中,你需要实现完整的 OAuth2 授权流程来获取
accessToken
和userId
。这通常涉及重定向用户到 Withings 的授权页面,并处理返回的授权码以获取访问令牌。 -
上面的代码假设你已经有了
accessToken
和userId
,并且直接调用getMeasures
方法来获取健康数据。 -
你需要根据你的需求调整
measureTypes
、startDate
和endDate
参数。 -
请确保你遵守 Withings API 的使用条款和限制。
-
在生产环境中,不要硬编码
consumerKey
和consumerSecret
。考虑使用环境变量或安全的密钥管理服务来存储这些敏感信息。