Membuat Register User dengan Firebase di Android Studio



Selamat siang Register User berguna untuk mengauthentikasi pengguna aplikasi kita, Register User biasanya terdapat pada aplikasi jejaring social ataupun ecommerce.  Register User bisa dibuat dengan menggunakan database MySQL, SQLite, MongoDB dll, tapi kali ini kita akan menggunakan Firebase, sudah disinggung sebelumnya kalau firebase ini menyediakan fungsi authentikasi yang lengkap, pada postingan sebelumnya kita telah membuat login user dengan Firebase, nah sekarang kita akan membuat form registernya. untuk membuatnya hampir sama dengan membuat form login bedanya pada register kita memasukan data user ke database kalau login hanya mencocokan data. langsung saja untuk memulainya buat dulu form registernya
 
xml version="1.0" encoding="utf-8"?>
xmlns:android="http://schemas.android.com/apk/res/android"
   
xmlns:app="http://schemas.android.com/apk/res-auto"
   
xmlns:tools="http://schemas.android.com/tools"
   
android:layout_width="match_parent"
   
android:layout_height="match_parent"
   
tools:context="com.giviews.giviewsmessenger.RegisterActivity">

           
android:id="@+id/main_page_toolbar"
       
layout="@layout/app_bar_layout"
       
android:layout_width="match_parent"
       
android:layout_height="wrap_content"
       
android:layout_marginLeft="0dp"
       
android:layout_marginTop="0dp"
       
app:layout_constraintHorizontal_bias="0.0"
       
app:layout_constraintLeft_toLeftOf="parent"
       
app:layout_constraintRight_toRightOf="parent"
       
app:layout_constraintTop_toTopOf="parent"
       
tools:ignore="NotSibling" />

           
android:id="@+id/reg_name"
       
android:layout_width="0dp"
       
android:layout_height="wrap_content"
       
android:layout_marginLeft="8dp"
       
android:layout_marginRight="8dp"
       
android:ems="10"
       
android:hint="Name ..."
       
android:inputType="textPersonName"
       
app:layout_constraintHorizontal_bias="0.0"
       
app:layout_constraintLeft_toLeftOf="parent"
       
app:layout_constraintRight_toRightOf="parent"
       
android:layout_marginStart="8dp"
       
android:layout_marginEnd="8dp"
       
android:layout_marginTop="26dp"
       
app:layout_constraintTop_toBottomOf="@+id/textView" />

           
android:id="@+id/reg_email"
       
android:layout_width="0dp"
       
android:layout_height="wrap_content"
       
android:layout_marginLeft="8dp"
       
android:layout_marginRight="8dp"
       
android:ems="10"
       
android:hint="Email ..."
       
android:inputType="textEmailAddress"
       
app:layout_constraintHorizontal_bias="0.0"
       
app:layout_constraintLeft_toLeftOf="parent"
       
app:layout_constraintRight_toRightOf="parent"
       
android:layout_marginStart="8dp"
       
android:layout_marginEnd="8dp"
       
android:layout_marginTop="8dp"
       
app:layout_constraintTop_toBottomOf="@+id/reg_name" />

           
android:id="@+id/reg_password"
       
android:layout_width="0dp"
       
android:layout_height="wrap_content"
       
android:ems="10"
       
android:hint="Password ..."
       
android:inputType="textPassword"
       
android:layout_marginTop="8dp"
       
app:layout_constraintTop_toBottomOf="@+id/reg_email"
       
android:layout_marginLeft="8dp"
       
app:layout_constraintLeft_toLeftOf="parent"
       
android:layout_marginRight="8dp"
       
app:layout_constraintRight_toRightOf="parent"
       
app:layout_constraintHorizontal_bias="0.0"
       
android:layout_marginStart="8dp"
       
android:layout_marginEnd="8dp" />

   
android:id="@+id/reg_create_btn"
       
android:layout_width="wrap_content"
       
