私は Android アプリケーションを作成しています。ユーザーがアプリケーションをインストールすると、Google アカウントでサインインする必要があります。ログインに成功すると、ダッシュボード ページにリダイレクトされます。ユーザーがアプリケーションを閉じて再度開くと、すでにログインしている場合は、ダッシュボード アクティビティ自体が表示されます。また、ダッシュボードアクティビティに drawerLayout があり、ユーザーがログアウトしてログインアクティビティを再度開くことができる「サインアウト」ボタンがあります。
Androidで初回ログインを確認するためにSharedPreferenceを使用しています
以下は私が直面している問題です
アプリケーションは、ログインを求めずにダッシュボード アクティビティを開きます。
ダッシュボード アクティビティのドロワー レイアウトから [サインアウト] をクリックすると、一瞬ログイン アクティビティに移行しますが、自動的に再度ログインします。つまり、「サインアウト」が機能せず、ログインしたままになります。
以下は、ユーザーが初めてアプリを開いたときのスクリーンショットです。ログインを求められません。
しかし、特にサインアウトをクリックすると、ログインアクティビティが表示され、
以下に、ログアウトしようとするたびにスクリーンショットまたは結果を示しましたが、再度ログインします。任意の入力をいただければ幸いです。
LoginActivity.java
public class GooglePlayServicesActivity extends Activity implements OnClickListener, ConnectionCallbacks, OnConnectionFailedListener {
private static final int RC_SIGN_IN = 0;
private static final String TAG = "GoogleLogin";
// Google client to communicate with Google
public GoogleApiClient mGoogleApiClient;
private boolean mIntentInProgress;
private boolean signedInUser;
private ConnectionResult mConnectionResult;
private SignInButton signinButton;
private TextView username, emailLabel;
private LinearLayout signInFrame;
private RelativeLayout profileFrame;
private View relativeLayout;
private String personPhotoUrl;
private String personID;
private String personName;
private String personEmail;
private boolean hasLoggedIn;
private String personGender;
private String personDOB;
private String personFullName;
private String user_gender = "";
// DatabaseHandler dbHandler = new DatabaseHandler(this);
public void checkLogIn(){
Log.d(TAG,"Checked Logged In called ");
SharedPreferences settings = getSharedPreferences(Constants.PREFS_NAME, MODE_PRIVATE);
hasLoggedIn = settings.getBoolean("hasLoggedIn", false);
Log.d("Value of HasLoggedin",":"+String.valueOf(hasLoggedIn));
if(hasLoggedIn){
Intent i = new Intent(getApplicationContext(),ActivityFeedActivity.class);
startActivityFeedActivity(i);
GooglePlayServicesActivity.this.finish();
}
}
private void startActivityFeedActivity(Intent i) {
startActivity(i);
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//checkLogIn();
setContentView(R.layout.google_login);
//initFacebookLogin();
signinButton = (SignInButton) findViewById(R.id.signin);
signinButton.setOnClickListener(this);
relativeLayout = getLayoutInflater().inflate(R.layout.profile_view, null);
username = (TextView) relativeLayout.findViewById(R.id.name);
emailLabel = (TextView) relativeLayout.findViewById(R.id.email);
profileFrame = (RelativeLayout) relativeLayout.findViewById(R.id.profileView);
signInFrame = (LinearLayout) findViewById(R.id.signinFrame);
mGoogleApiClient = new GoogleApiClient.Builder(this).addConnectionCallbacks(this).addOnConnectionFailedListener(this).addApi(Plus.API, Plus.PlusOptions.builder().build()).addScope(Plus.SCOPE_PLUS_LOGIN).build();
}
protected void onStart() {
super.onStart();
mGoogleApiClient.connect();
}
protected void onStop() {
super.onStop();
if (mGoogleApiClient.isConnected()) {
mGoogleApiClient.disconnect();
}
}
private void resolveSignInError() {
if (mConnectionResult.hasResolution()) {
try {
mIntentInProgress = true;
mConnectionResult.startResolutionForResult(this, RC_SIGN_IN);
} catch (SendIntentException e) {
mIntentInProgress = false;
mGoogleApiClient.connect();
}
}
}
@Override
public void onConnectionFailed(ConnectionResult result) {
if (!result.hasResolution()) {
GooglePlayServicesUtil.getErrorDialog(result.getErrorCode(), this, 0).show();
return;
}
if (!mIntentInProgress) {
// store mConnectionResult
mConnectionResult = result;
if (signedInUser) {
resolveSignInError();
}
}
}
@Override
protected void onActivityResult(int requestCode, int responseCode, Intent intent) {
switch (requestCode) {
case RC_SIGN_IN:
if (responseCode == RESULT_OK) {
signedInUser = false;
}
mIntentInProgress = false;
if (!mGoogleApiClient.isConnecting()) {
mGoogleApiClient.connect();
}
break;
}
}
@Override
public void onConnected(Bundle arg0) {
signedInUser = false;
getProfileInformation();
SharedPreferences settings = getSharedPreferences(Constants.PREFS_NAME, MODE_PRIVATE); // 0 - for private mode
SharedPreferences.Editor editor = settings.edit();
editor.putBoolean("hasLoggedIn", true);
editor.putString("personID", getPersonID());
editor.putString("personName", getPersonFullName());
editor.putString("personEmail",getPersonEmail());
editor.putString("picURL",getPicUrl());
editor.commit();
Intent i = new Intent(this,ActivityFeedActivity.class);
startActivityFeedActivity(i);
GooglePlayServicesActivity.this.finish();
}
private void getProfileInformation() {
try {
if (Plus.PeopleApi.getCurrentPerson(mGoogleApiClient) != null) {
Person currentPerson = Plus.PeopleApi.getCurrentPerson(mGoogleApiClient);
String personID = currentPerson.getId();
String personFullName = currentPerson.getDisplayName(); // Gives FullName
String personName = String.valueOf(currentPerson.getName()); //Gives First Name and Last Name in Json formay
String personGender = String.valueOf(currentPerson.getGender()); //Gives Gender in int 0:Male, 1:Female
String personDOB = currentPerson.getBirthday();
String email = Plus.AccountApi.getAccountName(mGoogleApiClient);
String personPicUrl = currentPerson.getImage().getUrl();
setpersonID(currentPerson.getId());
setpersonFullName(currentPerson.getDisplayName());
setpersonName(currentPerson.getName());
setpersonEmail(email);
setpersonGender(personGender);
setPicUrl(currentPerson.getImage().getUrl());
setpersonDOB(currentPerson.getBirthday());
Log.d(TAG, "Gender:" + personGender + " DOB:" + personDOB + " FirstName:" + personName + " ");
username.setText(personFullName);
emailLabel.setText(email);
}
} catch (Exception e) {
e.printStackTrace();
}
}
@Override
public void onConnectionSuspended(int cause) {
mGoogleApiClient.connect();
// updateProfile(false);
}
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.signin:
googlePlusLogin();
break;
}
}
private void googlePlusLogin() {
if (!mGoogleApiClient.isConnecting()) {
signedInUser = true;
resolveSignInError();
}
}
}
DashboardActivity.java
private void initDrawerList(String[] values){
this.drawerList = (ListView) findViewById(R.id.navdrawer);
final DrawerLayout layout = this.drawerLayout;
ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,
android.R.layout.simple_list_item_1, android.R.id.text1, values);
this.drawerList.setAdapter(adapter);
this.drawerList.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view,
int position, long id) {
switch (position) {
case 0:
layout.closeDrawer(Gravity.START);
break;
case 1:
layout.closeDrawer(Gravity.START);
break;
case 2:
layout.closeDrawer(Gravity.START);
break;
case 3:
googleLogout();
Log.d(TAG,"Returned from function");
break;
}
}
});
}
private void googleLogout() {
SharedPreferences settings = getSharedPreferences(Constants.PREFS_NAME, MODE_PRIVATE);
SharedPreferences.Editor editor = settings.edit();
editor.clear();
editor.commit();
if (mGoogleApiClient.isConnected()){
Plus.AccountApi.clearDefaultAccount(mGoogleApiClient);
mGoogleApiClient.disconnect();
mGoogleApiClient.connect();
Intent i = new Intent(this,GooglePlayServicesActivity.class);
startActivity(i);
ActivityFeedActivity.this.finish();
}
else {
Log.d(TAG,"entered else");
}
//updateProfile(false);
}