我们有一个连接到Google的应用程序,我们获得用户会话,比如睡眠活动(活动= 72)。在两年多的时间里,我们每天都在运行这个应用程序,拥有大约15.000名用户,能够无缝地工作。
我们最近在我们的应用程序中发现了一个用户,他有一个华为手表2 Pro,连接到Google。这个用户在他的手机上有睡眠会话,但是在Google (会话端点)中没有这些会话。
我们已经将相同的Googlefit帐户连接到第二个移动电话上,这样我们就可以验证会话是否在云中,而第二个移动电话已经能够加载所有睡眠会话;因此我们相信这些会话在云中,但我们不能将它们看作睡眠会话(通过会话端点)。
为了进一步分析,我们还从Google应用程序中插入了一个手动睡眠度量,它确实出现在Google中。因此,我们认为华为的应用程序如何在Google中节省睡眠时间是有帮助的。
因此,我们试图看看华为在哪里保存数据,如果它不是在睡眠会话。我们查看了dataSources、dataSources和dataset聚合:
https://www.googleapis.com/fitness/v1/users/userId/dataset:aggregate
对于请求体,以及我们知道的用户有一个睡眠会话的日期范围:
{
"aggregateBy": [{
"dataSourceId": "raw:com.google.activity.segment:com.huawei.health:",
"dataTypeName": "com.google.activity.segment"
}],
"bucketByTime": { "durationMillis": 86400000 },
"startTimeMillis": 1603753199000, //GMT: Monday, 26 October 2020 22:59:59
"endTimeMillis": 1603782000000 //GMT: Tuesday, 27 October 2020 7:00:00
}我们获得了一系列的点,可以是睡眠会话,例如:响应:
{
"bucket": [
{
"startTimeMillis": "1603753199000",
"endTimeMillis": "1603782000000",
"dataset": [
{
"dataSourceId": "derived:com.google.activity.summary:com.google.android.gms:aggregated",
"point": [
{
"startTimeNanos": "1603753380000000000", //GMT: Monday, 26 October 2020 23:03:00
"endTimeNanos": "1603780140000000000", //GMT: Tuesday, 27 October 2020 6:29:00
"dataTypeName": "com.google.activity.summary",
"originDataSourceId": "raw:com.google.activity.segment:com.huawei.health:",
"value": [
{
"intVal": 109,
"mapVal": []
},
{
"intVal": 20160000,
"mapVal": []
},
{
"intVal": 336,
"mapVal": []
}
]
},
{
"startTimeNanos": "1603755240000000000", //GMT: Monday, 26 October 2020 23:34:00
"endTimeNanos": "1603779600000000000", //GMT: Tuesday, 27 October 2020 6:20:00
"dataTypeName": "com.google.activity.summary",
"originDataSourceId": "raw:com.google.activity.segment:com.huawei.health:",
"value": [
{
"intVal": 110,
"mapVal": []
},
{
"intVal": 6600000,
"mapVal": []
},
{
"intVal": 110,
"mapVal": []
}
]
},
{
"startTimeNanos": "1603781520000000000", //GMT: Tuesday, 27 October 2020 6:52:00
"endTimeNanos": "1603781880000000000", GMT: Tuesday, 27 October 2020 6:58:00
"dataTypeName": "com.google.activity.summary",
"originDataSourceId": "raw:com.google.activity.segment:com.huawei.health:",
"value": [
{
"intVal": 7,
"mapVal": []
},
{
"intVal": 240000,
"mapVal": []
},
{
"intVal": 4,
"mapVal": []
}
]
}
]
}
]
}
]
}我们认为这些要点可能是睡眠期,因为:
com.huawei.health"
小时是在晚上,在示例中,从第二天晚上23:03到早上6:20,这正是Google应用程序中用户的睡眠量。
26760000/1000*3600 = 7.43 = 7h26m,这正是用户在Google应用程序中为10月27日所做的测量。
然后:
睡眠会话是否在dataSource中而不是在睡眠会话中被收集?在Google应用程序中,我们能区分一下,这不是一个会话,而是一个数据集?为什么它不会在睡眠过程中被收集呢?这是华为的应用程序吗?我们如何才能真正知道这些数据集是睡眠会话?
发布于 2020-12-15 22:06:19
我使用Python通过从Oppo收集睡眠数据。
我不使用会话访问数据,我只使用数据集。
source = "derived:com.google.sleep.segment:com.google.android.gms:sleep_from_activity<-raw:com.google.activity.segment:com.heytap.wearable.health:stream_sleep"
startEnd = "%s-%s" % (START, END)
dataset = fitService().users().dataSources().datasets().get(userId='me', dataSourceId=source, datasetId=startEnd ).execute()然后,响应看起来如下(片段):
"minStartTimeNs": "1607990400000000000",
"maxEndTimeNs": "1608063421000000000",
"dataSourceId": "derived:com.google.sleep.segment:com.google.android.gms:sleep_from_activity<-raw:com.google.activity.segment:com.heytap.wearable.health:stream_sleep",
"point": [
{
"startTimeNanos": "1607992860000000000",
"endTimeNanos": "1607994180000000000",
"dataTypeName": "com.google.sleep.segment",
"originDataSourceId": "raw:com.google.activity.segment:com.heytap.wearable.health:stream_sleep",
"value": [
{
"intVal": 4,
"mapVal": []
}
],
"modifiedTimeMillis": "1607996640613"
},
{
"startTimeNanos": "1607994180000000000",
"endTimeNanos": "1607994360000000000",
"dataTypeName": "com.google.sleep.segment",
"originDataSourceId": "raw:com.google.activity.segment:com.heytap.wearable.health:stream_sleep",
"value": [
{
"intVal": 5,
"mapVal": []
}
],
"modifiedTimeMillis": "1607996640613"
},这些点包括“轻度睡眠”(intVal 4)和“深度睡眠”(intVal) 5。我计算了每一段的光和深度段的数量和开始/结束时间。
使用此方法检索的所有段完全匹配Google应用程序和Oppo应用程序(HeyTap Health)中显示的内容。到目前为止,我没有任何问题。
我不知道这是否有帮助,但我认为最好是说我根本不使用“会议”。
https://stackoverflow.com/questions/64820336
复制相似问题