Buka konsol

Mengupgrade aplikasi Android dari Firebase.com

Dokumen ini berisi panduan untuk mengupgrade aplikasi Firebase.com yang ada ke Firebase console dan API yang baru.

Ada empat langkah yang perlu dilakukan:

  1. Mengupgrade project Anda ke Firebase console yang baru
  2. Menginstal Firebase SDK yang baru
  3. Mengupdate kode database Anda
  4. Mengupdate kode autentikasi Anda

Anda dapat mengupgrade project Anda ke konsol firebase.google.com baru kapan pun Anda mau. Aplikasi Anda akan terus berfungsi. Selanjutnya, Anda dapat mengupdate kode jika sudah siap untuk menggunakan beberapa fitur Firebase baru yang ada di dalam aplikasi.

Mengimpor project Anda ke Firebase console yang baru

  • Buka Firebase console dan cari project Anda di bagian "Project yang saat ini ada di Firebase.com".
  • Klik Impor untuk project yang ingin Anda upgrade.
    • Jika project tersebut merupakan paket berbayar di firebase.com, Anda harus menyiapkan penagihan untuk project ini di konsol yang baru. Informasi penagihan Anda tidak akan dipindahkan secara otomatis
    • Pilih atau buat akun penagihan. Setelah mengimpor, akun ini bertanggung jawab atas semua tagihan dalam project tersebut.
  • Konten Realtime Database dan Hosting Anda akan langsung diimpor otomatis ke Firebase console.
  • Data pengguna Anda akan otomatis dipindahkan ke backend autentikasi yang baru. Hal ini terjadi di latar belakang, dan pengguna dapat terus menggunakan aplikasi saat data sedang dipindahkan. Pendaftaran dan login pengguna tidak akan terpengaruh. Saat sistem memindahkan akun pengguna, Anda akan melihat indikator lingkaran berputar di tab Auth dari Firebase console.
  • Jika Anda memiliki kode promo aktif untuk aplikasi Firebase.com, hubungi kami.

Menginstal Firebase SDK yang baru

Anda tidak perlu segera mengupdate kode aplikasi. Database dan kode autentikasi yang ada akan terus berfungsi pada project yang Anda pindahkan. Namun, jika Anda sudah siap untuk menggunakan beberapa fitur Firebase baru di aplikasi, Anda dapat Menginstal Firebase SDK yang baru (pastikan untuk mendownload file google-services.json yang baru, lalu tambahkan plugin google-services ke file gradle).

Perlu diperhatikan bahwa saat mulai menggunakan SDK yang baru, Google Analytics untuk Firebase akan otomatis diaktifkan. Secara default, data Analytics akan meningkatkan kualitas fitur Firebase dan produk Google lainnya. Anda dapat mengontrol pembagian data Firebase Analytics di setelan kapan saja. Pelajari lebih lanjut

Mengupdate kode database Anda

Mengupdate dependensi Gradle Anda

Cara termudah untuk memulai adalah dengan mengubah dependensi Gradle Anda:

SEBELUM

dependencies {
  compile 'com.firebase:firebase-client-android:x.x.x'
}
SESUDAH

dependencies {
  compile "com.google.firebase:firebase-database:19.2.0"
}

Memperbaiki referensi class Anda

Aplikasi Anda kemungkinan memiliki sejumlah error disebabkan class yang berganti nama atau dipindahkan. Anda harus dapat memperbaiki sebagian besar error tersebut dengan beberapa substitusi langsung:

Sebelum Sesudah
com.firebase.client com.google.firebase.database
FirebaseError DatabaseError
FirebaseException DatabaseException
Firebase.AuthStateListener FirebaseAuth.AuthStateListener
Firebase DatabaseReference

Jika Anda tidak menemukan class atau metode yang dicari, lihat di Dokumen Referensi Database.

Menyetel Konteks Android dan mengaktifkan Persistensi Offline

Di SDK baru, Anda tidak perlu lagi memanggil Firebase.setAndroidContext() jadi Anda dapat menghapusnya dari kode Anda.

Jika aplikasi Anda menggunakan persistensi disk sekarang Anda dapat mengaktifkannya melalui objek FirebaseDatabase:

SEBELUM

Firebase.getDefaultConfig().setPersistenceEnabled(true);
SESUDAH

FirebaseDatabase.getInstance().setPersistenceEnabled(true);

Seperti pada 2.x SDK, pengaktifan persistensi disk harus dilakukan sebelum panggilan lain ke database dilakukan.

Mendapatkan referensi database

