TerraiOS
此框架允许开发人员通过 Terra 连接到 Apple Health 和 FreeStyleLibre1。它还包含连接到 Terra REST API 所需的所有类和函数。
规格说明(如果出现问题则读取此部分)
此库仅支持 iOS 13+,并使用 Swift 5.0 实现
设置(有用的东西)
如所述,此框架允许通过 Terra 连接到 Apple Health 和 FreeStyleLibre1。要充分利用此软件包,您需要一个注册了 Apple 开发者计划 的开发者账号。
必须将框架添加到您的项目中作为依赖项。这可以通过编辑项目依赖项并添加 TerraiOS
作为依赖项并指定以下位置完成: https://github.com/tryterra/TerraiOS.git
。您还需要将 TerraiOS
添加到 Frameworks 中!
这样,您就可以导入框架为 import TerraiOS
。
连接到APPLE HEALTH
此库使用iOS 13+的HealthKit。因此,它不会在iPad或MacOS或任何不支持Apple HealthKit的平台上工作。请在项目中以及框架中添加HealthKit作为功能。
此外,您必须在您的Info.plist
文件中包含以下键:Privacy - Health Share Usage Description
和Privacy - Health Records Usage Description
连接到FREESTYLELIBRE
此库将使用“近场通信标签读取”功能。将其添加到功能中,并将Privacy-NFC Scan Usage Description
作为键添加到项目中的Info.plist
。
是时候找点乐趣了 ;)
要使用此框架,您需要了解一个名为Terra
的类。它将管理您所有的连接和数据获取功能。
您可以这样创建一个
let terra: Terra = try! Terra(dev_id: <YOUR DEV ID>,
x_api_key: <YOUR X API KEY>,
reference_id: <YOUR USER REFERENCE ID>,
bodySleepDailyInterval: 60,
connections: Set([Connections.APPLE_HEALTH, Connections.FREESTYLE_LIBRE]),
permissions: Set([Permissions.DAILY, Permissions.SLEEP, Permissions.ATHLETE])){success in
// success : Boolean -> to detect when the initialisation is done.
// Can leave this callback empty if not needed, but this allows for you to know when the initialisation is complete.
}
请注意,此初始化可能会失败,并抛出以下错误:TerraError.HealthKitUnavailable, TerraError.UnexpectedError。捕获它们并适当处理,而不是强制尝试!
- dev_id:这是Terra提供的dev_id
- x_api_key:这是与Terra提供的dev_id相关联的x_api_key
- reference_id:这是您用来从您的服务器标识用户到Terra用户的地方
- bodySleepDailyInterval:身体、睡眠、每日数据的调度间隔(以秒为单位)。
- connections:您希望通过Terra连接的一组
Connections
- permissions:您希望请求权限(从Health Kit)的一组
Permissions
检查身份验证
您现在可以检查用户是否已通过其设备对特定的连接
进行身份验证。
terra.checkAuthentication(connection: Connections)
这将返回一个布尔值
,表示设备是否已注册。
连接
是一个枚举,目前采用:.APPLE_HEALTH
和.FREESTYLE_LIBRE
获取数据
理想情况下,数据将由调度器通过您的webhook发送(只能在应用程序打开时运行)。
但是,您也可以手动获取数据。
身体数据
terra.getBody(type: Connections, startDate: Date, endDate: Date)
活动数据
terra.getActivity(type: Connections, startDate: Date, endDate: Date)
每日数据
terra.getBody(type: Connections, startDate: Date, endDate: Date)
睡眠数据
terra.getSleep(type: Connections, startDate: Date, endDate: Date)
营养数据
terra.getNutrition(type: Connections, startDate: Date, endDate: Date)
运动员数据
terra.getAthlete(type: Connections)
这些接受日期
作为参数的函数,也接受时间间隔
(从1970年1月1日开始的时间戳)
数据将始终发送到您的webhook。但是,如果您需要立即获取数据,您可以从以下回调函数中获取
terra.getActivity(type: Connections, startDate: Date, endDate: Date){success, data in
//success -> A boolean to signify the function completed successfully
// data -> A data array corresponding to our data models
}
FreeStyleLibre规格
您需要开始一个扫描会话来读取FreeStyleLibre1传感器的数据!这可以通过以下方式完成
try! terra.readGlucoseData()
注意!当尝试读取已过期的传感器时,此函数可能会抛出TerraError.SensorExpired
错误。
注销用户
要注销用户,您只需运行以下操作
terra.disconnectTerra(Connections)
在本 SDK 中连接到 Terra 的 Rest API
您也可以使用此 SDK 发送 Terra API 请求。
您只需按照以下方式实例化一个 TerraClient
类
let terra: TerraClient = TerraClient(user_id: <TERRA USER ID>, dev_id: <YOUR DEV ID>, xAPIKey: <YOUR X API KEY>)
使用此客户端,您可以向诸如 /activity
、/body
等端点发送请求。(更多信息 在这里)。
要这样做,您只需调用
terra.getDaily(startDate: Date, endDate: Date , toWebhook: true)!
toWebhook
默认设置为 true。
类似地,您可以使用 getActivity()
、getBody()
和 getSleep()
分别获取 Activity、Body 和 Sleep。它们都使用相同的参数。
您还可以通过 getAthlete(toWebhook: true)
获取运动员数据,其中不需要日期参数。
这些方法返回与我们的数据模型和 HTTP 响应对应的负载。例如
let activityData = terra.getActivity(startDate: startDate, endDate: endDate, toWebhook: false)!
这些接受日期
作为参数的函数,也接受时间间隔
(从1970年1月1日开始的时间戳)
在这种情况下,您可以通过访问 activityData.user
获取用户数据,通过:activityData.user.user_id
获取用户 ID,并通过 activityData.data
获取数据数组。这与我们的 有效负载模型 返回的结构相似
{
"status": "success",
"type": "activity",
"user": {
"user_id": "b3a63gegd-ege1-42bf-a8ff-f6f1fege6e2a26",
"provider": "GOOGLE",
"last_webhook_update": "2022-01-12T08:00:00.036208+00:00"
},
"data": [...]
}
不带小部件验证和注销用户
此包还包含 /authenticateUser
和 /deauthenticateUser
端点。
您可以使用 TerraAuthClient
类来调用它
let terraAuthClient: TerraAuthClient = TerraAuthClient(dev_id: DEVID, xAPIKey: XAPIKEY)
然后,您可以运行以下命令来生成一个身份验证 URL(以下使用 FITBIT 作为示例)
terraAuthClient.authenticateUser(resource: "FITBIT")
然后,您可以通过以下方式注销用户
terraAuthClient.deauthenticateUser(user_id: "USER_ID")