我已经设置了连接到Google Fit的应用,可以读取和写入有关用户身体的一些数据。当用户在应用设置中停用Google健身时,我会尝试通过调用以下方式撤消我的应用权限:
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}
编辑1:添加了整个方法,其中可见,客户端在我尝试禁用适合时连接。
答案 0 :(得分:3)
如果我撤消了操作的Google Fit方面的访问权限而不是调用disableFit()方法,那么我遇到了这个问题。当使用disableFit()方法时,事情已经断开连接,并且重新连接是一个蛋糕步行。但是当Google Fit撤销访问时,它并没有消除现有的OAuth,因此您陷入了困境。 Limbo因为您已断开连接但未发出OAuth质询,因此您不断收到5010错误。
我提出的唯一解决方案是通过连接到另一个帐户来进行OAuth挑战。那你很好。 这听起来像是Google Fit上的一个问题,而客户端则没有任何问题。
答案 1 :(得分:2)
我也面临类似的问题。
如果应用未在Google中正确注册,则会出现此问题 开发者控制台。
我认为您已使用生产密钥库证书指纹(SHA1)在Google开发人员控制台上注册了应用,您可以在具有调试密钥库的应用上对其进行测试。
执行以下步骤:
答案 2 :(得分:2)
目前使用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()
}
答案 3 :(得分:1)
答案 4 :(得分:0)
根据Android开发者论坛
https://developer.android.com/reference/com/google/android/gms/fitness/ConfigApi.html
public static final int APP_NOT_FIT_ENABLED
状态代码表示在已连接的列表中找不到应用程序 Google健身中的应用。表示对该应用的访问权限 已经撤销,或者应用程序未在开发人员身上注册 控制台。
常数值:5010(0x00001392)
要拨打disableFit
,客户端必须在通话时连接
public abstract PendingResult<Status> disableFit (GoogleApiClient client)
为应用禁用Google Fit。可用于撤消应用程序中所有已授予的OAuth访问权限,从而删除应用程序的所有现有订阅和注册。
<强>参数强>
客户端现有的GoogleApiClient。 必须在此时连接 这个电话。
答案 5 :(得分:0)
停用来电后
mClient.disconnect();
哪个对我有用