1

私は 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);
    }
4

1 に答える 1

1

ログアウトをクリックしながらメソッドを試してください

グーグルからログアウト

private void signOutFromGplus(){
        if (mGoogleApiClient.isConnected(){
            Plus.AccountApi.clearDefaultAccount(mGoogleApiClient);
            mGoogleApiClient.disconnect();
            mGoogleApiClient.connect();
        }
}
于 2015-05-12T05:36:39.177 に答える