Google+ sign out à partir d'une autre activité
J'ai commencé à utiliser le Google+ API
pour android, et j'ai créé un signe-dans l'application en suivant ce tutoriel:
https://developers.google.com/+/mobile/android/connexion
Maintenant, le problème est que je veux créer le bouton de déconnexion à partir d'un autre Activity
, et ce que j'ai essayé de faire n'a pas vraiment fonctionné..
Mon GPlusLogin (code de l'Activité pour Google+ Login):
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");
}
}
Mon Débranchez le code sur 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;
}
}
- comment avez-vous résolu ce problème? s'il vous plaît partager.
- heres votre réponse, stackoverflow.com/questions/27921515/... la recherche de ma réponse
- Jetez un oeil à stackoverflow.com/questions/31734567/...
Vous devez vous connecter pour publier un commentaire.
Juste ajouter ceci sur votre nouvelle activité, où vous voulez que votre déconnexion du bouton google+ pour être là :
et suivant:
Hey, j'ai résolu ce problème par moi-même, le travail comme un charme
Quel est le problème : Google plus signIn dans une activité, mais ont besoin de vous Déconnecter à partir d'une autre activité
Solution:
Mon Google-plus de Déconnexion de l'Activité se présente comme suit:
Description de la solution:
Pour seul package API google plus va générer un jeton & session.Seulement ici simplement faire une autre session dans la page de déconnexion également.Vous pouvez facilement de déconnexion de la session maintenant
Je avoir essayé beaucoup de choses sur ce problème de déconnexion de session en cours, juste de l'essayer .il sera certainement le travail. des doutes laissez-moi savoir
Il serait probablement plus facile de créer une classe de base et à hériter de la connexion/déconnexion des méthodes. Photochasse, notre échantillon complet, les documents de cette conception en détail.
Docs
Code
Après avoir lutté pendant plus d'une semaine pour trouver la réponse.
Je l'ai fait,
Après la signature de sauver boolean isSignedIn dans sharedpreferences comme vrai.
Maintenant de toute activité lorsque l'utilisateur clique sur déconnexion, de changer le booléen false.
Dans votre Activité de Connexion où
googleApiClient
est à construire. Dans sa méthode onStart.Vérifier si
isSignedIn
est faux.De faire de même dans
onConnected
Ce sera fermée et revokeAccess.
Une fois que vous cliquez sur déconnexion dans une autre activité,essayez d'envoyer une intention supplémentaire pour indiquer que le bouton de déconnexion est cliqué. Ensuite, sur l'Activité de Connexion
Autre Activité
Jonathan est correct de dire qu'une classe de base ou un fragment serait rendre votre vie plus facile. Cela dit, le code ici pourrait fonctionner - le problème, c'est que vous êtes vérifier si le PlusClient est connecté en
onCreate()
- mais vous n'avez pas le connecter jusqu'àonStart()
. Vous auriez probablement besoin de vérifier l'intention dans laonConnected()
méthode, et d'effectuer le signer là-bas.sommesh's réponse est parfait, mais pour moins de code, vous pouvez utiliser la "Méthode Statique Publique", comme ceci:
Et sur vos autres Activités appeler:
Vous pouvez obtenir de l'instance de FirebaseAuth n'importe où à partir de l'app comme FirebaseAuth est une classe singleton.
Voici ma solution. J'ai fait un
Utils
classe singleton. Dans monLoginActivity
, j'ai unGoogleSignInClient
objet. Donc, juste avant de commencer laDashboardActivity
après la connexion, j'ai enregistrer l'instance degoogleSignInClient
objet en appelantUtils.getInstance().setGoogleSignInClient(googleSignInClient)
. Maintenant n'importe où ailleurs, si je veux déconnexion j'ai cette méthode dansUtils
prêt:Alors maintenant, je peux le faire à partir de toute autre activité:
Oui, vous devez vous déconnecter de deux d'entre eux, sinon, vous risquez de ne pas voir le compte sélecteur de la prochaine fois que vous appuyez sur le bouton de connexion.