1

我正在使用 API 进行简单的谷歌登录和注销。但是当我使用下面的代码注销时,有时 googleapiclient 不会断开连接。因此,当我要登录时,它会自动登录到我以前的帐户,而不是要求选择帐户。

注销代码:

public void googlePlusLogout() {
        if (mGoogleApiClient.isConnected()) {
            Plus.AccountApi.clearDefaultAccount(mGoogleApiClient);
            mGoogleApiClient.disconnect();
            Log.e("APPLICATION", "DISCONNECTED");

        }

当我调用上述方法进行注销时,有时mGoogleApiClient.disconnect()不会调用。帮我解决这个问题。

4

2 回答 2

0

有一个新的 API 试试这个:

    @Override
public void logOut() {
    if (googleApiClient.isConnected()) {
        signOut();
        revokeAccess();
        googleApiClient.disconnect();
    }
}

private void signOut() {
    Auth.GoogleSignInApi.signOut(googleApiClient).setResultCallback(
            new ResultCallback<Status>() {
                @Override
                public void onResult(Status status) {
                    App.logger().d(TAG, "signOut: status = " + status);
                }
            });
}

private void revokeAccess() {
    Auth.GoogleSignInApi.revokeAccess(googleApiClient).setResultCallback(
            new ResultCallback<Status>() {
                @Override
                public void onResult(Status status) {
                    App.logger().d(TAG, "revokeAccess: status = " + status);
                }
            });
}
于 2016-02-28T08:47:24.870 回答
0

在多次内存泄漏之后,这就是我想出的。没有更多的内存泄漏。它很冗长吗?是的。是不是太冗长了?也许。它有效吗?是的。

 if (mGoogleApiClient !=null) if (mGoogleApiClient.isConnected()) LocationServices.FusedLocationApi.removeLocationUpdates(this);
 if (mGoogleApiClient !=null) mGoogleApiClient.unregisterConnectionCallbacks(this);
 if (mGoogleApiClient !=null) mGoogleApiClient.unregisterConnectionFailedListener(this);
 if (mGoogleApiClient !=null) if (mGoogleApiClient.isConnected()) mGoogleApiClient.disconnect();
 mGoogleApiClient =null;
于 2017-02-20T00:10:03.363 回答