Android + Google Fit 数据上传:错误 5002 - 数据类型的名称与包名称不匹配

2024-01-25

在应用程序中,我们将用户活动数据上传到 Google Fit,如下所示:

   Fitness.getSessionsClient(context, GoogleSignIn.getLastSignedInAccount(context))
                            .insertSession(((SessionInsertRequest) object))
                            .addOnSuccessListener(new OnSuccessListener<Void>() {
                                @Override
                                public void onSuccess(Void aVoid) {
                                    // At this point, the session has been inserted and can be read.
                                    if (BuildConfig.DEBUG) {
                                        Log.i(TAG, "Session insert was successful!");
                                    }
                                     //more success handling
                                }
                            })
                            .addOnFailureListener(new OnFailureListener() {
                                @Override
                                public void onFailure(@NonNull Exception e) {

                                    if (BuildConfig.DEBUG) {
                                        Log.w(TAG, "There was a problem inserting the session: " + e.toString()+ "\n"+ e.getLocalizedMessage());
                                    }
                                    //more error handling
                                    }
                                }
                            });

直到 2019 年 9 月 4 日左右,此功能都运行良好。

然后 Google 似乎更改了某些内容,导致在创建 SessionInsertRequest 时出现以下警告

应用程序 com.foo.bar 无权访问请求中的数据类型

在 onFailureListener(...) 中,我们收到以下消息:

插入会话时出现问题:com.google.android.gms.common.api.ApiException:5002:数据类型的名称与包名称不匹配。

数据类型未更改。当用户被要求授予上传权限时会请求它们:

   private FitnessOptions getFitnessSignInOptions(OAuthType type) {

    switch (type) {

        case Activity:
            return FitnessOptions.builder()
                    .addDataType(DataType.TYPE_LOCATION_SAMPLE, FitnessOptions.ACCESS_WRITE)
                    .addDataType(DataType.TYPE_CALORIES_EXPENDED, FitnessOptions.ACCESS_WRITE)
                    .build();
    }
}

并在数据源中创建,例如:

 DataSource  locationDataSource = new DataSource.Builder()
            .setAppPackageName(packageName)
            .setDataType(DataType.TYPE_LOCATION_SAMPLE)
            .setName(uniqueIdentifier + "-locations")
            .setType(DataSource.TYPE_RAW)
            .build();

类似于谷歌样本 https://github.com/googlesamples/android-fit/blob/master/BasicHistorySessions/app/src/main/java/com/google/android/gms/fit/samples/basichistorysessions/MainActivity.java#L271 shows.

如果我们省略设置数据源的名称或使用 setName(packageName) 并不重要。同样使用 setStreamName(packageName) 也不能解决问题。 还有其他人遇到这个或类似的问题吗?

谢谢

Robert


我想知道该问题是否与 GoogleSignIn.getLastSignedInAccount 的使用有关。显然在新版本的库中这不受欢迎。使用 GoogleSignIn.getAccountForExtension 应该可以解决问题。它对我的问题有用有地点 https://stackoverflow.com/questions/57833033/android-google-fit-not-finding-data-sources-for-datatype-type-location-sample

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Android + Google Fit 数据上传:错误 5002 - 数据类型的名称与包名称不匹配 的相关文章

随机推荐