5

Ich habe Google und Facebook registrieren mit ihren jeweiligen Methoden integriert. Aber nach dem erfolgreichen Unterschreiben möchte ich verschiedene Aktivitäten eröffnen und ähnlich kann der Benutzer zu verschiedenen Aktivitäten gehen. Ich habe eine Aktionsleiste verwendet, in der ich eine Option zum Abmelden von einem der Konten, bei denen sich der Benutzer angemeldet hat, angegeben habe. Wie kann ich den Benutzer abmelden, wenn ich in einer anderen Aktivität als der Hauptaktivität bin? Ich erhalte eine Ausnahme, und ich bin nicht in der Lage, apiclient Referenz (für Google) und Sitzungsreferenz (für Facebook) zu einer anderen Aktivität zu übergeben. Bitte helfen Sie. Vielen Dank im Voraus.Abmeldung von Google und Facebook in Android-Anwendung

Antwort

2

Log von Facebook aus:

public static void callFacebookLogout(Context context) { 
Session session = Session.getActiveSession(); 
if (session != null) { 

    if (!session.isClosed()) { 
     session.closeAndClearTokenInformation(); 
     //clear your preferences if saved 
    } 
} else { 

    session = new Session(context); 
    Session.setActiveSession(session); 

    session.closeAndClearTokenInformation(); 
     //clear your preferences if saved 

} 

} 

von Google Logout:

@Override 
public void onClick(View view) { 
if (view.getId() == R.id.sign_out_button) { 
if (mGoogleApiClient.isConnected()) { 
    Plus.AccountApi.clearDefaultAccount(mGoogleApiClient); 
    mGoogleApiClient.disconnect(); 
    mGoogleApiClient.connect(); 
    } 
} 
} 

guide's docs

0

Für Abmelden von Facebook.

public void logoutFromFacebook() { 
     Session session = Session.getActiveSession(); 
     session.closeAndClearTokenInformation(); 
     // Clear Preferences and other data and go back to login activty 
    } 

Zum Abmelden von Google+. Beachten Sie, dass das Abmelden von Google+ etwas kniffliger ist als das von Facebook. Sie müssen einen booleschen Wert verwalten, um Ereignisse beim Abmelden zu verfolgen (wie bei der Anmeldung).

public void logoutFromGooglePlus() { 
     mGooglePlusLogoutClicked = true; // Keep track when you click logout 
     if (mGoogleApiClient.isConnected()) { 
      Plus.AccountApi.clearDefaultAccount(mGoogleApiClient); 
      revokeAccess(); 
     } else { 
      mGoogleApiClient.connect(); // It can send user to onConnected(), call logout again from there 
     } 
    } 

// revoke access (if needed) 
protected void revokeAccess() { 

     Plus.AccountApi.revokeAccessAndDisconnect(mGoogleApiClient) 
       .setResultCallback(new ResultCallback<Status>() { 
        @Override 
        public void onResult(Status status) { 
         mGoogleApiClient.disconnect(); 
         mGoogleApiClient.connect(); 
         // Clear data and go to login activity 
        } 
       }); 
    } 

die Frage in Kommentar zu beantworten: GoogleApiClient oft in einer Anwendung instanziiert werden kann, und es dauert immer noch die gleiche Instanz, wie es erstes Mal initialisiert wurde. Also mach dir keine Sorgen, wie man GoogleApiClient unter Aktivitäten "pass". Es handelt sich um einen leichtgewichtigen Client, der in jeder Aktivität als neue Instanz initialisiert wird. Erstellen Sie einfach einen neuen GoogleAPiClient, rufen Sie .connect() an und fangen Sie an zu arbeiten. Sie müssen jedoch die dafür erforderlichen Schnittstellen implementieren, aber Sie können die Methoden leer lassen, wenn Sie dort nicht arbeiten wollen.

Soweit mLogoutClicked Boolean betrifft, können Sie Ihre eigene Implementierung haben, wie Sie möchten. Im Grunde ist es nur ein Weg, um die onConnected() Methode, die Sie für eine Abmeldung kamen zu sagen. (Schauen Sie sich den Code an, wir rufen .connect() beim Logout an. So könnte es in onConnected() gehen und mit Ihrem Login-Code kollidieren). Sie würden so etwas wie dies auf dem onconnected()

public void onConnected(Bundle connectionHint) { 

     if (mGooglePlusLogoutClicked) { 
      logoutFromGooglePlus(); 
      mGooglePlusLogoutClicked = false; 
     } 
    } 

