Dapatkan Pengguna terbaru dari Firebase Authentication

Saat ini saya bekerja dengan Firebase. Saat ini saya menggunakan com.google.firebase:firebase-auth:10.0.1

Membuat pengguna, Masuk berfungsi dengan baik.

Sekarang saya ingin menambahkan opsi bagi pengguna yang memungkinkan pengguna mengubah nama tampilan dan gambar profilnya

Dalam Aktivitas A saya memanggil metode ini, dengan mengklik tombol:

   public void updateFirebaseUser(String newDisplayName, Uri newPhotoUri) {
      final FirebaseAuth auth = FirebaseAuth.getInstance();
      final FirebaseUser user = auth.getCurrentUser();
      if (user == null || (TextUtils.isEmpty(newDisplayName) && newPhotoUri == null)) {
         return;
      }
      UserProfileChangeRequest.Builder builder = new UserProfileChangeRequest.Builder();

      if (!TextUtils.isEmpty(newDisplayName)) {
         builder.setDisplayName(newDisplayName);
      }
      if (newPhotoUri != null) {
         builder.setPhotoUri(newPhotoUri);
      }
      UserProfileChangeRequest request = builder.build();
      user.updateProfile(request)
            .addOnCompleteListener(new OnCompleteListener<Void>() {
               @Override
               public void onComplete(@NonNull Task<Void> task) {
                  Toast.makeText(context, "profile update success = " + task.isSuccessful(),
                        Toast.LENGTH_SHORT)
                        .show();
               }
            });
   }

Segalanya tampak berfungsi, karena saya menerima Toast di layar saya, yang menampilkan "profile update success = true"

Nanti di aplikasi saya ingin menampilkan info pengguna, saya memanggil fillUserViews() di Aktivitas B. Tetapi informasi lama saya tetap ditampilkan.

   private void fillUserViews(NavigationView navigationView) {
      View headerView = navigationView.getHeaderView(0);
      FirebaseAuth auth = FirebaseAuth.getInstance();
      FirebaseUser user = auth.getCurrentUser();

      ImageView avatarVIew = (ImageView) headerView.findViewById(R.id.img_avatar);
      picasso.load(user.getPhotoUrl())
            .into(avatarVIew);

      TextView userName = (TextView) headerView.findViewById(R.id.txt_name);
      userName.setText(user.getDisplayName());

      TextView userMail = (TextView) headerView.findViewById(R.id.txt_mail);
      userMail.setText(user.getEmail());
   }

Memulai ulang aplikasi juga tidak membantu di sini. Tetapi jika saya logout dan login kembali lagi, data pengguna saya diperbarui.

Saya rasa ini ada hubungannya dengan cache internal Firebase. Itu sebabnya saya menambahkan baris ini auth.getCurrentUser().reload(); setelah bersulang.

Apakah ada kemungkinan untuk memaksakan permintaan pembaruan ke Firebase? Saya tidak menemukan apa pun di dokumentasi.

Terima kasih sebelumnya!


person dudeldidadum    schedule 05.01.2017    source sumber


Jawaban (2)


wuhuuuuu! Saya menemukan solusi:

Saya memuat ulang objek pengguna ketika saya benar-benar membutuhkannya dan setelah permintaan berhasil saya memperbarui pandangan saya!

   private void fillUserViews(NavigationView navigationView) {
      final View headerView = navigationView.getHeaderView(0);
      final FirebaseAuth auth = FirebaseAuth.getInstance();
      auth.getCurrentUser()
            .reload()
            .addOnSuccessListener(new OnSuccessListener<Void>() {

               @Override
               public void onSuccess(Void aVoid) {
                  FirebaseUser user = auth.getCurrentUser();

                  ImageView avatarVIew = (ImageView) headerView.findViewById(R.id.img_avatar);
                  picasso.load(user.getPhotoUrl())
                        .into(avatarVIew);
                  TextView userName = (TextView) headerView.findViewById(R.id.txt_name);
                  userName.setText(user.getDisplayName());
               }
            });
   }
person dudeldidadum    schedule 05.01.2017

Saya menyarankan Anda untuk menyimpan kredensial di firebaseDatabase sebagai node untuk setiap pengguna secara terpisah dan menyimpan nama pengguna dan Gambar profil di sana yang akan memperbarui tampilan Anda segera setelah data diubah dalam database, jika pendengar yang tepat sudah diatur.
yaitu

masukkan deskripsi gambar di sini

person Sahaj Rana    schedule 05.01.2017
comment
Saya juga mempertimbangkan untuk menggunakan FirebaseDatabase untuk ini. Tapi pada dasarnya saya ingin mencobanya dengan `UserProfileChangeRequest` - person dudeldidadum; 05.01.2017
comment
Semoga Anda menemukan solusinya :) - person Sahaj Rana; 05.01.2017
comment
Jika masih menimbulkan masalah coba lakukan langsung dengan ChildEventListeners - person Sahaj Rana; 05.01.2017
comment
terima kasih! Saat ini, solusi sederhana yang saya posting di atas baik-baik saja bagi saya... terima kasih atas dukungan Anda! - person dudeldidadum; 05.01.2017