android:layout_height="wrap_content"
       
android:text="Create Acooount"
       
android:background="@color/colorAccent"
       
android:padding="10dp"
       
android:textColor="@color/colorWhite"
       
android:layout_marginRight="8dp"
       
app:layout_constraintRight_toRightOf="parent"
       
android:layout_marginTop="16dp"
       
app:layout_constraintTop_toBottomOf="@+id/reg_password"
       
android:layout_marginEnd="8dp" />

           
android:id="@+id/textView"
       
android:layout_width="wrap_content"
        
android:layout_height="wrap_content"
       
android:layout_marginLeft="8dp"
       
android:layout_marginStart="8dp"
       
android:text="Create a New Account"
       
android:textSize="20sp"
       
android:textStyle="bold"
       
app:layout_constraintLeft_toLeftOf="parent"
       
android:layout_marginRight="8dp"
       
app:layout_constraintRight_toRightOf="parent"
       
app:layout_constraintHorizontal_bias="0.0"
       
android:layout_marginTop="26dp"
       
app:layout_constraintTop_toBottomOf="@+id/main_page_toolbar"
       
android:layout_marginEnd="8dp" />

Sambungkan projek android anda dengan firebase, kemudian buka firebase console aktifkan sigin method mengguanakan email

dan untuk script proses registernya seperti berikut, pada script berikut jika User berhasil didaftarkan maka akan diintent ke MainActivity untuk itu buat lagi Activity Main nya.
package com.giviews.giviewsmessenger;



import android.app.ProgressDialog;

import android.content.Intent;

import android.support.annotation.NonNull;

import android.support.v7.app.AppCompatActivity;

import android.os.Bundle;

import android.support.v7.widget.Toolbar;

import android.text.TextUtils;

import android.util.Log;

import android.view.View;

import android.widget.Button;

import android.widget.EditText;

import android.widget.Toast;



import com.google.android.gms.tasks.OnCompleteListener;

import com.google.android.gms.tasks.Task;

import com.google.firebase.auth.AuthResult;

import com.google.firebase.auth.FirebaseAuth;

import com.google.firebase.auth.FirebaseAuthInvalidCredentialsException;

import com.google.firebase.auth.FirebaseAuthUserCollisionException;

import com.google.firebase.auth.FirebaseAuthWeakPasswordException;

import com.google.firebase.auth.FirebaseUser;

import com.google.firebase.database.DatabaseReference;

import com.google.firebase.database.FirebaseDatabase;

import com.google.firebase.iid.FirebaseInstanceId;



import java.util.HashMap;



public class RegisterActivity extends AppCompatActivity {



    private EditText mDisplayName;

    private EditText mEmail;

    private EditText mPassword;

    private Button mCreateBtn;

    private Toolbar mToolbar;

    private ProgressDialog mProgress;



    private FirebaseAuth mAuth;

    private DatabaseReference mDatabase;



    @Override