Als Beratung über Ihre Fluss Umsetzung tun, haben eine Basisklasse machen die alle GoogleApiClient Initialisierung und lassen Anmeldung Aktivität und andere Aktivitäten es erweitern. So wird implizit das Problem der Initialisierung eines Clients in jeder Aktivität behandelt. Implementieren Sie einfach den gemeinsamen onConnected(), onConnectionFailed() usw. Code in der Basisaktivität und lassen Sie die Login-Aktivität diese überschreiben, um die Login-Logik zu implementieren. (und dasselbe für Abmeldeaktivität.Es wird diese außer Kraft setzen und handhaben Abmeldecode)

+0

Wie rufe ich googleApiClient Objekt in der anderen Tätigkeit. Auch mGooglePlusLogoutClicked Variable sollte wie beibehalten werden. Danke für die facebook one, ich konnte das vervollständigen aber bitte hilf mir auch dabei. – Jarvis

+0

Ich habe die Antwort bearbeitet, um Details hinzuzufügen. Ich habe den Workflow so klar wie möglich erwähnt (so viel ich weiß). Ich hoffe es hilft. Gib mir Bescheid. – VipulKumar

+0

Ich möchte etwas Hilfe in Bezug auf Facebook Login von Android-Gerät. Ich kann mich von einem Gerät aus anmelden, aber von dem anderen Gerät erhalte ich eine Ausnahme, während ich E-Mails und andere Dinge abrufe.Kannst du mir bitte dabei helfen? Ich habe die Leseberechtigung für E-Mail hinzugefügt. – Jarvis

3

nur auf Ihre neue Tätigkeit fügen Sie diese:

@Override 
     protected void onStart() { 
      mGoogleApiClient.connect(); 
      super.onStart(); 
     } 

und dann

@Override 
    public void onClick(View v) { 
      switch (v.getId()) { 
       case R.id.sign_out_button2: 

         Plus.AccountApi.clearDefaultAccount(mGoogleApiClient); 
         mGoogleApiClient.disconnect(); 
         mGoogleApiClient.connect(); 
+0

Warum schreiben Sie mGoogleApiClient.connect() gefolgt von mGoogleApiClient.disconnect()? –

+0

, weil es alle vorherigen Sitzungen trennt – Andrea

1

Abmeldung von Facebook ist ziemlich einfach

nur das hinzufügen folgender Code

LoginManager.getInstance().logOut(); 

Sie können dann den Benutzer umleiten Aktivität um sich einzuloggen durch folgenden Code weitere Zugabe

LoginManager.getInstance().logOut(); 
Intent intent = new Intent(CurrentActivity.this, LoginActivity.class); 
startActivity(intent); 
finish(); 

so Ihre endgültige Code für logoutFromFacebook

auf Logout-Button Ereignis
public void logoutFromFacebook(){ 
    LoginManager.getInstance().logOut(); 
    Intent intent = new Intent(CurrentActivity.this, LoginActivity.class); 
    startActivity(intent); 
    finish(); 
} 

Nun rufen Sie einfach diese Methode wäre.

10

Log von Google aus:

Fügen Sie einfach diese auf Ihrer neuen Tätigkeit, wo Sie Ihre Logout-Button soll für Google +, dort sein:

@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(); 
} 

und neben Sie setOnClickListener auf Taste einstellen:

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); 
        } 
       }); 
    } 
}); 
1

zum einen für Facebook ausloggen:

LoginManager.getInstance().logOut(); 

Wenn Sie versuchen, sich von anderen Aktivitäten oder Fragmenten abzumelden, erhalten Sie Fehler wie Facebook sdk nicht initialisiert. Dann zuerst müssen Sie Facebook sdk wie:

FacebookSdk.sdkInitialize(your context here); 

initialisieren und dann vom Manager abmelden.

Secondary für Google Logout:

zuerst müssen Sie überprüfen, dass Google Client verbunden ist oder nicht, und wenn dann logout Code aufrufen verbunden:

if (mGoogleApiClient.isConnected()) 
    Auth.GoogleSignInApi.signOut(mGoogleApiClient); 

hier mGoogleApiClient Objekt von GoogleApiClient ist.

+0

Dank seiner Hilfe mir –

1

Für Google-Konto

Auth.GoogleSignInApi.signOut(mGoogleApiClient); 

und für Facebook account

LoginManager.getInstance().logOut();