Итак, у меня есть два вопроса, с которыми я борюсь.
Вопрос 1: В данный момент я отключил автоматический вход здесь: Google -> Управление учетной записью Google -> Безопасность -> Пароль. Менеджер -> Параметры пароля -> «Отключить» автоматический вход
Причина, по которой я это сделал, была в том, что я не хотел, чтобы мой телефон автоматически подписывался, например:
У меня есть два варианта входа по электронной почте / Facebook прямо сейчас, и если я хочу войти в систему с Facebook, или другой пользователь должен использовать мой телефон для входа в свой профиль, я не хочу, чтобы мой телефон для автоматического входа в мою учетную запись. Я видел, что некоторые люди используют .createSignInIntentBuilder().setIsSmartLockEnabled(false)
, но я не думаю, что это хорошая идея, чтобы отключить функцию. Теперь вот мой вопрос: есть ли разумное решение для этого? или что делают профессиональные разработчики приложений в этой ситуации?
Вопрос 2: Итак, как вы, наверное, догадались, я сделал кнопку "login"
, а затем у вас есть два варианта Email / Facebook. Но я изо всех сил пытаюсь сделать кнопку "logout"
? Когда пользователь вошел в систему, он возвращается к тому же действию, а затем имя входа должно быть удалено, а кнопка выхода из системы должна быть отображена. Итак, мой вопрос: как мне сделать, чтобы кнопка выхода отображалась вместо «входа в систему» с функцией выхода из системы?
После того, как пользователь вошел в систему:
MainActivity
public class MainActivity extends AppCompatActivity {
private static final String TAG = MainActivity.class.getSimpleName();
private static int RC_SIGN_IN = 1337;
FirebaseUser user = FirebaseAuth.getInstance().getCurrentUser();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Button signInButton = findViewById(R.id.SignInButton);
signInButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
List<AuthUI.IdpConfig> providers = Arrays.asList(
new AuthUI.IdpConfig.EmailBuilder().build(),
new AuthUI.IdpConfig.FacebookBuilder().build());
startActivityForResult(AuthUI.getInstance().createSignInIntentBuilder().setAvailableProviders(providers).build(), RC_SIGN_IN);
}
});
Button goToListButton = findViewById(R.id.List);
goToListButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
startActivity(new Intent(MainActivity.this, ListActivity.class));
}
});
}
@Override
protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == RC_SIGN_IN){
IdpResponse response = IdpResponse.fromResultIntent(data);
if(resultCode == RESULT_OK){
if (user != null) {
Log.d(TAG, user.getUid());
((TextView)findViewById(R.id.userId)).setText(user.getUid());
for (UserInfo userInfo : user.getProviderData()) {
if (userInfo.getProviderId().equals("facebook.com")) {
Log.d("TAG", "User is signed in with Facebook");
String photoUrl = user.getPhotoUrl().toString();
photoUrl = photoUrl + "?height=500";
Picasso.with(this).load(photoUrl).into((ImageView)findViewById(R.id.picture));
}else{
ImageView imV = findViewById(R.id.picture);
imV.setImageResource(R.drawable.pbstd);
}
}
}
}else{
Log.d(TAG, response.getError().getMessage());
}
}
}
}
ListActivity
public class ListActivity extends AppCompatActivity {
private final String TAG = ListActivity.class.getSimpleName();
private FirebaseFirestore firestore = FirebaseFirestore.getInstance();
private ListenerRegistration itemsListener;
private ListAdapter adapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_list);
RecyclerView recyclerView = findViewById(R.id.recyclerView);
recyclerView.setLayoutManager(new LinearLayoutManager(this));
adapter = new ListAdapter(new ArrayList<String>());
recyclerView.setAdapter(adapter);
Map<String, Object> item = new HashMap<>();
item.put("text", new Date().toString());
firestore.collection("items").add(item).addOnSuccessListener(
new OnSuccessListener<DocumentReference>() {
@Override
public void onSuccess(DocumentReference documentReference) {
Log.d(TAG, "Added " + documentReference.getId());
}
}
)
.addOnFailureListener(new OnFailureListener() {
@Override
public void onFailure(@NonNull Exception e) {
Log.d(TAG, e.getMessage());
}
});
}
@Override
protected void onResume() {
super.onResume();
itemsListener = firestore.collection("items").addSnapshotListener(
new EventListener<QuerySnapshot>() {
@Override
public void onEvent(@Nullable QuerySnapshot queryDocumentSnapshots, @Nullable FirebaseFirestoreException e) {
if (queryDocumentSnapshots != null && !queryDocumentSnapshots.getDocuments().isEmpty()){
List<String> items = new ArrayList<>();
for (DocumentSnapshot snapshot : queryDocumentSnapshots.getDocuments()){
items.add(snapshot.getData().get("text").toString());
}
adapter.setItems(items);
}
}
}
);
}
@Override
protected void onPause() {
super.onPause();
itemsListener.remove();
}
}
ListAdapter
public class ListAdapter extends RecyclerView.Adapter<ListAdapter.ViewHolder>{
List<String> items;
public ListAdapter(List<String> items){
this.items = items;
}
public void setItems(List<String> items) {
this.items = items;
notifyDataSetChanged();
}
@NonNull
@Override
public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.list_item, parent, false);
ViewHolder viewholder = new ViewHolder(view);
return viewholder;
}
@Override
public void onBindViewHolder(@NonNull ViewHolder holder, int position) {
holder.textView.setText(items.get(position));
}
@Override
public int getItemCount() {
return items.size();
}
public static class ViewHolder extends RecyclerView.ViewHolder {
private final TextView textView;
public ViewHolder(final View itemView){
super(itemView);
textView = itemView.findViewById(R.id.textView2);
}
}
}