    protected void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);

        setContentView(R.layout.activity_register);



        mAuth = FirebaseAuth.getInstance();

        mDatabase = FirebaseDatabase.getInstance().getReference().child("Users");

        mToolbar = (Toolbar) findViewById(R.id.main_page_toolbar);

        setSupportActionBar(mToolbar);

        getSupportActionBar().setTitle("Register");

        getSupportActionBar().setDisplayHomeAsUpEnabled(true);



        mDisplayName = (EditText) findViewById(R.id.reg_name);

        mEmail = (EditText) findViewById(R.id.reg_email);

        mPassword = (EditText) findViewById(R.id.reg_password);

        mCreateBtn = (Button) findViewById(R.id.reg_create_btn);

        mProgress = new ProgressDialog(this);



        mCreateBtn.setOnClickListener(new View.OnClickListener() {

            @Override

            public void onClick(View view) {

                String displayname = mDisplayName.getText().toString().trim();

                String email = mEmail.getText().toString().trim();

                String password = mPassword.getText().toString().trim();



                if (!TextUtils.isEmpty(displayname) && !TextUtils.isEmpty(email) && !TextUtils.isEmpty(password)) {

                    mProgress.setTitle("Registering User");

                    mProgress.setMessage("Please wait while we create your account...");

                    mProgress.setCanceledOnTouchOutside(false);

                    mProgress.show();



                    register_user(displayname, email, password);

                }

            }

        });

    }



    private void register_user(final String displayname, String email, String password) {

        mAuth.createUserWithEmailAndPassword(email, password)

                .addOnCompleteListener(this, new OnCompleteListener() {

                    @Override

                    public void onComplete(@NonNull Task task) {



                        // If sign in fails, display a message to the user. If sign in succeeds

                        // the auth state listener will be notified and logic to handle the

                        // signed in user can be handled in the listener.

                        if (!task.isSuccessful()) {

                            mProgress.hide();



                            String error = "";

                            try {

                                throw task.getException();

                            } catch (FirebaseAuthWeakPasswordException e) {

                                error = "Weak Password";

                            } catch (FirebaseAuthInvalidCredentialsException e) {

                                error = "Invalid Email";

                            } catch (FirebaseAuthUserCollisionException e) {

                                error = "Existing account";

                            } catch (Exception e) {

                                error = "Unknown Error!";

                                e.printStackTrace();

                            }

                            Toast.makeText(getApplicationContext(), error, Toast.LENGTH_SHORT).show();

                        }else {

                            FirebaseUser currentUser = mAuth.getCurrentUser();

                            String uid = currentUser.getUid();



                            mDatabase = FirebaseDatabase.getInstance().getReference().child("Users").child(uid);

                            String device_token = FirebaseInstanceId.getInstance().getToken();



                            HashMap, String> userMap = new HashMap, String>();

                            userMap.put("name", displayname);

                            userMap.put("status", "Hi there, I'm using giviews");

                            userMap.put("image", "default");

                            userMap.put("thumb_image", "default");

                            userMap.put("device_token", device_token);



                            mDatabase.setValue(userMap).addOnCompleteListener(new OnCompleteListener() {

                                @Override

                                public void onComplete(@NonNull Task task) {

                                    mProgress.dismiss();

                                    Intent mainIntent = new Intent(RegisterActivity.this, MainActivity.class);

                                    mainIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK);

                                    startActivity(mainIntent);

                                }

                            });



                        }

                    }

                });

    }

}

Kemudian pada MainActivity buat sebuah textview dengan tulisan Selamat Anda berhasil mendaftar untuk memastikan user berhasil didaftarkan
untuk melihat user sudah berhasil mendaftar silakan lihat pada firebase console pada bagian authentication
Ok Sekianlah tutorial kali ini jika ada yang kurang jelas silakan ditanyakan pada komentar dibawah

Contoh Soal Oracle beserta jawabanya

Assalamualaikum Wr.Wb. Sudah lama admin tidak membuat artikel baru dikarenakan sibuk dengan urusan pekerjaan perpanjangan kontrak. Pada kesempatan kali ini admin akan membagikan contoh soal latihan Oracle Database beserta cara penyelesainaya. Soal ini berdasarkan pengalaman Saya di perkuliahan, jawaban ini hanya sharing jadi bila ada kesalahan mohon di koreksi.


Jawab :

  1. Schema
CREATE USER tugas_bd3_1501110039 IDENTIFIED BY stikomcki;

  2. Normalisasi Tabel
tabel berobat_1501110039
*no_berobat
tgl_berobat
-kd_pasien
-kd_sakit
-kd_dokter
keterangan

tabel berobat_detail_1501110039
-no_berobat
-kd_obat

tabel obat_1501110039
*kd_obat
nm_obat
-kd_dosis

tabel dosis_1501110039
*kd_dosis
nm_dosis

tabel dokter_1501110039
*kd_dokter
nm_dokter

