如何从 google plus 帐户中注销 google plus 在 android 中的集成

Posted

技术标签:

【中文标题】如何从 google plus 帐户中注销 google plus 在 android 中的集成【英文标题】:How to logout from google plus account in google plus integration in android 【发布时间】:2014-12-13 18:29:37 【问题描述】:

我做了以下工作,但注销后它无法正常工作,再次快速登录应用程序

private void signOutFromGplus() 

    if (mGoogleApiClient.isConnected()) 

        // clearCookies();

        Plus.AccountApi
                .clearDefaultAccount(mGoogleApiClient);

        .mGoogleApiClient.disconnect();

        .mGoogleApiClient.connect();
    

【问题讨论】:

不工作意味着注销选项不工作或登录不工作?检查developers.google.com/+/mobile/android/… 是signout一次又一次自动登录,登录没有问题 【参考方案1】:

Sign-outRevoke 之间存在差异。您似乎想断开用户与应用程序的连接,因此下次再次提示用户登录。如果是这种情况,请尝试以下方法(更多详情请参阅Google+ Sign-in for Android):

// Prior to disconnecting, run clearDefaultAccount().
Plus.AccountApi.clearDefaultAccount(mGoogleApiClient);
Plus.AccountApi.revokeAccessAndDisconnect(mGoogleApiClient)
    .setResultCallback(new ResultCallback<Status>() 

  onResult(Status status) 
    // mGoogleApiClient is now disconnected and access has been revoked.
    // Trigger app logic to comply with the developer policies
  

);

【讨论】:

【参考方案2】:

虽然 Google 的说明说要在断开连接后立即调用 connect(),但我在这样做时遇到了与您相同的问题 - 用户在没有任何交互的情况下再次登录。

最后,我只是忽略了这些说明,并从我的代码中删除了对 connect() 的调用。对我有用。

【讨论】:

【参考方案3】:

这可能是一个老问题,但我想在这里澄清一下,很可能是第一次登录 Google 的新生。调用以下方法后,他们可能会遇到自动登录 Google 帐户的问题。

private void signOutFromGplus() 

    if (mGoogleApiClient.isConnected()) 

        // clearCookies();

        Plus.AccountApi
                .clearDefaultAccount(mGoogleApiClient);

        .mGoogleApiClient.disconnect();

        .mGoogleApiClient.connect();
    

解决方案:确保您的 mGoogleApiClient 没有在某处断开连接。那么为什么它没有进入这个if循环的原因呢。

很可能在onStop()onDestroy()

【讨论】:

【参考方案4】:
private void googlePlusLogout() 

        if (mGoogleApiClient.isConnected())     
            Plus.AccountApi.clearDefaultAccount(mGoogleApiClient);    
            mGoogleApiClient.disconnect();    
            mGoogleApiClient.connect();    
            
    

尝试在按钮单击时调用此方法。

【讨论】:

【参考方案5】:

在这个类中为你分配变量(使用这个类的好处是这个类在应用程序启动时启动,你可以在 app 的任何地方访问它)为: MyApplication.class

import android.app.Application;
import android.support.v7.app.AppCompatActivity;
import com.google.android.gms.auth.api.Auth;
import com.google.android.gms.auth.api.signin.GoogleSignInOptions;
import com.google.android.gms.common.api.GoogleApiClient;
public class MyApplication extends Application 
private GoogleApiClient mGoogleApiClient;
private GoogleSignInOptions gso;
public AppCompatActivity activity;
public GoogleSignInOptions getGoogleSignInOptions()
    gso = new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN)
            .requestEmail()
            .build();
    return gso;

public GoogleApiClient getGoogleApiClient(AppCompatActivity activity, GoogleApiClient.OnConnectionFailedListener listener)
    this.activity = activity;
    mGoogleApiClient = new GoogleApiClient.Builder(this)
            .enableAutoManage(this.activity, listener)
            .addApi(Auth.GOOGLE_SIGN_IN_API, getGoogleSignInOptions())
            .build();
    return mGoogleApiClient;


在登录活动中

    @Override
protected void onStart() 
    mGoogleApiClient.connect();
    super.onStart();
    OptionalPendingResult<GoogleSignInResult> opr = Auth.GoogleSignInApi.silentSignIn(mGoogleApiClient);
    if (opr.isDone()) 
        Log.d("TAG", "Got cached sign-in");
        GoogleSignInResult result = opr.get();
        handleSignInResult(result);
     else 
        opr.setResultCallback(new ResultCallback<GoogleSignInResult>() 
            @Override
            public void onResult(GoogleSignInResult googleSignInResult) 
                //hideProgressDialog();
                handleSignInResult(googleSignInResult);
            
        );
    

@Override
protected void onCreate(@Nullable Bundle savedInstanceState) 
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_login);

    gso = ((MyApplication) getApplication()).getGoogleSignInOptions();
    mGoogleApiClient = ((MyApplication) getApplication()).getGoogleApiClient(LoginActivity.this, this);

@Override
protected void onStop() 
    mGoogleApiClient.disconnect();
    super.onStop();

在您要退出的第二个活动中

@Override
protected void onCreate(@Nullable Bundle savedInstanceState) 
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_home);

    mGoogleApiClient = ((MyApplication) getApplication()).getGoogleApiClient(HomeActivity.this, this);

btnLogout.setOnClickListener(new View.OnClickListener() 
        @Override
        public void onClick(View v) 
            Auth.GoogleSignInApi.signOut(mGoogleApiClient).setResultCallback(
                    new ResultCallback<Status>() 
                        @Override
                        public void onResult(Status status) 
                            Intent i = new Intent(HomeActivity.this, LoginActivity.class);
                            startActivity(i);
                            finish();
                        
                    );
        
    );

在您的应用级 build.gradle 文件中,将 Google Play 服务声明为依赖项:

dependencies 
classpath 'com.android.tools.build:gradle:2.0.0'
classpath 'com.google.gms:google-services:1.5.0-beta2'

让 MyApplication 类扩展默认的 Application 类。另外,打开 Manifest 文件并在 application 元素中添加这行代码。

android:name=".MyApplication"

【讨论】:

以上是关于如何从 google plus 帐户中注销 google plus 在 android 中的集成的主要内容,如果未能解决你的问题,请参考以下文章

Google 使用 g-plus 最新 API 在 android 中登录和注销

如何从不同的活动中注销G + plus sigin?

从 android 应用程序共享后从 google plus 注销

尽管明确要求,但无法从 Google Plus 帐户获取私人生日

如何通过 Google Ads API 获取已注销的帐户?

Flutter Authentication 从登录屏幕到登录屏幕使用 Google 登录和注销