Di SDK baru, Firebase referensi diganti dengan DatabaseReference dan Anda menggunakan class FirebaseDatabase untuk mendapatkan referensi awal ke database Anda. Jadi, Anda bisa mendapatkan referensi database dalam kode Anda sebagai berikut:

SEBELUM

Firebase rootRef = new Firebase("https://<your-app>.firebaseio.com/");
SESUDAH

DatabaseReference rootRef = FirebaseDatabase.getInstance().getReference();

Perlu diperhatikan bahwa URL Database Anda otomatis ditentukan dari file google-services.json yang telah didownload, sehingga Anda tidak perlu menentukannya sendiri. Jika ingin menentukannya, Anda masih dapat melakukannya (yang akan praktis jika Anda ingin melakukan migrasi):

SEBELUM

Firebase ref = new Firebase("https://<your-app>.firebaseio.com/path/to/data");
SESUDAH

DatabaseReference ref = FirebaseDatabase.getInstance()
    .getReferenceFromUrl("https://<your-app>.firebaseio.com/path/to/data");

Mengupdate objek model Java Anda

Seperti pada SDK 2.x, Firebase Database akan secara otomatis mengonversi objek Java yang Anda teruskan ke DatabaseReference.setValue() ke dalam JSON dan dapat membaca JSON ke objek Java menggunakan DataSnapshot.getValue().

Di SDK baru, saat membaca JSON ke objek Java dengan DataSnapshot.getValue(), properti yang tidak diketahui di JSON sekarang diabaikan secara default sehingga Anda tidak lagi memerlukan @JsonIgnoreExtraProperties(ignoreUnknown=true).

Untuk mengecualikan kolom/getter saat menulis objek Java ke JSON, anotasinya sekarang akan disebut @Exclude alih-alih @JsonIgnore.

SEBELUM

@JsonIgnoreExtraProperties(ignoreUnknown=true)
public class ChatMessage {
   public String name;
   public String message;
   @JsonIgnore
   public String ignoreThisField;
}

dataSnapshot.getValue(ChatMessage.class)
SESUDAH

public class ChatMessage {
   public String name;
   public String message;
   @Exclude
   public String ignoreThisField;
}

dataSnapshot.getValue(ChatMessage.class)

Jika ada properti tambahan dalam JSON yang tidak ada dalam class Java, Anda akan melihat peringatan ini dalam file log:

W/ClassMapper: No setter/field for ignoreThisProperty found on class com.firebase.migrationguide.ChatMessage

Anda dapat menghapus peringatan ini dengan meletakkan anotasi @IgnoreExtraProperties di class Anda. Jika Anda ingin Firebase Database untuk berperilaku seperti di 2.x SDK dan menampilkan pengecualian jika ada properti yang tidak dikenal, Anda dapat menempatkan anotasi @ThrowOnExtraProperties di class Anda.

Mengupdate kode autentikasi Anda

Fungsi Firebase Authentication kini berada di balik class FirebaseAuth itu sendiri, sehingga operasi autentikasi sekarang dilakukan pada instance bukan melalui referensi Firebase.

Mengupdate dependensi Gradle Anda

Karena Authentication kini berada di modulnya sendiri, Anda harus menambahkan dependensi ke build.gradle terlebih dahulu:

dependencies {
  compile 'com.google.firebase:firebase-auth:19.1.0'
}

Mengupdate impor Anda

SEBELUM

import com.firebase.client.AuthData;
SESUDAH

import com.google.firebase.auth.FirebaseAuth;
import com.google.firebase.auth.FirebaseUser;

Membuat pengguna login pengguna secara anonim

Metode autentikasi berfungsi mirip dengan cara kerja sebelumnya, tetapi kini berperan sebagai metode pada objek FirebaseAuth dengan nama baru, dan AuthData kini diganti dengan FirebaseUser. Misalnya, berikut adalah cara login berfungsi secara anonim di 2.x API dan di API yang baru:

SEBELUM

ref.authAnonymously(new Firebase.AuthResultHandler() {
   public void onAuthenticated(AuthData authData) { }
   public void onAuthenticationError(FirebaseError firebaseError) {
       throw firebaseError.toException();
   }
});
SESUDAH

FirebaseAuth auth = FirebaseAuth.getInstance();
auth.signInAnonymously().addOnFailureListener(new OnFailureListener() {
   public void onFailure(Throwable throwable) {
       throw new RuntimeException(throwable);
   }
});

Membuat agar pengguna login dengan token kustom

Melakukan autentikasi dengan token kustom pada sisi klien juga berfungsi mirip dengan sebelumnya. Berikut adalah cara login dengan token kustom berfungsi di API 2.x dan di API yang baru:

SEBELUM