tabel sakit_1501110039
*kd_sakit
deskripsi_sakit

tabel pasien_1501110039
*kd_pasien
nm_pasien
no_ktp
tempat_lahir
tgl_lahir
alamat
kelurahan
kecamatan
wilayah
kode_pos
telp

keterangan:
* = primary key

-  = foreign key

  3. Relasi


4. View
create view v_pasien as select * from pasien_1501110039;
create view v_dosis as select * from dosis_1501110039;
create view v_obat as select * from obat_1501110039;
create view v_detail as select * from berobat_detail_1501110039;
create view v_dokter as select * from dokter_1501110039;
create view v_berobat as select * from berobat_1501110039;
create view v_sakit as select * from sakit_1501110039;


5.Procedure
create or replace procedure insertPasien(
kd_pasien in pasien_1501110039.kd_pasien%TYPE,
nm_pasien in pasien_1501110039.nm_pasien%TYPE,
no_ktp in pasien_1501110039.nm_pasien%TYPE,
tempat_lahir in pasien_1501110039.nm_pasien%TYPE,
tgl_lahir in pasien_1501110039.nm_pasien%TYPE,
alamat in pasien_1501110039.nm_pasien%TYPE,
kelurahan in pasien_1501110039.nm_pasien%TYPE,
kecamatan in pasien_1501110039.nm_pasien%TYPE,
wilayah in pasien_1501110039.nm_pasien%TYPE,
kode_pos in pasien_1501110039.nm_pasien%TYPE,
telp in pasien_1501110039.nm_pasien%TYPE
)
is
begin
insert into pasien_1501110039 (kd_pasien,nm_pasien,no_ktp,tempat_lahir,tgl_lahir,alamat,kelurahan,kecamatan,wilayah,kode_pos,telp)
values (kd_pasien,nm_pasien,no_ktp,tempat_lahir,tgl_lahir,alamat,kelurahan,kecamatan,wilayah,kode_pos,telp);
commit;
end;
/

create or replace procedure insertSakit(
kd_sakit in sakit_1501110039.kd_sakit%TYPE,
deskripsi_sakit in sakit_1501110039.deskripsi_sakit%TYPE)
is
begin
insert into sakit_1501110039
(kd_sakit,deskripsi_sakit)
values
(kd_sakit,deskripsi_sakit);
commit;
end;
/
 
create or replace procedure insertDokter(
kd_dokter in dokter_1501110039.kd_dokter%TYPE,
nm_dokter in dokter_1501110039.nm_dokter%TYPE)
is
begin
insert into dokter_1501110039
(kd_dokter,nm_dokter)
values
(kd_dokter,nm_dokter);
commit;
end;
/

create or replace procedure berobat(
no_berobat in berobat_1501110039.no_berobat%TYPE,
tgl_berobat in berobat_1501110039.tgl_berobat%TYPE,
kd_pasien in berobat_1501110039.kd_pasien%TYPE,
kd_sakit in berobat_1501110039.kd_sakit%TYPE,
kd_dokter in berobat_1501110039.kd_dokter%TYPE,
keterangan in berobat_1501110039.keterangan%TYPE)
is
begin
insert into berobat_1501110039
(no_berobat,tgl_berobat,kd_pasien,kd_sakit,kd_dokter,keterangan)
values
(no_berobat,tgl_berobat,kd_pasien,kd_sakit,kd_dokter,keterangan);
commit;
end;
/

create or replace procedure insertDosis(
kd_dosis in dosis_1501110039.kd_dosis%TYPE,
nm_dosis in dosis_1501110039.nm_dosis%TYPE)
is
begin
insert into dosis_1501110039
(kd_dosis,nm_dosis)
values
(kd_dosis,nm_dosis);
commit;
end;
/

