I have followed the following tutorials to integrate Google+ in the 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/
I am able to sign in into Google account, and am able to retrieve the information also. Thing is I am not able to log out.
I am logging in G+ in Login activity and storing the session using Shared Preferences, and closing the session in another Base activity, passing the boolean value to the Login activity regarding the closing of the session. Though the Session is not active or user has not logged in, login activity automatically connects to the G+ whenever login activity is started. Tried to do logic on onConnected but to no avail.
Below is my 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 of the logging out of session from base activity
if (session.isLoggedIn()) {
session.logoutUser();
DataStore.LoginGoogle = false;
setOptionTitle(R.id.action_login, "Login");
}