Я работаю над приложением android, где в настоящее время я пытаюсь реализовать функцию аутентификации с использованием Firebase.
Функциональные возможности работают должным образом, пользователь может войти в систему обоими способами, которые я ожидаю, но каждый раз, когда он открывает программу, ему приходится go через процедуру аутентификации. Кроме того, после нажатия кнопки выхода из системы, система также немедленно выдает google-подтверждение. (после избежания этого мы, наконец, снова попадаем в меню с входом в систему, но это очень раздражает)
public class FragmentMain extends Fragment {
private static final int MY_REQUEST_CODE = 7117;
List<AuthUI.IdpConfig> providers;
Button logout;
@Nullable
@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
View v = inflater.inflate(R.layout.main_fragment, container, false);
logout = v.findViewById(R.id.logout);
logout.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
AuthUI.getInstance()
.signOut(getActivity())
.addOnCompleteListener(new OnCompleteListener<Void>() {
@Override
public void onComplete(@NonNull Task<Void> task) {
logout.setEnabled(false);
showSignOptions();
}
}).addOnFailureListener(new OnFailureListener() {
@Override
public void onFailure(@NonNull Exception e) {
Toast.makeText(getActivity(), "" + e.getMessage(), Toast.LENGTH_SHORT).show();
}
});
}
});
providers = Arrays.asList(
new AuthUI.IdpConfig.EmailBuilder().build(),
new AuthUI.IdpConfig.GoogleBuilder().build()
);
showSignOptions();
return v;
}
private void showSignOptions() {
startActivityForResult(
AuthUI.getInstance().createSignInIntentBuilder()
.setAvailableProviders(providers)
.setLogo(R.drawable.loginlogo)
.setTheme(R.style.LogInTheme)
.build(), MY_REQUEST_CODE
);
}
@Override
public void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if(requestCode == MY_REQUEST_CODE)
{
IdpResponse response = IdpResponse.fromResultIntent(data);
if(resultCode == RESULT_OK)
{
FirebaseUser user = FirebaseAuth.getInstance().getCurrentUser();
Toast.makeText(getActivity(), "" + user.getEmail(), Toast.LENGTH_SHORT).show();
logout.setEnabled(true);
}else{
Toast.makeText(getActivity(), "" + response.getError().getMessage(), Toast.LENGTH_SHORT).show();
}
}
}
}
На мой взгляд, FirebaseUser user = FirebaseAuth.getInstance().getCurrentUser()
должна быть линией, вызывающей проблему, но не уверен, как ее решить (я имею в виду, конечно, если это проблема ...)
Есть ли способ заблокировать систему для запроса подтверждения, если пользователь один раз вошел в систему, до тех пор, пока это выходит из системы? - также, когда он выйдет из системы, вернитесь к цели входа в систему?