create or replace procedure insertObat(
kd_obat in obat_1501110039.kd_dosis%TYPE,
nm_obat in obat_1501110039.kd_dosis%TYPE,
kd_dosis in obat_1501110039.kd_dosis%TYPE)
is
begin
insert into obat_1501110039
(kd_obat,nm_obat,kd_dosis)
values
(kd_obat,nm_obat,kd_dosis);
commit;
end;
/

create or replace procedure insertDetail(
no_berobat in berobat_detail_1501110039.no_berobat%TYPE,
kd_obat in berobat_detail_1501110039.kd_obat%TYPE)
is
begin
insert into berobat_detail_1501110039
(no_berobat,kd_obat)
values
(no_berobat,kd_obat);
commit;
end;
/

6. Menjalankan Procedure
execute berobat('BR001','20012018','P001','S003','D004','rawat jalan');

execute berobat('BR002','20012018','P002','S005','D008','rawat inap');

execute insertDokter('D001','dr. Juniar, SpKj');

execute insertSakit('S001','sakit Kepala');

execute insertDosis('DS001','3x1 hari');

execute insertDosis('DS002','1/2 sendok teh');

execute insertObat('OB001','Parasetamol','DS001');

execute insertDetail('BR001','OB004');

execute insertPasien('P001','Nina N','3101099988','Tasikmalaya','090295','Kedoya','kebayoran lama','jakarta utara','DKI Jakarta','13420','98000012');

execute insertPasien('P002','Ani Doe','32051099988','Tasikmalaya','090295','Cikini','Gondangdia','jakarta Pusat','DKI Jakarta','13420','6285700291');

execute insertPasien('P003','Sena','32051099999','Tasikmalaya','090290','Dukuh Atas','Gondangdia','jakarta Pusat','DKI Jakarta','13420','628570022');

execute insertPasien('P004','Andri','32051092399','Jakarta','200678','Dukuh Atas','Gambir','jakarta Pusat','DKI Jakarta','13420','628570022');

7. Table Log
create table history_pasien(kd_pasien char(6), nm_pasien varchar2(30), no_ktp number, tempat_lahir varchar2(30), tgl_lahir char(6), alamat varchar2(30), kelurahan varchar2(30), kecamatan varchar2(30), wilayah varchar(30), kode_pos char(6), telp number, jenis_aksi varchar(6), aksi_tgl date);

8. Trigger
create or replace trigger tr_pasien
after insert
on pasien_1501110039
for each row
begin
insert into history_pasien values (
:NEW.kd_pasien,
:NEW.nm_pasien,
:NEW.no_ktp,
:NEW.tempat_lahir,
:NEW.tgl_lahir,
:NEW.alamat,
:NEW.kelurahan,
:NEW.kecamatan,
:NEW.wilayah,
:NEW.kode_pos,
:NEW.telp,
'AFTER',
SYSDATE
);
END;
/

create or replace trigger tr_pasien_before
before insert
on pasien_1501110039
for each row
begin
insert into history_pasien values (
:NEW.kd_pasien,
:NEW.nm_pasien,
:NEW.no_ktp,
:NEW.tempat_lahir,
:NEW.tgl_lahir,
:NEW.alamat,
:NEW.kelurahan,
:NEW.kecamatan,
:NEW.wilayah,
:NEW.kode_pos,
:NEW.telp,
'BEFORE',
SYSDATE
);
END;
/



Ok sekianlah dari contoh soal oracle dan jawaban kali ini, semoga bermanfaat untuk sorce code lengkapnya bisa anda download pada tautan berikutini 

Cara Mengkoneksikan Projek Android dengan Firebase

Pada kesmpatan kali ini kita akan membhasas cara mengkoneksikan projek kita ke firebase menggunakan firebase assistant, jika anda belum mengenal firebase anda bisa berkenalan dulu dengan firebase disini, sebenarnya ada du acara untuk menyambungkan projek android ke firebase yang pertama adalah cara manual jadi kita perlu mendownload google service .json dan memasukan key SHA1 namun cara yang pertama ini ribet karena harus mendownload file json dan memindahkanya pada projek kita jadi yang akan kita bahas kali ini adalah cara yang kedua menggunakan firebase assistant karena cara ini lebih simple.

