Ausloggen aus dem Google-Plus integriert in die android-Anwendung
Ich habe den folgenden tutorials für die Einbindung von Google+ in der android-app.
https://developers.google.com/+/mobile/android/sign-in#add_the_google_sign-in_button_to_your_app
http://www.riskcompletefailure.com/2013/03/common-problems-with-google-sign-in-on.html
http://www.androidhive.info/2014/02/android-login-with-google-plus-account-1/
Ich bin in der Lage, Zeichen in das Google-Konto und bin in der Lage, um die Informationen auch. Sache ist, ich bin nicht in der Lage, um sich abzumelden.
Ich bin logging in G+ log-in-Aktivität und speichern Sie die Sitzung mit Gemeinsamen Vorlieben und Schließung der Sitzung in einem anderen Base-Aktivität, vorbei an der boolean-Wert auf die Login-Aktivität in Bezug auf die Schließung der Sitzung. Obwohl die Sitzung nicht aktiv ist, oder Benutzer ist nicht angemeldet, login-Aktivität automatisch eine Verbindung zu den G+ immer, wenn login-activity gestartet wird. Versucht, das zu tun-Logik auf onConnected aber ohne Erfolg.
Unten ist mein code-snippet.
public class LoginActivity extends BaseActionBar implements OnClickListener,
ConnectionCallbacks, OnConnectionFailedListener {
private Button btnLogin, btnFgetPwrd, btnRegister;
//Logcat tag
private static final String TAG = "LoginActivity";
//Google Plus
private static final int GOOGLE_SIGN_IN = 0;
//Google Plus Profile Data
String GpersonName, GpersonPhotoUrl, Gemail, googleError, GCustId;
//Google client to interact with Google API
private GoogleApiClient mGoogleApiClient;
private SignInButton btnGooglePlus;
//A flag indicating that a PendingIntent is in progress and prevents us
//from starting further intents.
private boolean mIntentInProgress;
//Track whether the sign-in button has been clicked so that we know to
//resolve all issues preventing sign-in without waiting.
private boolean mSignInClicked;
private ConnectionResult mConnectionResult;
//Session Manager Class
SessionManager session;
@Override
protected void onCreate(Bundle savedInstanceState) {
//TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.login);
//Initializing google plus api client
mGoogleApiClient = new GoogleApiClient.Builder(this)
.addConnectionCallbacks(this)
.addOnConnectionFailedListener(this).addApi(Plus.API)
.addScope(Plus.SCOPE_PLUS_LOGIN).build();
//Session Manager
session = new SessionManager(getApplicationContext());
if (session.isLoggedIn() == false) {
Log.v(TAG, "false");
mSignInClicked = false;
DataStore.LoginGoogle = false;
if (mGoogleApiClient.isConnected()) {
Plus.AccountApi.clearDefaultAccount(mGoogleApiClient);
mGoogleApiClient.disconnect();
mGoogleApiClient.connect();
}
} else {
Intent i = new Intent(LoginActivity.this, UserProfileActivity.class);
startActivity(i);
}
btnLogin.setOnClickListener(this);
btnFgetPwrd.setOnClickListener(this);
btnRegister.setOnClickListener(this);
btnGooglePlus.setOnClickListener(this);
}
//Facebook and Google Plus
@Override
protected void onActivityResult(int requestCode, int responseCode,
Intent intent) {
if (requestCode == GOOGLE_SIGN_IN) {
if (responseCode != RESULT_OK) {
mSignInClicked = false;
}
mIntentInProgress = false;
if (!mGoogleApiClient.isConnecting()) {
mGoogleApiClient.connect();
}
} else if (requestCode == FB_SIGN_IN) {
Session.getActiveSession().onActivityResult(this, requestCode,
responseCode, intent);
}
}
//Google Plus
protected void onStart() {
super.onStart();
mGoogleApiClient.connect();
}
protected void onStop() {
super.onStop();
if (mGoogleApiClient.isConnected()) {
mGoogleApiClient.disconnect();
}
}
@Override
public void onClick(View v) {
//TODO Auto-generated method stub
switch (v.getId()) {
case R.id.loginBtn:
//Login Button Clicked
break;
case R.id.loginBtnFrgtPass:
//Forgot Button Clicked
i = new Intent(LoginActivity.this, ForgotPasswordActivity.class);
startActivity(i);
break;
case R.id.loginBtnRegis:
//Register Button Clicked
i = new Intent(LoginActivity.this, RegisterActivity.class);
startActivity(i);
break;
case R.id.loginBtn_sign_in:
signInWithGplus();
break;
}
}
//Sign-in into google
private void signInWithGplus() {
if (!mGoogleApiClient.isConnecting()) {
mSignInClicked = true;
resolveSignInError();
}
}
//Method to resolve any sign-in errors
private void resolveSignInError() {
Log.v(TAG, mConnectionResult.toString());
if (mConnectionResult.hasResolution()) {
try {
mIntentInProgress = true;
startIntentSenderForResult(mConnectionResult.getResolution()
.getIntentSender(), GOOGLE_SIGN_IN, null, 0, 0, 0);
//mConnectionResult
//.startResolutionForResult(this, GOOGLE_SIGN_IN);
} catch (SendIntentException e) {
mIntentInProgress = false;
mGoogleApiClient.connect();
}
}
}
//Google+ connection
@Override
public void onConnected(Bundle arg0) {
//TODO Auto-generated method stub
Log.v(TAG, "onConnected");
mSignInClicked = false;
Toast.makeText(this, "User is connected to Google+", Toast.LENGTH_LONG)
.show();
btnLogin.setEnabled(false);
//Get user's information
getProfileInformation();
}
//Google+ connection
@Override
public void onConnectionSuspended(int arg0) {
//TODO Auto-generated method stub
mGoogleApiClient.connect();
}
//Google+ connection
@Override
public void onConnectionFailed(ConnectionResult result) {
//TODO Auto-generated method stub
Log.v(TAG, result.toString());
if (!result.hasResolution()) {
GooglePlayServicesUtil.getErrorDialog(result.getErrorCode(), this,
0).show();
return;
}
if (!mIntentInProgress) {
//Store the ConnectionResult for later usage
mConnectionResult = result;
if (mSignInClicked) {
//The user has already clicked 'sign-in' so we attempt to
//resolve all
//errors until the user is signed in, or they cancel.
resolveSignInError();
}
}
} //Normal Logging in
}
Code-snippet für die Protokollierung aus der Sitzung vom base activity
if (session.isLoggedIn()) {
session.logoutUser();
DataStore.LoginGoogle = false;
setOptionTitle(R.id.action_login, "Login");
}
Du musst angemeldet sein, um einen Kommentar abzugeben.
import com.google.android.gms.auth.api.Auth;
Auth.GoogleSignInApi.signOut(googleApiClient);
Zeichen aus der aktuellen angemeldeten Benutzer, falls vorhanden. Es löscht auch das Konto zuvor durch den Benutzer ausgewählt und eine Zukunft Zeichen im Versuch, muss der Benutzer wählen Sie ein Konto wieder.
https://developers.google.com/android/reference/com/google/android/gms/auth/api/signin/GoogleSignInApi
HINWEIS -
googleApiClient
Ziel sollte sein, die im verbundenen Zustand zum Abmelden des Benutzers.Fand ich die Lösung.
Nachdem er folgenden Seiten, ich fand die Lösungen.
Android-Implementierung von Google plus login-Fehler auf mConnectionResult.hasResolution()
http://www.riskcompletefailure.com/2013/03/common-problems-with-google-sign-in-on.html
Ich hatte zu überprüfen, die Protokollierung der Sitzung im onConnected, und machen Sie den log-out-Prozesses.
Unten ist das code-snippet.
ShopRunDataStore
?Wenn Sie aufmerksam gelesen haben die Unterlagen von dem link, den Sie zur Verfügung gestellt, hättest du gesehen, dass es einen Probe-Funktion auf, wie Sie sich aus der Verwendung
https://developers.google.com/+/mobile/android/sign-in#add_the_google_sign-in_button_to_your_app
Unter "Abmelden" den Benutzer"
Das problem mit meinem code war, dass die re-login war passiert, bevor Sie die Verbindung trennen vollständig wäre. Die Lösung war zu Beginn der re-login nach dem trennen würde vollständig sein, d.h. in der
OnConnected
Zuhörer.