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

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

private void signOutFromGplus() {

    if (mGoogleApiClient.isConnected()) {

        // clearCookies();

        Plus.AccountApi
                .clearDefaultAccount(mGoogleApiClient);

        .mGoogleApiClient.disconnect();

        .mGoogleApiClient.connect();
    }
}

【问题讨论】:

标签: android google-plus logout


【解决方案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"
          

          【讨论】:

            猜你喜欢
            • 2014-08-22
            • 2023-03-23
            • 2014-02-26
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2013-07-07
            • 1970-01-01
            • 2013-08-28
            相关资源
            最近更新 更多