Langkah pertama sambungkan PC/Notebook anda ke internet, pastikan akun google anda sudah mendaftar ke firebase di https://firebase.google.com/
buka projek android anda kemudian klik tools lalu pilih Firebase

akan muncul Firebase Assistant seperti pada gambar -> pilih fitur yang diinginkan misalnya realtime database, kemudian klik Connect to Firebase

akan muncul dialog connecting to Firebase, jika anda belum memilih project anda akan diredirect ke browser untuk login dan membuat project baru di firebase, jika anda sudah membuat project baru anda akan disuguhkan pilihan untuk memilih projek mana yang akan disambungkan
jika sudah dipilih akan muncul tulisan connected warna hijau

sekarang klik add the realtime database to your app -> kemudian klik accept changes maka firebase assistant akan menambahkan despendency ke build.gradle secara otomatis. kemudian gradle akan menyinkronkan secara otomatis, tunggu hingga sinkronisasi gradle selesai. kemudian akan ada tulisan despendecies set up correctly sampai disini anda sudah berhasil mengkoneksikan projek android ke database sekarang anda sudah bisa menggunakan database firebase untuk menyimpan data aplikasi anda seperti membuat crud. anda juga bisa menambahkan beberapa layanan firebase lainya seperti authentication atau storage, caranya sama tinggal klik authentication add firebase authentication to your app -> accept changes.


pada postingan selanjutnya kita akan membuat CRUD dengan meggunakan Firebase, terimakasih sudah berkunjung, jika ada yang kurang jelas silakan tanyakan pada kolom komentar dibawah, jika artikel ini bermanfaat silakan di share

Berkenalan dengan Firebase


Pada kesempatan kali ini kita akan membahas mengenai firebase, sebelum kita menggunakanya alangkah baiknya kita mengenal dulu. Apa itu Firebase? Firebase adalah layanan real time database yang dibuat oleh google. dengan Firebase kita dimudahkan dalam pengembangan aplikasi kita tidak perlu repot-repot membuat server database sendiri. kita tinggal focus pada pengembangan aplikasi kita, karena urusan penyimpanannya kita serahkan pada firebase. Firebase memiliki layanan yang gratis dan berbayar. untuk pembelajaran kita cukup menggunakan layanan yang gratis saja, jika layanan yang berbayar harganya tergantung sesuai pemakaian kita.

Firebase mendukung fitur realtime database yang memungkinkan kita menyimpan data tanpa melakukan refresh halaman, firebase ini bekerja secara assynchonous. fitur ini cocok untuk membuat aplikasi chat, selain itu banyak kelebihan firebase diantaranya fitur authentikasi yang lengkap, bisa menyimpan file, kita juga bisa membuat cache pada aplikasi kita jadi jika sedang offline aplikasi kita bisa tetap menampilkan data.

Firebase juga bisa digunakan oleh beberpa platform dan Bahasa pemrograman seperti mobile platform, web/desktop, dan game. untuk mobile firebase bisa digunakan oleh ios dan android. untuk web firebase bisa dihubungkan dengan angularjs/nodejs untuk game firebase bisa disandingkan dengan unity dan mendukung Bahasa pemrograman C++, java, Objective C, karena berbasis API, jadi jika anda sedang mengembangkan program untuk mobile atau website ataupun game anda bisa menggunakan firebase untuk databasenya.