ref.authWithCustomToken(AUTH_TOKEN, new Firebase.AuthResultHandler() {
   public void onAuthenticated(AuthData authData) { }
   public void onAuthenticationError(FirebaseError firebaseError) {
       throw firebaseError.toException();
   }
});
SESUDAH

FirebaseAuth auth = FirebaseAuth.getInstance();
auth.signInWithCustomToken(AUTH_TOKEN)
        .addOnCompleteListener(this, new OnCompleteListener() {
            @Override
            public void onComplete(@NonNull Task task) {
            }
        });

Token kustom yang Anda buat pada server memiliki format baru. Anda dapat menggunakan Firebase Admin SDK untuk Node.js dan Java guna membuat token kustom yang kompatibel dengan API baru, atau membuat token kustom menggunakan library JWT pihak ketiga.

Perlu diperhatikan bahwa Firebase Admin SDK menghasilkan token kustom yang akan habis masa berlakunya setelah satu jam, tidak seperti library helper untuk 2.x API, yang secara default menghasilkan token yang akan habis masa berlakunya setelah 24 jam.

Membuat pengguna login dengan penyedia media sosial

Untuk penyedia media sosial seperti Google, Facebook, atau Twitter, perubahannya sedikit lebih besar.

Alur untuk penyedia media sosial adalah sama seperti sebelumnya: pertama, Anda akan mendapatkan kredensial pengguna dari penyedia, kemudian menggunakannya untuk melakukan autentikasi dengan Firebase:

SEBELUM

ref.authWithOAuthToken(provider, token, authResultHandler);
SESUDAH

AuthCredential credential = GoogleAuthProvider.getCredential(acct.getIdToken(), null);
mAuth.signInWithCredential(credential)

Untuk informasi selengkapnya, baca dokumentasi tentang menggunakan autentikasi Facebook dengan Firebase dan menggunakan autentikasi Google dengan Firebase.

Autentikasi Twitter sedikit berbeda lagi:

SEBELUM

Map options = new HashMap<>();
options.put("oauth_token", oauth_token);
options.put("oauth_token_secret", oauth_token_secret);
options.put("user_id", user_id);
ref.authWithOAuthToken(token.provider, options, authResultHandler);
SESUDAH

AuthCredential credential = TwitterAuthProvider.getCredential(token, secret);
mAuth.signInWithCredential(credential)

Untuk mengetahui informasi lebih lanjut, baca bagian Melakukan Autentikasi Menggunakan Twitter

Membuat agar pengguna logout

SEBELUM

ref.unauth()
SESUDAH

FirebaseAuth.getInstance().signOut();

Memantau status autentikasi

SEBELUM

ref.addAuthStateListener(new Firebase.AuthStateListener() {
   @Override
   public void onAuthStateChanged(final AuthData authData) {
       if (authData != null) {
           Log.i("AuthStateChanged", "User is signed in with uid: " + authData.getUid());
       } else {
           Log.i("AuthStateChanged", "No user is signed in.");
       }
   }
});
SESUDAH

FirebaseAuth auth = FirebaseAuth.getInstance();
auth.addAuthStateListener(new FirebaseAuth.AuthStateListener() {
   @Override
   public void onAuthStateChanged(@NonNull final FirebaseAuth firebaseAuth) {
       final FirebaseUser user = firebaseAuth.getCurrentUser();
       if (user != null) {
           Log.i("AuthStateChanged", "User is signed in with uid: " + user.getUid());
       } else {
           Log.i("AuthStateChanged", "No user is signed in.");
       }
   }
});

Memindahkan login yang ada

Jika pengguna telah login ke aplikasi Anda dengan SDK lama, Anda memerlukan sedikit kode agar mereka tetap berada di dalam aplikasi dengan SDK baru. Jika tidak, mereka harus login lagi. Contoh kode open source untuk melakukan hal ini tersedia dalam repositori GitHub Helper Migrasi Firebase Auth.

Mengupdate template setel ulang sandi baru

Jika aplikasi Anda mengizinkan pengguna untuk login dengan autentikasi Email & Sandi, kemungkinan Anda juga memberikan opsi kepada pengguna ini untuk menyetel ulang sandi.

Setelah Anda melakukan upgrade ke SDK yang baru, email untuk menyetel ulang sandi tersebut akan menggunakan template baru yang ditentukan dalam Firebase console. Pastikan untuk mengupdatenya sesuai kebutuhan aplikasi Anda.

Mengupdate library Firebase Anda

Jika menggunakan salah satu library berikut, Anda harus melakukan upgrade ke versi terbaru.

Library Versi yang Didukung Resource
GeoFire 1.2.x Github