Android SDK写入Google Fit的数据无法在Fit应用中显示求助
Google Fit Android SDK写入数据成功但App不显示问题
我们通过Android SDK向Google Fit写入运动数据时,遇到数据无法在Google Fit应用中显示的问题:插入请求始终返回成功,且通过verifySession调用readSession能读取到写入的会话及数据,但等待约30分钟后,数据仍未在Google Fit应用中展示。
操作流程
- 从我方API获取IoT设备生成的JSON格式运动数据(示例:
{ "data": [ { "id": "aa8329a1-9841-4f94-8911-06500e11d17b", "startTime": "2022-06-11 12:11:18", "finishTime": "2022-06-11 12:43:18", "type": 2, "distance": 0.069394 } ] }),当前仅需存储distance字段。 - 完成Google登录配置:
GoogleSignInOptions .Builder(GoogleSignInOptions.DEFAULT_SIGN_IN) .requestEmail() .requestServerAuthCode(BuildConfig.WEB_CLIENT_GOOGLE_FIT) .requestIdToken(BuildConfig.WEB_CLIENT_GOOGLE_FIT) .requestScopes( Scope("https://www.googleapis.com/auth/fitness.activity.write"), Scope("https://www.googleapis.com/auth/fitness.heart_rate.write"), Scope("https://www.googleapis.com/auth/fitness.location.write"), Scope("https://www.googleapis.com/auth/fitness.activity.read"), Scope("https://www.googleapis.com/auth/fitness.location.read")) .build()
- 定义FitnessOptions及数据类型:
FitnessOptions .builder() .addDataType(DataType.AGGREGATE_DISTANCE_DELTA, FitnessOptions.ACCESS_WRITE) .addDataType(DataType.AGGREGATE_CALORIES_EXPENDED, FitnessOptions.ACCESS_WRITE) .addDataType(DataType.AGGREGATE_SPEED_SUMMARY, FitnessOptions.ACCESS_WRITE) .addDataType(DataType.TYPE_HEART_RATE_BPM, FitnessOptions.ACCESS_WRITE) .addDataType(DataType.AGGREGATE_HEART_POINTS, FitnessOptions.ACCESS_WRITE) .addDataType(DataType.TYPE_POWER_SAMPLE, FitnessOptions.ACCESS_WRITE) .build()
- 创建距离相关的DataSource:
val distanceDataSource = DataSource.Builder() .setAppPackageName("com.bodytone.zapp.dev") .setDataType(DataType.AGGREGATE_DISTANCE_DELTA) .setStreamName("session-data-distance") .setType(DataSource.TYPE_RAW) .build()
- 创建DataPoint:
val distance = DataPoint.builder(distanceDataSource) .setTimeInterval(training1.getStartDateInMillis(), training1.getFinishDateInMillis(), TimeUnit.MILLISECONDS) .setField(Field.FIELD_DISTANCE, training1.distance.toFloat()) .build()
- 构建DataSet:
val distanceDataSet = DataSet.builder(distanceDataSource) .add(distance) .build()
- 创建并执行Session插入请求:
val insertRequest = SessionInsertRequest.Builder() .setSession(session) .addDataSet(distanceDataSet) .build()
Fitness.getSessionsClient(requireActivity(), GoogleSignIn.getAccountForExtension(requireActivity(), fitnessOptions)) .insertSession(insertRequest) .addOnSuccessListener { Toast.makeText(requireActivity(), "Session insert was successful!", Toast.LENGTH_LONG).show() } .addOnCanceledListener { Toast.makeText(requireActivity(), "Session insert was cancelled!", Toast.LENGTH_LONG).show() } .addOnFailureListener { it.printStackTrace() Toast.makeText(requireActivity(), "There was a problem inserting the session: ${it.message}", Toast.LENGTH_LONG).show() } .continueWith{ verifySession(training1) }
补充说明
- Google控制台配置正常(包名、SHA1、OAuth consent窗口均无误,处于测试模式,使用测试用户)
- 测试用户的Google Fit已关联我方应用,登录权限正常
恳请提供解决方案或可运行的代码示例。
内容的提问来源于stack exchange,提问作者FABiO
相关产品推荐
相关产品推荐