Sejarah Firebase
Sebelum mebahas firebase lebih jauh mari kita lihat sejarahnya terlebih dahulu, Firebase bersevolusi dari Envolve, startup yang didirikan oleh James Tamplin dan Andrew Lee di tahun 2011. Envolve menyediakan pengembang sebuah API yang memungkinkan integrasi fungsi obrolan online ke dalam situs web mereka. Setelah merilis layanan obrolan, Tamplin dan Lee menemukan bahwa itu digunakan untuk melewatkan data aplikasi yang bukan pesan chat. Pengembang menggunakan Envolve untuk menyinkronkan data aplikasi seperti status game secara real time di seluruh pengguna mereka. Tamplin dan Lee memutuskan untuk memisahkan sistem obrolan dan arsitektur real-time yang mendukungnya. Mereka mendirikan Firebase sebagai perusahaan terpisah pada bulan April 2012.

Firebase Inc. meningkatkan pendanaan benih pada bulan Mei 2012. Perusahaan tersebut selanjutnya mengumpulkan dana Seri A pada bulan Juni 2013. Pada bulan Oktober 2014, Firebase diakuisisi oleh Google. Pada bulan Oktober 2015, Google mengakuisisi Divshot untuk menggabungkannya dengan tim Firebase. Sejak akuisisi tersebut, Firebase telah berkembang di dalam Google dan memperluas layanan mereka untuk menjadi platform terpadu bagi pengembang seluler. Firebase sekarang terintegrasi dengan berbagai layanan Google lainnya untuk menawarkan produk dan skala yang lebih luas bagi pengembang. Pada bulan Januari 2017, Google mengakuisisi Fabric dan Crashlytics dari Twitter untuk bergabung dengan layanan tersebut ke tim Firebase.Menurut laporan tersebut, Firebase akan meluncurkan Cloud Firestore, Document Database, pada bulan Oktober 2017.

Layanan yang ada di Firebase
·         Analytics
berfungsi untuk menganisis aplikasi gratis yang memberi wawasan tentang penggunaan aplikasi dan keterlibatan pengguna
·         Cloud Messaging
berfungsi untuk mengirimkan pesan dan notifikasi untuk android, ios dan aplikasi web
·         Authentication
berfungsi untuk mengatur authentikasi pengguna aplikasi kita, fitur authentikasi di firebase sangat lengkap bisa authentikasi melalui no handphone, email, google accout, facebook, twitter, github bahkan secara anonymus juga bisa
·         Realtime Database
Layanan ini menyediakan pengembang aplikasi API yang memungkinkan data aplikasi disinkronkan ke klien dan disimpan di awan Firebase
·         Storage
Firebase Storage menyediakan upload dan download file yang aman untuk aplikasi Firebase, terlepas dari kualitas jaringannya. Pengembang dapat menggunakannya untuk menyimpan gambar, audio, video, atau konten buatan pengguna lainnya. Penyimpanan Firebase didukung oleh Google Cloud Storage
·         Remote Config
Remote Config adalah layanan awan yang memungkinkan pengembang mengubah perilaku dan tampilan apl mereka tanpa mengharuskan pengguna mengunduh pembaruan aplikasi
·         Test Lab
berfungsi untuk mengetes aplikasi kita di perangkat lainya, pengetesanya pada perangkat asli yang dihosting di google cloud
·         Crash Reporting
untuk memberi tahu jika aplikasi kita ada yang error/ membuat laporan rinci tentang kesalahan di aplikasi
·         App Indexing
untuk mengideks aplikasi kita pada google search
·         Dynamic Links
membuat link dinamis, seperti shot URL pada aplikasi kita selengkapnya mengenai dynamic link bisa dilihat pada tautan berikut https://firebase.google.com/docs/dynamic-links/?utm_source=studio
·         Invites
berfungsi untuk mengundang teman melalui sms/ email
·         Admob
berfungsi untuk memasang  iklan admob di aplikasi kita, admob yang dipasang disini merupakan admob yang  terintegrasi  dengan firebase


Ok, sekianlah pembahasan mengenai firebase kali ini kedepanya kita akan menyambungkan projek kita dengan firebase. jika ada yang ditanyakan silakan tuliskan dikomentar, jika aplikasi ini bermanfaat silakan di share