android studio中的持久google登录

nwo49xxi  于 2021-09-13  发布在  Java
关注(0)|答案(1)|浏览(448)

我成功地在我的应用程序中设置了谷歌登录,效果很好。我还添加了一个有效的注销按钮。我面临的问题是,每当我打开应用程序时,它都要求用户在进入下一个应用程序之前登录谷歌(或者只需按下按钮) activity . 我尝试了许多不同的方法来解决这个问题,但似乎没有一种有效。有人能帮我做一个持久的谷歌登录吗?在这个过程中,即使用户关闭了应用程序,它也会让他们保持登录,并且他们永远看不到登录活动(除非他们注销)?
这是我的密码 LoginActivity :

public class LoginActivity extends AppCompatActivity implements GoogleApiClient.OnConnectionFailedListener {

    SignInButton signInButton;
    private GoogleApiClient googleApiClient;
    private SharedPreferences prefs;
    private int progress;
    private int SIGN_IN;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_login);
            getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);

            GoogleSignInOptions gso = new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN).requestEmail().build();

            googleApiClient = new GoogleApiClient.Builder(this).enableAutoManage(this, this)
                    .addApi(Auth.GOOGLE_SIGN_IN_API, gso).build();

            prefs = PreferenceManager.getDefaultSharedPreferences(getApplicationContext());
            progress = prefs.getInt("SIGN_IN", 0);
            signInButton = findViewById(R.id.signInWithGoogle);
            signInButton.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View view) {
                    Intent intent = Auth.GoogleSignInApi.getSignInIntent(googleApiClient);
                    startActivityForResult(intent, SIGN_IN);
                    SharedPreferences.Editor editPrefs = prefs.edit();
                    editPrefs.putInt("SIGN_IN", 1);
                    editPrefs.apply();
                }
            });
        }

    @Override
    public void onConnectionFailed(@NonNull ConnectionResult connectionResult) {

    }

    @Override
    protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
        super.onActivityResult(requestCode, resultCode, data);

        if(requestCode == SIGN_IN){
            GoogleSignInResult result = Auth.GoogleSignInApi.getSignInResultFromIntent(data);

            if (result.isSuccess()){
                startActivity(new Intent(LoginActivity.this, StudentInformationFormActivity.class));
                finish();
            } else {
                Toast.makeText(this, "Login Failed!", Toast.LENGTH_SHORT).show();
            }
        }
    }
    @Override
    protected void onPause() {
        super.onPause();
    }
}
qaxu7uf2

qaxu7uf21#

有一次我也遇到了同样的问题,我看了看我的旧代码,发现了这样的问题:

@Override
protected void onStart() {
    super.onStart();
    GoogleSignInAccount lastSignedInAccount = GoogleSignIn.getLastSignedInAccount(this);
    if (lastSignedInAccount != null) {
        startActivity(new Intent(LogInActivity.this, MainActivity.class));
        finish();
    }

}

因此,您可以检查用户是否已登录activity的onstart,如果已登录,请转到下一个活动。希望有帮助:)

相关问题