Salir de Google+ de una actividad diferente

Comencé a usar la Google+ API para android y he creado una aplicación de inicio de sesión después de este tutorial:

Https://developers.google.com/+/mobile/android/sign-in

Ahora, el problema es que quiero crear el botón de salida de una Activity diferente, y lo que intenté hacer no funcionó realmente.

Mi código de GPlusLogin (Actividad para el inicio de sesión de Google+):

 import android.app.Activity; import android.app.ProgressDialog; import android.content.Intent; import android.content.IntentSender.SendIntentException; import android.os.Bundle; import android.util.Log; import android.view.View; import android.view.View.OnClickListener; import com.google.android.gms.common.*; import com.google.android.gms.common.GooglePlayServicesClient.ConnectionCallbacks; import com.google.android.gms.common.GooglePlayServicesClient.OnConnectionFailedListener; import com.google.android.gms.plus.PlusClient; public class GPlusLogin extends Activity implements ConnectionCallbacks, OnConnectionFailedListener{ private static final int REQUEST_CODE_RESOLVE_ERR = 9000; private static final String TAG = "GPlusLogin"; private ProgressDialog mConnectionProgressDialog; private PlusClient mPlusClient; private ConnectionResult mConnectionResult; @Override protected void onCreate(Bundle savedInstanceState) { // TODO Auto-generated method stub super.onCreate(savedInstanceState); setContentView(R.layout.gplus_layout); mPlusClient = new PlusClient.Builder(this, this, this).setVisibleActivities("http://schemas.google.com/AddActivity", "http://schemas.google.com/BuyActivity").build(); Bundle extras = getIntent().getExtras(); mConnectionProgressDialog = new ProgressDialog(this); mConnectionProgressDialog.setMessage("Signing in..."); if(extras!=null){ if(extras.getString("signout")!=null){ if (mPlusClient.isConnected()) { mPlusClient.clearDefaultAccount(); mPlusClient.disconnect(); mPlusClient.connect(); finish(); startActivity(getIntent()); } } }else{ findViewById(R.id.sign_in_button).setOnClickListener(new OnClickListener() { public void onClick(View view) { // TODO Auto-generated method stub if (view.getId() == R.id.sign_in_button && !mPlusClient.isConnected()) { if (mConnectionResult == null) { mConnectionProgressDialog.show(); } else { try { mConnectionResult.startResolutionForResult(GPlusLogin.this, REQUEST_CODE_RESOLVE_ERR); } catch (SendIntentException e) { // Try connecting again. mConnectionResult = null; mPlusClient.connect(); } } } } }); } } @Override protected void onStart() { // TODO Auto-generated method stub super.onStart(); mPlusClient.connect(); } @Override protected void onStop() { // TODO Auto-generated method stub super.onStop(); mPlusClient.disconnect(); } @Override public void onConnectionFailed(ConnectionResult result) { // TODO Auto-generated method stub if (mConnectionProgressDialog.isShowing()) { // The user clicked the sign-in button already. Start to resolve // connection errors. Wait until onConnected() to dismiss the // connection dialog. if (result.hasResolution()) { try { result.startResolutionForResult(this, REQUEST_CODE_RESOLVE_ERR); } catch (SendIntentException e) { mPlusClient.connect(); } } } mConnectionResult = result; } @Override protected void onActivityResult(int requestCode, int responseCode, Intent intent) { if (requestCode == REQUEST_CODE_RESOLVE_ERR && responseCode == RESULT_OK) { mConnectionResult = null; mPlusClient.connect(); } } @Override public void onConnected() { // TODO Auto-generated method stub mConnectionProgressDialog.dismiss(); Intent main = new Intent(GPlusLogin.this, MainActivity.class); main.putExtra("result", true); startActivity(main); } @Override public void onDisconnected() { // TODO Auto-generated method stub Log.d(TAG, "disconnected"); } } 

Mi código de desconexión en MainActivity :

 import android.os.Bundle; import android.app.Activity; import android.content.Intent; import android.view.Menu; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; import android.widget.TextView; public class MainActivity extends Activity{ @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); Bundle extras = getIntent().getExtras(); if(extras==null){ Intent intent = new Intent(this, GPlusLogin.class); startActivity(intent); } TextView text1 = (TextView) findViewById(R.id.text1); text1.setText("You Are Connected :D"); Button SignOut = (Button) findViewById(R.id.sign_out_gplus); SignOut.setOnClickListener(new OnClickListener() { @Override public void onClick(View view) { // TODO Auto-generated method stub Intent intent = new Intent(MainActivity.this, GPlusLogin.class); intent.putExtra("signout", true); startActivity(intent); } }); } @Override public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu; this adds items to the action bar if it is present. getMenuInflater().inflate(R.menu.main, menu); return true; } } 

Hey he resuelto este problema por mí mismo, trabajando como encanto

¿Cuál es el problema: Google signIn más en una actividad, pero necesita salir de otra actividad

Solución:

Mi actividad de cierre de sesión de Google-plus es la siguiente:

 public class MainActivity extends Activity implements OnClickListener, ConnectionCallbacks, OnConnectionFailedListener, ResultCallback<People.LoadPeopleResult> { GoogleApiClient mGoogleApiClient; boolean mSignInClicked; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); mGoogleApiClient = new GoogleApiClient.Builder(this) .addConnectionCallbacks(this) .addOnConnectionFailedListener(this).addApi(Plus.API) .addScope(Plus.SCOPE_PLUS_LOGIN).build(); //copy this code on "Logout" Onclick logout.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { // TODO Auto-generated method stub if (mGoogleApiClient.isConnected()) { Plus.AccountApi.clearDefaultAccount(mGoogleApiClient); mGoogleApiClient.disconnect(); mGoogleApiClient.connect(); // updateUI(false); System.err.println("LOG OUT ^^^^^^^^^^^^^^^^^^^^ SUCESS"); } } }); } @Override public void onConnected(Bundle arg0) { // TODO Auto-generated method stub mSignInClicked = false; // updateUI(true); Plus.PeopleApi.loadVisible(mGoogleApiClient, null).setResultCallback( this); } @Override public void onConnectionSuspended(int arg0) { // TODO Auto-generated method stub mGoogleApiClient.connect(); // updateUI(false); } @Override public void onConnectionFailed(ConnectionResult arg0) { // TODO Auto-generated method stub } protected void onStart() { super.onStart(); mGoogleApiClient.connect(); } protected void onStop() { super.onStop(); if (mGoogleApiClient.isConnected()) { mGoogleApiClient.disconnect(); } } @Override public void onResult(LoadPeopleResult arg0) { // TODO Auto-generated method stub } 

Descripción sobre solution:

Para el paquete único google plus API generará un token & session.Just aquí simplemente hacer una sesión más en la página de logout también. Usted puede fácilmente salir de la sesión ahora

He intentado mucho sobre este problema, para cerrar sesión de la sesión actual, sólo intente esto. Definitivamente funcionará. Cualquier duda que me haga saber

Sólo tienes que añadir esto en tu nueva actividad, donde quieres que tu botón de cierre de sesión para google + esté allí:

 @Override protected void onStart() { GoogleSignInOptions gso = new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN) .requestEmail() .build(); mGoogleApiClient = new GoogleApiClient.Builder(this) .addApi(Auth.GOOGLE_SIGN_IN_API, gso) .build(); mGoogleApiClient.connect(); super.onStart(); } 

y después:

 signout.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Auth.GoogleSignInApi.signOut(mGoogleApiClient).setResultCallback( new ResultCallback<Status>() { @Override public void onResult(Status status) { // ... Toast.makeText(getApplicationContext(),"Logged Out",Toast.LENGTH_SHORT).show(); Intent i=new Intent(getApplicationContext(),MainActivity.class); startActivity(i); } }); } 

});

Probablemente sería más fácil crear una clase base y heredar los métodos de conexión / desconexión. Photohunt, nuestra muestra completa, documenta este diseño en detalle.

Código Docs

Jonathan está en lo cierto que una clase base o un fragmento te haría la vida más fácil. Dicho esto, el código aquí podría funcionar – el problema es que está comprobando si el PlusClient está conectado en onCreate() – pero no lo conecta hasta onStart() . Es probable que tenga que comprobar la intención en el método onConnected() y realizar el signo hacia fuera allí.

Una vez que haga clic en cerrar sesión de otra actividad, intente enviar una intención con extra para indicar que se ha hecho clic en el botón de cierre de sesión. Luego en la actividad de inicio de sesión

 if (Intent.Extras != null && Intent.Extras.ContainsKey("LogoutAction")) { _logoutRequest = Intent.Extras.GetBoolean("LogoutAction"); } if (_logoutRequest) { await PlusClass.AccountApi.RevokeAccessAndDisconnect(_apiClient); _apiClient.Disconnect(); _apiClient.Connect (); _logoutRequest = false; } 

Otra Actividad

 var intent = new Intent(this.Activity,typeof(LoginActivity)); intent.PutExtra("LogoutAction",true); 
  • G + con los servicios de Google Play accediendo a los intentos de correo electrónico del usuario Falta android.permission.GET_ACCOUNTS
  • ¿Cómo obtener un token de actualización para google plus en android?
  • ¿Cómo comprobar si un usuario ha iniciado sesión en Google+?
  • Emulador de Android: esta aplicación no se ejecutará sin los servicios de Google Play
  • No se pudo encontrar información sobre el proveedor de com.google.plus.platform
  • Nativo de Google Plus Login para Xamarin.Android y Xamarin.iOS
  • ¿Cómo crear una interfaz de usuario como el nuevo mercado o Google más?
  • Single Sign-On de Google Plus Cross-Platform: onConnected nunca se llama en una instalación nueva
  • Servicios de Google Play en el emulador, implementación del botón de inicio de sesión de Google Plus, etc.
  • Validación de token del backend para el inicio de sesión de Google+ en la aplicación de Android
  • No es posible obtener información del usuario de inicio de sesión de Google+ en android
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.