9

我已经设置了连接到 Google Fit 的应用程序,读取和写入有关用户身体的一些数据。当用户在应用设置中禁用 Google Fit 时,我尝试通过调用以下方式撤销我的应用权限:

public void disableGoogleFit(){
    if(!mClient.isConnected()){
        Log.e(TAG, "Google Fit wasn't connected");
        return;
    }
    PendingResult<Status> pendingResult = Fitness.ConfigApi.disableFit(mClient);

    pendingResult.setResultCallback(new ResultCallback<Status>() {
        @Override
        public void onResult(Status status) {
            if(status.isSuccess()) {
                Log.i(TAG, "Google Fit disabled");
            }else{
                Log.e(TAG, "Google Fit wasn't disabled " + status);
            }
        }
    });
}

即使我可以成功读取/写入数据,禁用 Fit 也会返回错误:

Google Fit wasn't disabled Status
{statusCode=unknown status code: 5010, resolution=null}

Edit1:添加了整个方法,其中可见,该客户端在我尝试禁用 Fit 时已连接。

4

6 回答 6

6

目前使用 15.0.1 lib 可以轻松完成:

fun disconnect(context: Context) {
    val fitnessOptions = FitnessOptions.builder()
            .addDataType(DataType.TYPE_WORKOUT_EXERCISE, FitnessOptions.ACCESS_READ)
            .build()
    val signInOptions = GoogleSignInOptions.Builder().addExtension(fitnessOptions).build()
    val client = GoogleSignIn.getClient(context, signInOptions)
    client.revokeAccess()
}
于 2018-05-11T13:15:54.297 回答
4

如果我在操作的 Google Fit 端撤销访问权限而不是调用 disableFit() 方法,我会遇到这个问题。使用 disableFit() 方法时,一切都很好地断开连接,重新连接是轻而易举的事。但是当 Google Fit 撤销访问权限时,它并没有消除现有的 OAuth,因此您陷入了困境。Limbo 是您已断开连接但未发出 OAuth 质询,因此您不断收到 5010 错误。

我想出的唯一解决方案是通过连接到另一个帐户来挑战 OAuth。那你就好了。然而,这听起来像是 Google Fit 的一个问题,而在客户端则没有。

于 2015-02-17T00:28:49.127 回答
2

我也面临类似的问题。

如果应用程序未在 Google 开发者控制台中正确注册,则会出现此问题。

我认为您已经使用生产密钥库证书指纹(SHA1)在 Google 开发人员控制台上注册了应用程序,当您在具有调试密钥库的应用程序上对其进行测试时。

执行以下步骤:

  1. 使用调试密钥库证书指纹 (SHA1) 再创建一个客户端 ID。
  2. 卸载现有应用程序。
  3. 安装应用并连接到 Google fit。
  4. 检查 google fit app 并确保您的应用被列为已连接的应用(... > 设置 > 已连接的应用 > 已连接的应用和设备)。
  5. 现在运行上面的代码,它会工作!!!
于 2015-02-08T07:19:15.077 回答
1

用这个

Fitness.getConfigClient(this, GoogleSignIn.getLastSignedInAccount(this)).disableFit()

在这里检查

于 2020-02-26T06:37:51.173 回答
0

根据 Android 开发者论坛

https://developer.android.com/reference/com/google/android/gms/fitness/ConfigApi.html

公共静态最终 int APP_NOT_FIT_ENABLED

状态码表示在 Google Fit 的已连接应用程序列表中未找到应用程序。表示对该应用的访问权限已被撤销,或者该应用未在开发者控制台上注册。

常数值:5010 (0x00001392)

并且要调用 a disableFit客户端必须在调用时连接

public abstract PendingResult<Status> disableFit (GoogleApiClient client)

为应用禁用 Google Fit。可用于从应用撤消所有授予的 OAuth 访问权限,从而删除应用的所有现有订阅和注册。

参数

客户端 现有的 GoogleApiClient。必须在此呼叫时连接

于 2014-11-25T15:45:57.957 回答
0

禁用通话后

mClient.disconnect();

哪个对我有用

于 2015-10-27T08:19:28.383 回答