SlideShare uma empresa Scribd logo
1 de 53
Baixar para ler offline
Kenalan dengan Firebase
(Firebase Android Codelab)
Diterjemahkan
oleh
Agus Haryanto
http://agusharyanto.net
1
Daftar Isi
Pendahuluan......................................................................................................................................... 3
Import Project android-start................................................................................................................. 4
Buat project di Firebase Console..........................................................................................................6
Run Starter Aplikasi............................................................................................................................11
Enable Authentication........................................................................................................................ 12
Konfigurasi Authentication APIs........................................................................................................13
Activate Firebase Realtime Database.................................................................................................19
Send Messages....................................................................................................................................26
Receive Reengagement Notifcations..................................................................................................30
Remotely Configure Friendly Message Length................................................................................. 36
Send Install Invites............................................................................................................................. 43
Track User Flows................................................................................................................................45
Monetize With Ads.............................................................................................................................47
Report Crashes....................................................................................................................................50
Summary.............................................................................................................................................52
Referensi.............................................................................................................................................53
Lain-lain............................................................................................................................................. 53
2
Pendahuluan
Salah satu yang lagi trend di mata developer android adalah firebase, yah firebase memang
istimewa dengan segala kelebihan yang dipunyai. Disini Google tampak tidak mau kalah dalam era
dimana developer dalam membangun aplikasi tidak perlu lagi memikirkan infrastruktur
backendnya.
Untuk mempelajarinya tidak sulit di web firebasenya sendiri sudah ada petunjuknya dan menurut
saya cukup mudah untuk diikuti. Jika tertarik bisa ke link ini
https://codelabs.developers.google.com/codelabs/firebase-android/#0
Tapi kalau masih kesulitan juga mengikuti petunjuknya. Saya coba buatkan versi bahasa
indonesianya yang semoga dapat membantu kita dalam mengenal firebase karena berawal dari
perkenalanlah rasa suka dan cinta itu akan datang (Disini saya hanya berusaha menterjemahkan
kedalam bahasa indonesia dan menambahkan beberapa gambar screen shoot untuk lebih
memperjelas). Mari kita mulai.
Pada project kali ini kita akan buat aplikasi Friendly Chat. Tenang saja kita sudah sedikan code
labnya jadi dari code lab ini kita akan kembangkan dengan menggunakan fitur-fitur yang ada di
firebase. Disini kita akan mengimplementasikan aplikasi chat client dan dapat digunakan untuk
memonitor performance menggunakan firebase.
Apa yang akan kita pelajari.
1. Mengijinkan user untuk Sign in
2. Sync data dengan menggunakan Firebase Realtime Database
3. Menerima message secara background dengan Firebase Notifictions
4. Mengkonfigure config Aplikasi dengan menggunakan Firebase Remote Config
5. Track Flow penggunaan aplikasi dengan Firebase Analytics
6. Mengijinkan pengguna untuk mengirim undangan untuk menginstall dengan Firebase Invites
7. Menampilkan iklan dengan AdMob.
8. Menampilkan Laporan Kesalahan Aplikasi dengan Firebase Crash Reporting
9. Test Aplikasi mu dengan Firebase Test Lab.
Apa yang kita butuhkan.
1. Adroid studio version 2.0
2. sample code
3. A test device dengan Android 2.3 dan Google Play Services 9.0 atau versi yang lebih baru.
4. Kabel data.
Sekarang mari kita mulai langkahnya
Dapatkan / Download source codelabnya.
Yang pakai linux atau Mac OS bisa langsung ketik melalui terminal
$ git clone https://github.com/firebase/friendlychat
Lalu enter maka akan menkloning sourcenya dari github ke komputerkita
Aguss-MacBook-Pro:firebase agus$ git clone https://github.com/firebase/friendlychat
Cloning into 'friendlychat'...
remote: Counting objects: 1671, done.
remote: Compressing objects: 100% (9/9), done.
remote: Total 1671 (delta 0), reused 0 (delta 0), pack-reused 1657
3
Receiving objects: 100% (1671/1671), 843.56 KiB | 140.00 KiB/s, done.
Resolving deltas: 100% (765/765), done.
Checking connectivity... done.
Aguss-MacBook-Pro:firebase agus$
Kalau belum install git. Bisa download langung disini https://github.com/firebase/friendlychat klik
tombol Clone or Download
Jika berhasil maka akan terlihat direktory friendlychat yang didalamnya ada dua directory khusus
android.
android-start Code awal untuk belajar firebase
android Code lengkap hasil belajar firebase
Import Project android-start
2. Selanjutnya kita mulai dengan mengopen project android-start dengan android studio.
4
Pilih Klik Don’t remind me again for this project dan Add root maka projectnya akan terbuka
5
Buat project di Firebase Console
4. Buat project di Firebase Console untuk itu anda harus login dengan email gmail.
Klik Create New Project, berinama dengan “FriendlyChat”
6
Klik CREATE PROJECT Maka secara otomatis project akan terbuat
- Klik Add Firebase to your Android app
- pada package name “com.google.firebase.codelab.friendlychat”
- Isi Sha1 caranya dari terminal ketikkan
keytool -exportcert -alias androiddebugkey -keystore ~/.android/debug.keystore -list -v
-storepass android
Hasilnya
[Aguss-MacBook-Pro:firebase agus$ keytool -exportcert -alias androiddebugkey -keystore ~/.android/debug.keystore -list -v
-storepass android
7
Alias name: androiddebugkey
Creation date: Mar 19, 2015
Entry type: PrivateKeyEntry
Certificate chain length: 1
Certificate[1]:
Owner: CN=Android Debug, O=Android, C=US
Issuer: CN=Android Debug, O=Android, C=US
Serial number: 269f9b45
Valid from: Thu Mar 19 07:54:20 WIB 2015 until: Sat Mar 11 07:54:20 WIB 2045
Certificate fingerprints:
MD5: 2A:19:B3:B8:09:F1:10:EC:D2:71:CD:DB:D1:2A:D1:41
SHA1: 4F:64:87:92:16:74:B5:7D:70:D1:F0:DE:70:12:48:5E:7A:22:94:32
SHA256: 7E:3E:45:AE:78:B8:E3:E9:75:F1:A6:20:0F:9D:D5:36:AB:18:63:00:43:98:44:57:8E:B4:04:51:62:F1:73:E1
Signature algorithm name: SHA256withRSA
Version: 3
- Klik ADD APP
8
- Copy google-services.json yang terdownload otomatis ke project kita letaknya seperti diatas yaitu
pada directory app
- Kembali ke jendela console klik continue
9
Kita harus tambahkan konfigurasi diatas pada script gradle kita. Tapi tenang di source codelab ini
sudah ditambahkan jadi kita tidak perlu menambahkannya lagi. Silahkan dilihat di codenya
10
Run Starter Aplikasi
5. Saatnya untuk me Run App ini. Hasilnya masih belum ada message dalam list.
11
Enable Authentication
6. Enable Authentication.
Mari kita haruskan user untuk sign in agar dapat membaca atau mempost message di Friendly Chat
Akses Firebase Database lalu atur rulesnya dengan menggunakan format JSON.
Masuk ke Firebase Console, pilih Database lalu piih tab Rules maka akan terlihat seperti ini.
12
Konfigurasi Authentication APIs
Sebelum aplikasimu dapat mengakses Firebase Authentication APIs berdasarkan usermu, kamu
harus mengenablenya.
Caranya Masuk ke Firebase Console lalu pilih Auth lalu pilih Sign In Method lalu Set Enable
pada baris Google dengan cara klik baris tersebut lalu pada Jendela dialog Google pilih Enable lalu
klik Save
13
14
Add Firebase Auth dependency
Untuk menambahkan kode firebase-auth ke project kita terlebih dulu kita harus menambahkan
library firebase auth ke dependency pada file app/build.gradle
app/build.gradle
compile 'com.google.firebase:firebase-auth:9.2.1'
Tapi tenang saja ternyata ini juga sudah ada dicodelab kita jadi tidak perlu menambahkannya.
- Edit class MainActivity lalu tambahkan Auth instance Variables
MainActivity.java (instance variable)
// Firebase instance variables
private FirebaseAuth mFirebaseAuth;
15
private FirebaseUser mFirebaseUser;
Check for current user
Masih pada MainActivity.java tambahkan script agar user ke layar sign-in apabila mereka buak
aplikasi tetapi belum melakukan autentikasi.
Pada method onCreate setelah mUsername diinisialiasi tambahkan script berikut
MainActivity.java
// Initialize Firebase Auth
mFirebaseAuth = FirebaseAuth.getInstance();
mFirebaseUser = mFirebaseAuth.getCurrentUser();
if (mFirebaseUser == null) {
// Not signed in, launch the Sign In activity
startActivity(new Intent(this, SignInActivity.class));
finish();
return;
} else {
mUsername = mFirebaseUser.getDisplayName();
if (mFirebaseUser.getPhotoUrl() != null) {
mPhotoUrl = mFirebaseUser.getPhotoUrl().toString();
}
}
Kemudian pada method onOptionsItemSelected() tambahkan case untuk menangani Sign out
Button
MainActivity.java
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case R.id.sign_out_menu:
mFirebaseAuth.signOut();
Auth.GoogleSignInApi.signOut(mGoogleApiClient);
mUsername = ANONYMOUS;
startActivity(new Intent(this, SignInActivity.class));
return true;
default:
return super.onOptionsItemSelected(item);
}
}
16
Sekarang kita sudah punya semua logika yang tepat untuk mengirim user ke Layar Sign-In ketika
diperlukan. Selanjutnya kita harus menambahkan script untuk autetukasi user di layar Sign-In
Implement the Sign-In screen
Buka file SignInActivity.java . Disini ada sebuah buttin Sign-In yang digunakan untuk
menginisialisasi autentikasi, Pada langkah ini kita implement logic sign in ke Firebase dengan
Menggunakan Google Acccount.
Tambahkan Auth instance variables pada class SignInActivity
SignInActivity.java
// Firebase instance variables
private FirebaseAuth mFirebaseAuth;
Kemudian pada method onCreate () tambahkan script untuk inisiliasi Firebase
SignInActivity.java
// Initialize FirebaseAuth
mFirebaseAuth = FirebaseAuth.getInstance();
Selanjutnya, Inisialisasi sugning in dengan Google. Update SignInActivity’s onClick method agar
terlihat seperti ini
SignInActivity.java
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.sign_in_button:
signIn();
break;
}
}
Tambahkan methid signIn yang akan membuat user sign in dengan Goggle Sign In UI.
SignInActivity.java
/private void signIn() {
Intent signInIntent = Auth.GoogleSignInApi.getSignInIntent(mGoogleApiClient);
startActivityForResult(signInIntent, RC_SIGN_IN);
}
Selanjutnya, tangani hasil kembalian dari Google Sign In, tambahkan method onActivityResult
untuk menangani hasil signin. Ketika hasilnya sukses, maka account digunakan untuk autentikasi ke
firebase.
SignInActivity.java
@Override
17
public void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
// Result returned from launching the Intent from
GoogleSignInApi.getSignInIntent(...);
if (requestCode == RC_SIGN_IN) {
GoogleSignInResult result =
Auth.GoogleSignInApi.getSignInResultFromIntent(data);
if (result.isSuccess()) {
// Google Sign In was successful, authenticate with Firebase
GoogleSignInAccount account = result.getSignInAccount();
firebaseAuthWithGoogle(account);
} else {
// Google Sign In failed
Log.e(TAG, "Google Sign In failed.");
}
}
}
Tambahkan method firebaseAuthWithGoogle untuk autentikasi dengan Google Account
SignInActivity.java
private void firebaseAuthWithGoogle(GoogleSignInAccount acct) {
Log.d(TAG, "firebaseAuthWithGooogle:" + acct.getId());
AuthCredential credential = GoogleAuthProvider.getCredential(acct.getIdToken(),
null);
mFirebaseAuth.signInWithCredential(credential)
.addOnCompleteListener(this, new OnCompleteListener<AuthResult>() {
@Override
public void onComplete(@NonNull Task<AuthResult> task) {
Log.d(TAG, "signInWithCredential:onComplete:" +
task.isSuccessful());
// 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()) {
Log.w(TAG, "signInWithCredential", task.getException());
Toast.makeText(SignInActivity.this, "Authentication
failed.",
Toast.LENGTH_SHORT).show();
} else {
18
startActivity(new Intent(SignInActivity.this,
MainActivity.class));
finish();
}
}
});
}
Itu saja ! Kita telah megimplementasikan autentikasi ke firebase dengan menggunakan Google
Account tanpa harus menangani konfigurasi di sisi server
Test Aplikasi.
Run aplikasinya. Maka kita akan langsung ke layar SignIn. Sentuh button Google Sign In. jika
sukses maka kita akan pindah ke layar chat message.
Activate Firebase Realtime Database
7.Activate Firebase Realtime Database
Import Messages ke database
1. Pada Firebase console pilih database
2. Pada menu di database pilih Import JSON
3. Browse ke file initial_message.json yang ada root directory FriendlyChat, kli file
tersebut
4. Click Import
19
20
Note: Aksi Import ini akan mereplace semua data yang ada pada database
Setelah berhasil diimport maka datanya pada database akan sepeti ini.
21
- Add Firebase Realtime Database dependency
Pada blok dependecies di file app/build.gradle tambahkan library untuk firebase database. Tapi
tenang saja di sourcecode kita sudah ada jadi tidak perlu menambahkannya.
compile 'com.google.firebase:firebase-database:9.2.1'
- Synchronize messages
tambagkan code untuk synkronisasi messages yang baru ditambahkan ke Applikasi.
Inisialisasi Firebase Realtime Database dan tambahkan sebuah listener untuk menangani perubahan
data. Update RecyclerView adapter untuk menampilkan pesan baru.
tambahkan sebuah Database instance variables pada class MainActivity
MainActivity.java
// Firebase instance variables
private DatabaseReference mFirebaseDatabaseReference;
private FirebaseRecyclerAdapter<FriendlyMessage, MessageViewHolder>
22
mFirebaseAdapter;
Pada class MainActivity edit method onCreate, ganti
mProgressBar.setVisibility(ProgressBar.INVISIBLE);
dengan code dibawah ini. Code ini akan menambahkan semua pesan kemudian memonitor pakah
ada message baru pada Firebase Relatime Database. Ini menambahkan semua elemen ke UI untuk
setiap message.
MainActivity.java
// New child entries
mFirebaseDatabaseReference = FirebaseDatabase.getInstance().getReference();
mFirebaseAdapter = new FirebaseRecyclerAdapter<FriendlyMessage,
MessageViewHolder>(
FriendlyMessage.class,
R.layout.item_message,
MessageViewHolder.class,
mFirebaseDatabaseReference.child(MESSAGES_CHILD)) {
@Override
protected void populateViewHolder(MessageViewHolder viewHolder,
FriendlyMessage friendlyMessage, int position) {
mProgressBar.setVisibility(ProgressBar.INVISIBLE);
viewHolder.messageTextView.setText(friendlyMessage.getText());
viewHolder.messengerTextView.setText(friendlyMessage.getName());
if (friendlyMessage.getPhotoUrl() == null) {
viewHolder.messengerImageView
.setImageDrawable(ContextCompat
.getDrawable(MainActivity.this,
R.drawable.ic_account_circle_black_36dp));
} else {
Glide.with(MainActivity.this)
.load(friendlyMessage.getPhotoUrl())
.into(viewHolder.messengerImageView);
}
}
};
mFirebaseAdapter.registerAdapterDataObserver(new RecyclerView.AdapterDataObserver() {
@Override
public void onItemRangeInserted(int positionStart, int itemCount) {
super.onItemRangeInserted(positionStart, itemCount);
int friendlyMessageCount = mFirebaseAdapter.getItemCount();
23
int lastVisiblePosition =
mLinearLayoutManager.findLastCompletelyVisibleItemPosition();
// If the recycler view is initially being loaded or the
// user is at the bottom of the list, scroll to the bottom
// of the list to show the newly added message.
if (lastVisiblePosition == -1 ||
(positionStart >= (friendlyMessageCount - 1) &&
lastVisiblePosition == (positionStart - 1))) {
mMessageRecyclerView.scrollToPosition(positionStart);
}
}
});
mMessageRecyclerView.setLayoutManager(mLinearLayoutManager);
mMessageRecyclerView.setAdapter(mFirebaseAdapter);
Test message sync
1. click Run, Jika semua lancar maka semua message yang ada pada database akan terlihat
24
2. Tambahkan message baru langsung di Firebase Databse Console. Pastikan pesan barunya muncul
di Aplikasi kita (Friendly-Chat UI).
Cara menambahkan message baru di database.
- Pada bagian Databse di Firebase Console, Data tab, pilih tanda ‘+’ pada elemen messages.
- Buat elemen baru dengan nama -ABCD
- klik tanda ‘+’ pada elemen -ABCD
- Pada elemen baru isi Name dengan name dan Value dengan Marry
- klik tanda ‘+’ pada elemen -ABCD
- Pada elemen baru isi Name dengan text dan Value dengan hello
- klik Add
25
Keren Datanya langsung tampil di Aplikasi. Amazing. Coba kalau kita coding sendiri untuk sisi
servernya apakah bisa sesimple ini. Inilah salah satu kedahsyatan Firebase.
Send Messages
8. Send Messages
Implement message sending
Pada bagian ini, kita kan menambahkan kemampuan aplikasi kita agar user bisa kirim message dari
aplikasinya. Code snipped dibawah ini dipasang listener untuk events klik pada button send, yang
membuat objek FriendlyMessage baru dengan isi yang ada pada field message, dan mendorong
message ke database. push() method menambahkan sebuah ID yang digenerate secara otomatis
untuk disimpan pada bagian objek. ID ini sifatnya sequential yang mana menjamin bahwa message
baru akan ditambahkan pada bagian akhir dari list.
Update method onClick pada mSendButton didalam method onCreate class MainActivity.
26
MainActivity.java
mSendButton = (Button) findViewById(R.id.sendButton);
mSendButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
FriendlyMessage friendlyMessage = new
FriendlyMessage(mMessageEditText.getText().toString(),
mUsername,
mPhotoUrl);
mFirebaseDatabaseReference.child(MESSAGES_CHILD)
.push().setValue(friendlyMessage);
mMessageEditText.setText("");
}
});
Test Sending Messages.
1. Click Run
2. Isi field message dengan ‘Indonesia’ lalu klik button send. Lihat hasilnya
27
Wow amazing langsung tampil messagenya dengan nama saya.
Sekarang mari kita lihat didatabasenya. Di database juga langsung ada datanya tanpa merefresh
browser, benar-benar Real Time
28
29
Receive Reengagement Notifcations
9. Receive Reengagement Notifcations
Kita dapat menggunakan Firebase Cloud Messaging (FCM) untuk mengirim notifikasi ke user
aplikasi kita. Pada bagian ini kita akan mengkonfigurasi aplikasi agar dapt menerima notifikasi
yang dikirim dari Firebase Console.
Add FCM dependency
Agar bisa menggunakan FCM seperti biasa kita harus menambahkan library FCM ini ke file
app/build.gradle. Tetapi ternyata pada source project kita ini sudah ditambahkan. Jadi kita tidak
perlu menambahkannya.
app/build.gradle
compile 'com.google.firebase:firebase-messaging:9.2.1'
30
Add FCM Services
class RegistrationIntentService adalah background services yang digunakan untuk mendapatkan
token instanceID yang merupakan identifikasi aplikasi ke FCM server. Juga subscribes ke topic
yang digunakan untuk mengirim notifikasi re-engagement (via topic messaging )
class MyFirebaseMessagingService akan menjadi backkground service yang menangani incoming
FCM messages
Update untuk extend FirebaseMessagingService yang disediakan oleh library firebase-fcm yang
sudah kita tambahkan sebelumnya. Ini secara otomatis menangani notifikasi messages, yang mana
messagges server itu secara spesisk seharusnya menghasilkan notifikasi. Untuk menangani data
messages (yang dilewatkan secara diam-diam ke aplikasi tanpa membuat notifikasi) kia bisa meng
override method onMessageReceived dari class FirebaseMessagingService
MyFirebaseMessagingService.java
public class MyFirebaseMessagingService extends FirebaseMessagingService {
private static final String TAG = "MyFMService";
@Override
public void onMessageReceived(RemoteMessage remoteMessage) {
// Handle data payload of FCM messages.
Log.d(TAG, "FCM Message Id: " + remoteMessage.getMessageId());
Log.d(TAG, "FCM Notification Message: " +
remoteMessage.getNotification());
Log.d(TAG, "FCM Data Message: " + remoteMessage.getData());
}
}
class MyFirebaseIntentServices akan menjadi service yang digunakan untuk mengani FCM logic.
Service ini digunakan untuk mengalert aplikasi ketika sebuah InstanceID token baru tergenerate.
Rubah class tersebut untuk extend FirebaseInstanceIdService dan overrid method onTokenRefresh
untuk subscribe ke topic. Gunakan kode berikut untuk mengupdtae method onTokenRefresh di class
MyFirebaseInstanceIdService agar terlihat seperti ini
MyInstanceIDListenerService
public class MyFirebaseInstanceIdService extends FirebaseInstanceIdService {
private static final String TAG = "MyFirebaseIIDService";
private static final String FRIENDLY_ENGAGE_TOPIC = "friendly_engage";
/**
31
* The Application's current Instance ID token is no longer valid
* and thus a new one must be requested.
*/
@Override
public void onTokenRefresh() {
// If you need to handle the generation of a token, initially or
// after a refresh this is where you should do that.
String token = FirebaseInstanceId.getInstance().getToken();
Log.d(TAG, "FCM Token: " + token);
// Once a token is generated, we subscribe to topic.
FirebaseMessaging.getInstance()
.subscribeToTopic(FRIENDLY_ENGAGE_TOPIC);
}
}
Tambahkan dekalarasi service untuk MyFirebaseListenerService dan MyInstanceIdListenerService.
Tambahkan didalame element appclication pada AndroidManifest.xml
AndroidManifest.xml
<service
android:name=".MyFirebaseMessagingService"
android:exported="false">
<intent-filter>
<action android:name="com.google.firebase.MESSAGING_EVENT" />
</intent-filter>
</service>
<service
android:name=".MyFirebaseInstanceIdService"
android:exported="false">
<intent-filter>
<action android:name="com.google.firebase.INSTANCE_ID_EVENT" />
</intent-filter>
</service>
Itu saja. Aplikasi kita sudah siap untuk menerima messages.
Test Background Notification
1. Run Aplikasi
2. Sentuh Home Button device android kita
32
3. Gunakan Firebase Console untuk mengirim notifikasi
- Pada Firebase Console klik Notifications
- klik Send Your First Messages
- isi text Message dengan “Friendly Chat?”
- pilih app yang kita gunakan sebagai App Target
- klik Send Message
33
34
4. pastikan message diterima dan notifikasi muncul pada device.
35
Wow keren. Messagenya sampai ke device android kita.
Remotely Configure Friendly Message Length
10. Remotely Configure Friendly Message Length
Firebase Remote Config memungkinkan kita utuk melakukan perubahan config aplikasi secara
remote. Jada kita tidak perlu merubah source dan membuat apk baru. Disini kita akan coba merubah
panjang maskimal karakter untuk kirim message di aplikasi kita. Dan ini kedepan akan banyak
manfaatnya buat kita sebagai developer.
Pada code lab kita panjang message dibatasi maksimal 9 karakter dan sekarang kita akan
merubahnya melalui Firebase Console.
Add Config Rules in Firebase Console.
36
Pada bagian Remote Config klik Add Parameter. Set Parameter key dengan friendly_msg_length
dan Default Value dengan 10. lalu klik ADD PARAMETER selanjutnya klik PUBLISH
CHANGES
37
Add Firebase Remote Config dependency
Untuk memanfaatkan fitur ini kita perlu menambahkan library firbase-config ke app/build.gradle.
Tetapi ternyata ini juga sudah ditambahkan di sorurce code lab kita.
app/build.gradle
compile 'com.google.firebase:firebase-messaging:9.2.1'
Tambahkan Firebase Remote Config instance variable pada class MainActivity.
MainActivity.java (instance variable)
// Firebase instance variables
private FirebaseRemoteConfig mFirebaseRemoteConfig;
Request dan Use config
Pada class MainActivity di method onCreate tambahkan code untuk menginisiliasi
FirebaseRemoteConfig dan memnggil method fetchConfig. Tambahkan kode berikut dibawah
inisiliasi Firebase Realtime Database.
MainActivity.java
/// Initialize Firebase Remote Config.
mFirebaseRemoteConfig = FirebaseRemoteConfig.getInstance();
// Define Firebase Remote Config Settings.
FirebaseRemoteConfigSettings firebaseRemoteConfigSettings =
new FirebaseRemoteConfigSettings.Builder()
.setDeveloperModeEnabled(true)
38
.build();
// Define default config values. Defaults are used when fetched config values are not
// available. Eg: if an error occurred fetching values from the server.
Map<String, Object> defaultConfigMap = new HashMap<>();
defaultConfigMap.put("friendly_msg_length", 10L);
// Apply config settings and default values.
mFirebaseRemoteConfig.setConfigSettings(firebaseRemoteConfigSettings);
mFirebaseRemoteConfig.setDefaults(defaultConfigMap);
// Fetch remote config.
fetchConfig();
Buat method fetchConfig dan applyRetrevedLengthLimit, method ini digunakan untuk
mendapatkan data konfigurasi dari RemoteConfigAPI dan mengaktifkannya. Konfigurasi yang
didapat akan menentukan panjang karakter maksimal yang dibolehkan pada isian message. Nilai
defaultnya adalh 10, dan ini sudah kita set melalui Firebase Console
MainActivity.java
// Fetch the config to determine the allowed length of messages.
public void fetchConfig() {
long cacheExpiration = 3600; // 1 hour in seconds
// If developer mode is enabled reduce cacheExpiration to 0 so that
// each fetch goes to the server. This should not be used in release
// builds.
if (mFirebaseRemoteConfig.getInfo().getConfigSettings()
.isDeveloperModeEnabled()) {
cacheExpiration = 0;
}
mFirebaseRemoteConfig.fetch(cacheExpiration)
.addOnSuccessListener(new OnSuccessListener<Void>() {
@Override
public void onSuccess(Void aVoid) {
// Make the fetched config available via
// FirebaseRemoteConfig get<type> calls.
mFirebaseRemoteConfig.activateFetched();
applyRetrievedLengthLimit();
}
})
.addOnFailureListener(new OnFailureListener() {
@Override
39
public void onFailure(@NonNull Exception e) {
// There has been an error fetching the config
Log.w(TAG, "Error fetching config: " +
e.getMessage());
applyRetrievedLengthLimit();
}
});
}
/**
* Apply retrieved length limit to edit text field.
* This result may be fresh from the server or it may be from cached
* values.
*/
private void applyRetrievedLengthLimit() {
Long friendly_msg_length =
mFirebaseRemoteConfig.getLong("friendly_msg_length");
mMessageEditText.setFilters(new InputFilter[]{new
InputFilter.LengthFilter(friendly_msg_length.intValue())});
Log.d(TAG, "FML is: " + friendly_msg_length);
}
Tambahkan juga pada method onOptionItemSelected untuk memanggil method fetchConfig
MainActivity.java
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case R.id.fresh_config_menu:
fetchConfig();
return true;
case R.id.sign_out_menu:
mFirebaseAuth.signOut();
mUsername = ANONYMOUS;
startActivity(new Intent(this, SignInActivity.class));
return true;
default:
return super.onOptionsItemSelected(item);
}
40
}
Test Remote Configure.
1. Click Run
2. Coba Ketik message seharusnya maksimal masih 10 karakter.
3. Update Remote Config value pada Firbase Console rubah 10 jadi 15.
4. Coba ketik message lagi seharusnya panjang maksimalnya sudah 15.
41
Luar biasa benar-benar tidak perlu rubah source code dan publish apk baru.
42
Send Install Invites
11. Send Install Invites
AppInvite Firebase menyediakan fungsi untuk Menginvite User mendownload aplikasi melalui
email dan SMS
Add Firebase AppInvite dependency
Untuk memanfaatkan fitur ini kita perlu menambahkan library firbase-appinvites ke
app/build.gradle. Tetapi ternyata ini juga sudah ditambahkan di sorurce code lab kita.
app/build.gradle
compile 'com.google.android.gms:play-services-appinvite:9.2.1'
Setup GoogleApiClient
Ubah class MainActivity agar mengimplement interface
GoogleApiClient.OnConnectionFailedListener rubah seperti dbawah ini
MainActivity.java
public class MainActivity extends AppCompatActivity implements
GoogleApiClient.OnConnectionFailedListener {
Kita akan diharuskan mengimpelement method oConnectionFailed.
MainActivity.java
@Override
public void onConnectionFailed(ConnectionResult connectionResult) {
Log.d(TAG, "onConnectionFailed:" + connectionResult);
}
Tambahkan GoogleApiClient instance variable pada class MainActivity:
private GoogleApiClient mGoogleApiClient;
Inisialiasi mGoogleApiClient pada menthod onCreate di class MainActivity. AppInvites
diinisialisasi dengan memanggil startActivityForResult, ini mengijinkan AppInvites UI untuk
menangani pembuatan invitation kemudian mengembalikan status completenya dengan memanggil
activity melalui method onActivityResult. Berikut kode inisialiasainya.
mGoogleApiClient = new GoogleApiClient.Builder(this)
.enableAutoManage(this, this)
.addApi(Auth.GOOGLE_SIGN_IN_API)
.addApi(AppInvite.API)
.build();
43
Send invitations
Tambahkan method sendInvitation lalu buat intent yang bisa digunakn untuk mengirim invitation.
private void sendInvitation() {
Intent intent = new
AppInviteInvitation.IntentBuilder(getString(R.string.invitation_title))
.setMessage(getString(R.string.invitation_message))
.setCallToActionText(getString(R.string.invitation_cta))
.build();
startActivityForResult(intent, REQUEST_INVITE);
}
Tangani kembalian hasilnya apakah invitation terkirim atau sukses pada method onActivityResult
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
Log.d(TAG, "onActivityResult: requestCode=" + requestCode +
", resultCode=" + resultCode);
if (requestCode == REQUEST_INVITE) {
if (resultCode == RESULT_OK) {
// Check how many invitations were sent.
String[] ids = AppInviteInvitation
.getInvitationIds(resultCode, data);
Log.d(TAG, "Invitations sent: " + ids.length);
} else {
// Sending failed or it was canceled, show failure message to
// the user
Log.d(TAG, "Failed to send invitation.");
}
}
}
Pada onOptionItemSelected Tambahkan kondisi untuk call ke method sendInvitation.
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
44
case R.id.invite_menu:
sendInvitation();
return true;
case R.id.fresh_config_menu:
fetchConfig();
return true;
case R.id.sign_out_menu:
mFirebaseAuth.signOut();
mUsername = ANONYMOUS;
startActivity(new Intent(this, SignInActivity.class));
return true;
default:
return super.onOptionsItemSelected(item);
}
}
Sekarang kita Test AppInvitenya.
1. Run Aplikasi
2. Dari menu dipojok kanan applikasi pilih Invite
3. Anda akan melihat tampilan App Invites yang mengijinkan kita untuk memilih email dan SMS
dan mengirim sebuah invitation. Anda harus pilih account penerima yang bisa anda cek apakah
iinvitation masuk atau tidak. Ini agar kita dapat melihatnya ketika sebuah invitation terkirim.
4. Tap send dan verify invitationnya terkirim ke contact yang sidah dipilih.
5. cek pada contact yang kita kirimkan invitation apakah invitationnya terkirim.
Track User Flows
12. Track User Flows
Firebase Analytics menyediakan jalan bagi untuk mengetahui tingkah laku user pada aplikasi kita,
dimana mereka nyaman atau tidak dengan aplikasi kita. Ini dapat juga digunakan untuk mgetahui
bagian aplikasi yang sering digunakan.
Add Firebase Analytics dependency
Untuk memanfaatkan fitur ini kita perlu menambahkan library firbase-analytics ke app/build.gradle.
Tetapi ternyata ini juga sudah ditambahkan di sorurce code lab kita.
app/build.gradle
compile 'com.google.firebase:firebase-analytics:9.2.1'
Inisialisasi Analytics
Tambahkan FirebaseAnalytics innstance variable ke class MainActivity
45
MainActivity.java
mFirebaseAnalytics = FirebaseAnalytics.getInstance(this);
Kirim Custom Events
Inisialisasi Firebase Analytics menyediakan beberapa standar matrix seperti app installs dan sesi
lifecycle, jika kita ingin menambah custom events yang dapat membantu kita mengerti interaksi
yang dilakukan user diaplikasi secara lebih detail. Untuk mengirim custom event dapat memanggil
mFirebaseAnalytics.logEvent() dengan informasi tentang custome event.
Pada MainActivity log inviting events pada callback onActivityResult. Rubahlah isi dalam method
onActivityResult menjadi seperti dibawah ini. Kita dapat melihat dalam setiap kasus kita kirim
sebuah SHARE event tetapi dengan parameter yang berbeda untuk sukses dan gagal.
MainActivity.java
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
Log.d(TAG, "onActivityResult: requestCode=" + requestCode + ", resultCode=" +
resultCode);
if (requestCode == REQUEST_INVITE) {
if (resultCode == RESULT_OK) {
Bundle payload = new Bundle();
payload.putString(FirebaseAnalytics.Param.VALUE, "sent");
mFirebaseAnalytics.logEvent(FirebaseAnalytics.Event.SHARE,
payload);
// Check how many invitations were sent and log.
String[] ids = AppInviteInvitation.getInvitationIds(resultCode,
data);
Log.d(TAG, "Invitations sent: " + ids.length);
} else {
Bundle payload = new Bundle();
payload.putString(FirebaseAnalytics.Param.VALUE, "not sent");
mFirebaseAnalytics.logEvent(FirebaseAnalytics.Event.SHARE,
payload);
// Sending failed or it was canceled, show failure message to
// the user
Log.d(TAG, "Failed to send invitation.");
}
}
}
Setiap events yang kita log ke Firebase Analytics akan disummarykan dan akan terlihat pada
Firebase console dalam 24 jam.
46
Monetize With Ads
13. Monetize with Ads
Admob memberikan kita kemudahan dalam memonetisasi aplikasi kita, kita dapat menggunakan
komponen AdView dan Google akan menampilkan iklannya untuk anda.
Add Admob dependency
Untuk memanfaatkan fitur ini kita perlu menambahkan play-services-ads ke app/build.gradle.
Tetapi ternyata ini juga sudah ditambahkan di sorurce code lab kita.
app/build.gradle
compile 'com.google.android.gms:play-services-ads:9.2.1'
Tambahkan ads namespace
tambahkan ads namespace dalam root tag RelativeLayout dalam activity_main.xml
activity_main.xml
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
xmlns:ads="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
47
android:paddingTop="@dimen/activity_vertical_margin"
tools:context="com.google.firebase.codelab.friendlychat.MainActivity">
Tambahkan adView ke main layout (acivity_main.xml)
Tambahan adView ini akan berisi iklan. Untuk itu tambahkan adview tag pad root RelativeLayout.
Sehingga lengkap isi activity_main.xml menjadi seperti ini.
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
xmlns:ads="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context="com.google.firebase.codelab.friendlychat.MainActivity">
<com.google.android.gms.ads.AdView
android:id="@+id/adView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerHorizontal="true"
android:layout_alignParentTop="true"
ads:adSize="BANNER"
ads:adUnitId="@string/banner_ad_unit_id">
</com.google.android.gms.ads.AdView>
<android.support.v7.widget.RecyclerView
android:id="@+id/messageRecyclerView"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_below="@+id/adView"
android:layout_above="@+id/linearLayout"/>
<LinearLayout
android:id="@+id/linearLayout"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:layout_alignParentLeft="true"
android:layout_alignParentStart="true"
android:orientation="horizontal">
<EditText
android:id="@+id/messageEditText"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:layout_weight="1"/>
<Button
android:id="@+id/sendButton"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="bottom"
android:enabled="false"
android:text="SEND"/>
</LinearLayout>
<ProgressBar
android:id="@+id/progressBar"
style="?android:attr/progressBarStyleLarge"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerHorizontal="true"
android:layout_centerVertical="true"/>
</RelativeLayout>
48
activity_main.xml
compile 'com.google.android.gms:play-services-ads:9.2.1'
Add AdView variable
Pada MainActivity tambahk instance varibale untuk adView
MainActivity.java
private AdView mAdView;
Request Ad
Pada MainActivity didalam method onCreate permintaan untuk menampilkan iklan di adView.
MainActivity.java
mAdView = (AdView) findViewById(R.id.adView);
AdRequest adRequest = new AdRequest.Builder().build();
mAdView.loadAd(adRequest);
Tangani lifecycle events
Pada MainActivity, Bila diperlukan tambahkan Activity lifecycle event handling pada saat activity
activity disembunyikan sementara (onPause), ditampilkan kembali (onResume) dan saat activity di
tutup (onDestroy)
MainActivity.java
@Override
public void onPause() {
if (mAdView != null) {
mAdView.pause();
}
super.onPause();
}
/** Called when returning to the activity */
@Override
public void onResume() {
super.onResume();
if (mAdView != null) {
mAdView.resume();
}
}
/** Called before the activity is destroyed */
@Override
public void onDestroy() {
if (mAdView != null) {
mAdView.destroy();
}
super.onDestroy();
49
}
Test AdMob.
1. Run Aplikasi
2. Lihat Apakah iklannya berhasil ditampilkan.
Report Crashes
14. Report Crashes
Firebase Crash mengijinkan aplikasi kita untuk melaporkan ketika terjadi crash dan mencatat event
penyebab terjadinya.
50
Tambahkan Firebase Crash dependency
Untuk memanfaatkan fitur ini kita perlu menambahkan firebase-crash ke app/build.gradle. Tetapi
ternyata ini juga sudah ditambahkan di sorurce code lab kita.
app/build.gradle
compile 'com.google.firebase:firebase-crash:9.2.1'
Inisialisasi Crash
Tambahkan handler Untuk Click yang menyebabkan aplikasi crash pada item menu. Rubah method
onOptionsItemSelected pada MainActivity sehingga terlihat seperti dibawah ini
MainActivity.java
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case R.id.crash_menu:
FirebaseCrash.logcat(Log.ERROR, TAG, "crash caused");
causeCrash();
return true;
case R.id.invite_menu:
sendInvitation();
return true;
case R.id.fresh_config_menu:
fetchConfig();
return true;
case R.id.sign_out_menu:
mFirebaseAuth.signOut();
mUsername = ANONYMOUS;
startActivity(new Intent(this, SignInActivity.class));
return true;
default:
return super.onOptionsItemSelected(item);
}
}
Pada MainActivity tambahkan method causeCrash
private void causeCrash() {
throw new NullPointerException("Fake null pointer exception");
}
Test Firebase Crash
1. Run Aplikasi
2. Klik menu item yang membuat aplikasi crash.
3. Dari logcat cek apakah crash report sukses terkirim.
51
Summary
Firebase dengan kemampuan yang sudah kita coba berdasarkan tutorial diatas membuat kita sebagai
developer android optimis bisa membuat aplikasi yang besar, cetar dan membahana. Salah satu
beban biaya terbesar untuk infrastruktur mendevelop aplikasi yang besar dalam hal ini bisa
menghandle banyak user dan mempunyai preformance yang baik itu adalah pekerjaan disisi
Backend. Dan Firebase bisa menjadi salah satu solusi untuk membantu urusan Backend. Firebase
juga tidak hanya android saja, untuk IOS dan Web juga bisa. Untuk tahu lebih jauh bisa berkunjung
langsung ke website https://firebase.google.com/
Dan untuk para pemula developer android bisa belajar di website
http://agusharyanto.net punya saya bisa juga ke web
https://pratamawijaya.com/ punya Pratama Nur Wijaya
http://www.gookkis.com/ punya Heri Kiswanto
Di Indonesia juga sudah ada situs yang bagus untuk para developer yaitu http://dicoding.com disini
banyak materi pelajaran dari android sampai unity dan kawan-kawan bisa mendapatkan point dari
tantangan (Chalenge) yang ada, dimana pointnya bisa ditukar dengan hadiah yang ada di dicoding.
Disini juga banyak acara-acara seminar dan workshop yang bagus.
52
Referensi
1. https://firebase.google.com/
Lain-lain
Tahun 2017 sudah tinggal sebentar lagi dan Pemerintah Indonesia juga sudah mengeluarkan libur
resmi dan cuti bersama tahun 2017.
Tidak perlu tunggu bulan desember Anda bisa mendapatkan Kalender Indonesia lengkap dengan
hari libur dan cuti bersama tahun 2017 dan bonus jadwal liga sepak bola top eropa. Anda bisa
download Aplikasinya disini http://bit.ly/2bZglSY
53

Mais conteúdo relacionado

Mais procurados

Belajar Android Studio - Membuat Aplikasi Android Sederhana
Belajar Android Studio - Membuat Aplikasi Android SederhanaBelajar Android Studio - Membuat Aplikasi Android Sederhana
Belajar Android Studio - Membuat Aplikasi Android SederhanaAgus Haryanto
 
Panduan Memulai Firebase Android
Panduan Memulai Firebase AndroidPanduan Memulai Firebase Android
Panduan Memulai Firebase AndroidIrfan Fediyanto
 
Tutorial Lengkap Cara Membuat Aplikasi Android Sederhana
Tutorial Lengkap Cara Membuat Aplikasi Android SederhanaTutorial Lengkap Cara Membuat Aplikasi Android Sederhana
Tutorial Lengkap Cara Membuat Aplikasi Android Sederhanacreatorb dev
 
Belajar Android PHP MySQL Login dengan Volley
Belajar Android PHP MySQL Login dengan VolleyBelajar Android PHP MySQL Login dengan Volley
Belajar Android PHP MySQL Login dengan VolleyAgus Haryanto
 
Android membuat-aplikasi-sederhana
Android membuat-aplikasi-sederhanaAndroid membuat-aplikasi-sederhana
Android membuat-aplikasi-sederhanaRobby Febrian
 
Modul praktikum 17 - Android Sudaryatno
Modul praktikum 17 - Android SudaryatnoModul praktikum 17 - Android Sudaryatno
Modul praktikum 17 - Android SudaryatnoYatno Sudar
 
Memulai coding-android-dengan-android-studio
Memulai coding-android-dengan-android-studioMemulai coding-android-dengan-android-studio
Memulai coding-android-dengan-android-studioslempase
 
Menghitung luas persegi panjang dengan android
Menghitung luas persegi panjang dengan androidMenghitung luas persegi panjang dengan android
Menghitung luas persegi panjang dengan androidAgus Haryanto
 
Membuat Aplikasi Android Keren
Membuat Aplikasi Android KerenMembuat Aplikasi Android Keren
Membuat Aplikasi Android KerenHangga Aji Sayekti
 
Ebook tutorial pemrograman android
Ebook tutorial pemrograman android Ebook tutorial pemrograman android
Ebook tutorial pemrograman android Candra Adi Putra
 
Modul praktikum 13 - Android Sudaryatno
Modul praktikum 13 - Android SudaryatnoModul praktikum 13 - Android Sudaryatno
Modul praktikum 13 - Android SudaryatnoYatno Sudar
 
Panduan Instalasi Android Studio
Panduan Instalasi Android StudioPanduan Instalasi Android Studio
Panduan Instalasi Android StudioAgus Haryanto
 
Modul praktikum 11 - Android Sudaryatno
Modul praktikum 11 - Android SudaryatnoModul praktikum 11 - Android Sudaryatno
Modul praktikum 11 - Android SudaryatnoYatno Sudar
 
Membuat media pembelajaran berbasis android
Membuat media pembelajaran berbasis androidMembuat media pembelajaran berbasis android
Membuat media pembelajaran berbasis androidFunnys Rahman
 
Membuat sendiri aplikasi android
Membuat sendiri aplikasi androidMembuat sendiri aplikasi android
Membuat sendiri aplikasi androidMdeno Akbar
 
Modul praktikum 16 - Android Sudaryatno
Modul praktikum 16 - Android SudaryatnoModul praktikum 16 - Android Sudaryatno
Modul praktikum 16 - Android SudaryatnoYatno Sudar
 
Modul praktikum 12 - Android Sudaryatno
Modul praktikum 12 - Android SudaryatnoModul praktikum 12 - Android Sudaryatno
Modul praktikum 12 - Android SudaryatnoYatno Sudar
 
Simple tutorial : Android get and post data
Simple tutorial : Android get and post dataSimple tutorial : Android get and post data
Simple tutorial : Android get and post dataPikiring Hutama
 
372 Dasar Pengenalan Android Programming
372 Dasar Pengenalan Android Programming372 Dasar Pengenalan Android Programming
372 Dasar Pengenalan Android ProgrammingWirat Mojo
 
Tutorial Android Template Aplikasi Edukasi
Tutorial Android Template Aplikasi EdukasiTutorial Android Template Aplikasi Edukasi
Tutorial Android Template Aplikasi EdukasiToni Setyawan
 

Mais procurados (20)

Belajar Android Studio - Membuat Aplikasi Android Sederhana
Belajar Android Studio - Membuat Aplikasi Android SederhanaBelajar Android Studio - Membuat Aplikasi Android Sederhana
Belajar Android Studio - Membuat Aplikasi Android Sederhana
 
Panduan Memulai Firebase Android
Panduan Memulai Firebase AndroidPanduan Memulai Firebase Android
Panduan Memulai Firebase Android
 
Tutorial Lengkap Cara Membuat Aplikasi Android Sederhana
Tutorial Lengkap Cara Membuat Aplikasi Android SederhanaTutorial Lengkap Cara Membuat Aplikasi Android Sederhana
Tutorial Lengkap Cara Membuat Aplikasi Android Sederhana
 
Belajar Android PHP MySQL Login dengan Volley
Belajar Android PHP MySQL Login dengan VolleyBelajar Android PHP MySQL Login dengan Volley
Belajar Android PHP MySQL Login dengan Volley
 
Android membuat-aplikasi-sederhana
Android membuat-aplikasi-sederhanaAndroid membuat-aplikasi-sederhana
Android membuat-aplikasi-sederhana
 
Modul praktikum 17 - Android Sudaryatno
Modul praktikum 17 - Android SudaryatnoModul praktikum 17 - Android Sudaryatno
Modul praktikum 17 - Android Sudaryatno
 
Memulai coding-android-dengan-android-studio
Memulai coding-android-dengan-android-studioMemulai coding-android-dengan-android-studio
Memulai coding-android-dengan-android-studio
 
Menghitung luas persegi panjang dengan android
Menghitung luas persegi panjang dengan androidMenghitung luas persegi panjang dengan android
Menghitung luas persegi panjang dengan android
 
Membuat Aplikasi Android Keren
Membuat Aplikasi Android KerenMembuat Aplikasi Android Keren
Membuat Aplikasi Android Keren
 
Ebook tutorial pemrograman android
Ebook tutorial pemrograman android Ebook tutorial pemrograman android
Ebook tutorial pemrograman android
 
Modul praktikum 13 - Android Sudaryatno
Modul praktikum 13 - Android SudaryatnoModul praktikum 13 - Android Sudaryatno
Modul praktikum 13 - Android Sudaryatno
 
Panduan Instalasi Android Studio
Panduan Instalasi Android StudioPanduan Instalasi Android Studio
Panduan Instalasi Android Studio
 
Modul praktikum 11 - Android Sudaryatno
Modul praktikum 11 - Android SudaryatnoModul praktikum 11 - Android Sudaryatno
Modul praktikum 11 - Android Sudaryatno
 
Membuat media pembelajaran berbasis android
Membuat media pembelajaran berbasis androidMembuat media pembelajaran berbasis android
Membuat media pembelajaran berbasis android
 
Membuat sendiri aplikasi android
Membuat sendiri aplikasi androidMembuat sendiri aplikasi android
Membuat sendiri aplikasi android
 
Modul praktikum 16 - Android Sudaryatno
Modul praktikum 16 - Android SudaryatnoModul praktikum 16 - Android Sudaryatno
Modul praktikum 16 - Android Sudaryatno
 
Modul praktikum 12 - Android Sudaryatno
Modul praktikum 12 - Android SudaryatnoModul praktikum 12 - Android Sudaryatno
Modul praktikum 12 - Android Sudaryatno
 
Simple tutorial : Android get and post data
Simple tutorial : Android get and post dataSimple tutorial : Android get and post data
Simple tutorial : Android get and post data
 
372 Dasar Pengenalan Android Programming
372 Dasar Pengenalan Android Programming372 Dasar Pengenalan Android Programming
372 Dasar Pengenalan Android Programming
 
Tutorial Android Template Aplikasi Edukasi
Tutorial Android Template Aplikasi EdukasiTutorial Android Template Aplikasi Edukasi
Tutorial Android Template Aplikasi Edukasi
 

Semelhante a OPTIMASI FIREBASE

Live coding #2 maps
Live coding #2   mapsLive coding #2   maps
Live coding #2 mapsMdeno Akbar
 
Study Jam 6 Web.pdf
Study Jam 6 Web.pdfStudy Jam 6 Web.pdf
Study Jam 6 Web.pdfanjarmath
 
Pemrograman Mobile - (Pengenalan dan Instalasi Android)
Pemrograman Mobile - (Pengenalan dan Instalasi Android)Pemrograman Mobile - (Pengenalan dan Instalasi Android)
Pemrograman Mobile - (Pengenalan dan Instalasi Android)eltwordy
 
Introduction on Android programming Tutorial
Introduction on Android programming TutorialIntroduction on Android programming Tutorial
Introduction on Android programming TutorialDimas Prawira
 
Building a Flutter App.pptx
Building a Flutter App.pptxBuilding a Flutter App.pptx
Building a Flutter App.pptxpmgdscunsri
 
Pemrograman Mobile Android (Modul II)
Pemrograman Mobile Android (Modul II)Pemrograman Mobile Android (Modul II)
Pemrograman Mobile Android (Modul II)dikwan_moeis
 
FIC - Flutter Basic.pdf
FIC - Flutter Basic.pdfFIC - Flutter Basic.pdf
FIC - Flutter Basic.pdfherminsusilo2
 
App inventor true offline
App inventor true offlineApp inventor true offline
App inventor true offlineIki Mazadi
 
Tugas 4 tik Ridwan Abdul
Tugas 4 tik Ridwan AbdulTugas 4 tik Ridwan Abdul
Tugas 4 tik Ridwan Abdulridwanabdul99
 
Membuat aplikasi chat menggunakan java
Membuat aplikasi chat menggunakan javaMembuat aplikasi chat menggunakan java
Membuat aplikasi chat menggunakan javaEko Kurniawan Khannedy
 
Study Jam Mobile 4 - Introduction to Flutter.pdf
Study Jam Mobile 4 - Introduction to Flutter.pdfStudy Jam Mobile 4 - Introduction to Flutter.pdf
Study Jam Mobile 4 - Introduction to Flutter.pdfanjarmath
 
Jamal aplikasicrud
Jamal aplikasicrudJamal aplikasicrud
Jamal aplikasicrudmales Aja
 
Modul ajar membuat aplikasi mobile multiplatform menggunakan android studio
Modul ajar membuat aplikasi mobile multiplatform menggunakan android studioModul ajar membuat aplikasi mobile multiplatform menggunakan android studio
Modul ajar membuat aplikasi mobile multiplatform menggunakan android studioElsa Charming
 
Pengujian keamanan aplikasi mobile - Zaki Akhmad
Pengujian keamanan aplikasi mobile - Zaki AkhmadPengujian keamanan aplikasi mobile - Zaki Akhmad
Pengujian keamanan aplikasi mobile - Zaki Akhmadidsecconf
 
Tugas 4 tik,irul
Tugas 4 tik,irulTugas 4 tik,irul
Tugas 4 tik,irulirul1972
 
MudafiqRiyan - Membuat Installer Dari Java Desktop
MudafiqRiyan - Membuat Installer Dari Java DesktopMudafiqRiyan - Membuat Installer Dari Java Desktop
MudafiqRiyan - Membuat Installer Dari Java DesktopMudafiq R. Pratama
 
Tugas 4 tik
Tugas 4 tikTugas 4 tik
Tugas 4 tikricoardi
 

Semelhante a OPTIMASI FIREBASE (20)

Live coding #2 maps
Live coding #2   mapsLive coding #2   maps
Live coding #2 maps
 
Study Jam 6 Web.pdf
Study Jam 6 Web.pdfStudy Jam 6 Web.pdf
Study Jam 6 Web.pdf
 
Pemrograman Mobile - (Pengenalan dan Instalasi Android)
Pemrograman Mobile - (Pengenalan dan Instalasi Android)Pemrograman Mobile - (Pengenalan dan Instalasi Android)
Pemrograman Mobile - (Pengenalan dan Instalasi Android)
 
Introduction on Android programming Tutorial
Introduction on Android programming TutorialIntroduction on Android programming Tutorial
Introduction on Android programming Tutorial
 
Building a Flutter App.pptx
Building a Flutter App.pptxBuilding a Flutter App.pptx
Building a Flutter App.pptx
 
Pemrograman Mobile Android (Modul II)
Pemrograman Mobile Android (Modul II)Pemrograman Mobile Android (Modul II)
Pemrograman Mobile Android (Modul II)
 
Mari belajar vue js
Mari belajar vue jsMari belajar vue js
Mari belajar vue js
 
FIC - Flutter Basic.pdf
FIC - Flutter Basic.pdfFIC - Flutter Basic.pdf
FIC - Flutter Basic.pdf
 
App inventor true offline
App inventor true offlineApp inventor true offline
App inventor true offline
 
Tugas 4 tik Ridwan Abdul
Tugas 4 tik Ridwan AbdulTugas 4 tik Ridwan Abdul
Tugas 4 tik Ridwan Abdul
 
Membuat aplikasi chat menggunakan java
Membuat aplikasi chat menggunakan javaMembuat aplikasi chat menggunakan java
Membuat aplikasi chat menggunakan java
 
Pengenalan Codeigniter
Pengenalan Codeigniter Pengenalan Codeigniter
Pengenalan Codeigniter
 
Study Jam Mobile 4 - Introduction to Flutter.pdf
Study Jam Mobile 4 - Introduction to Flutter.pdfStudy Jam Mobile 4 - Introduction to Flutter.pdf
Study Jam Mobile 4 - Introduction to Flutter.pdf
 
Jamal aplikasicrud
Jamal aplikasicrudJamal aplikasicrud
Jamal aplikasicrud
 
Modul ajar membuat aplikasi mobile multiplatform menggunakan android studio
Modul ajar membuat aplikasi mobile multiplatform menggunakan android studioModul ajar membuat aplikasi mobile multiplatform menggunakan android studio
Modul ajar membuat aplikasi mobile multiplatform menggunakan android studio
 
Pengujian keamanan aplikasi mobile - Zaki Akhmad
Pengujian keamanan aplikasi mobile - Zaki AkhmadPengujian keamanan aplikasi mobile - Zaki Akhmad
Pengujian keamanan aplikasi mobile - Zaki Akhmad
 
Tugas 4 tik,irul
Tugas 4 tik,irulTugas 4 tik,irul
Tugas 4 tik,irul
 
MudafiqRiyan - Membuat Installer Dari Java Desktop
MudafiqRiyan - Membuat Installer Dari Java DesktopMudafiqRiyan - Membuat Installer Dari Java Desktop
MudafiqRiyan - Membuat Installer Dari Java Desktop
 
Tugas 4 tik
Tugas 4 tikTugas 4 tik
Tugas 4 tik
 
Tugas 4 tik
Tugas 4 tikTugas 4 tik
Tugas 4 tik
 

Mais de Agus Haryanto

Belajar Android Studio CRUD Data Mahasiswa
Belajar Android Studio CRUD Data MahasiswaBelajar Android Studio CRUD Data Mahasiswa
Belajar Android Studio CRUD Data MahasiswaAgus Haryanto
 
Belajar Android Studio Material Design Penggunaan RecyclerView dan Card View
Belajar Android Studio Material Design Penggunaan RecyclerView dan Card ViewBelajar Android Studio Material Design Penggunaan RecyclerView dan Card View
Belajar Android Studio Material Design Penggunaan RecyclerView dan Card ViewAgus Haryanto
 
Android Fast Track CRUD Android PHP MySql
Android Fast Track CRUD Android PHP MySqlAndroid Fast Track CRUD Android PHP MySql
Android Fast Track CRUD Android PHP MySqlAgus Haryanto
 
Sistem Informasi Pelaporan Kebakaran
Sistem Informasi Pelaporan KebakaranSistem Informasi Pelaporan Kebakaran
Sistem Informasi Pelaporan KebakaranAgus Haryanto
 
Seminar Android as your Smart Future
Seminar Android as your Smart FutureSeminar Android as your Smart Future
Seminar Android as your Smart FutureAgus Haryanto
 
Android Sliding Menu dengan Navigation Drawer
Android Sliding Menu dengan Navigation DrawerAndroid Sliding Menu dengan Navigation Drawer
Android Sliding Menu dengan Navigation DrawerAgus Haryanto
 
Langkah-langkah Instalasi software untuk develop aplikasi android
Langkah-langkah Instalasi software untuk develop aplikasi androidLangkah-langkah Instalasi software untuk develop aplikasi android
Langkah-langkah Instalasi software untuk develop aplikasi androidAgus Haryanto
 
Android Radio streaming
Android Radio streamingAndroid Radio streaming
Android Radio streamingAgus Haryanto
 
Android Fast Track - Database SQLite (Kamus Tiga Bahasa)
Android Fast Track - Database SQLite (Kamus Tiga Bahasa)Android Fast Track - Database SQLite (Kamus Tiga Bahasa)
Android Fast Track - Database SQLite (Kamus Tiga Bahasa)Agus Haryanto
 
Android fast track_course
Android fast track_courseAndroid fast track_course
Android fast track_courseAgus Haryanto
 

Mais de Agus Haryanto (10)

Belajar Android Studio CRUD Data Mahasiswa
Belajar Android Studio CRUD Data MahasiswaBelajar Android Studio CRUD Data Mahasiswa
Belajar Android Studio CRUD Data Mahasiswa
 
Belajar Android Studio Material Design Penggunaan RecyclerView dan Card View
Belajar Android Studio Material Design Penggunaan RecyclerView dan Card ViewBelajar Android Studio Material Design Penggunaan RecyclerView dan Card View
Belajar Android Studio Material Design Penggunaan RecyclerView dan Card View
 
Android Fast Track CRUD Android PHP MySql
Android Fast Track CRUD Android PHP MySqlAndroid Fast Track CRUD Android PHP MySql
Android Fast Track CRUD Android PHP MySql
 
Sistem Informasi Pelaporan Kebakaran
Sistem Informasi Pelaporan KebakaranSistem Informasi Pelaporan Kebakaran
Sistem Informasi Pelaporan Kebakaran
 
Seminar Android as your Smart Future
Seminar Android as your Smart FutureSeminar Android as your Smart Future
Seminar Android as your Smart Future
 
Android Sliding Menu dengan Navigation Drawer
Android Sliding Menu dengan Navigation DrawerAndroid Sliding Menu dengan Navigation Drawer
Android Sliding Menu dengan Navigation Drawer
 
Langkah-langkah Instalasi software untuk develop aplikasi android
Langkah-langkah Instalasi software untuk develop aplikasi androidLangkah-langkah Instalasi software untuk develop aplikasi android
Langkah-langkah Instalasi software untuk develop aplikasi android
 
Android Radio streaming
Android Radio streamingAndroid Radio streaming
Android Radio streaming
 
Android Fast Track - Database SQLite (Kamus Tiga Bahasa)
Android Fast Track - Database SQLite (Kamus Tiga Bahasa)Android Fast Track - Database SQLite (Kamus Tiga Bahasa)
Android Fast Track - Database SQLite (Kamus Tiga Bahasa)
 
Android fast track_course
Android fast track_courseAndroid fast track_course
Android fast track_course
 

Último

LK.01._LK_Peta_Pikir modul 1.3_Kel1_NURYANTI_101.docx
LK.01._LK_Peta_Pikir modul 1.3_Kel1_NURYANTI_101.docxLK.01._LK_Peta_Pikir modul 1.3_Kel1_NURYANTI_101.docx
LK.01._LK_Peta_Pikir modul 1.3_Kel1_NURYANTI_101.docxPurmiasih
 
MODUL P5 KEWIRAUSAHAAN SMAN 2 SLAWI 2023.pptx
MODUL P5 KEWIRAUSAHAAN SMAN 2 SLAWI 2023.pptxMODUL P5 KEWIRAUSAHAAN SMAN 2 SLAWI 2023.pptx
MODUL P5 KEWIRAUSAHAAN SMAN 2 SLAWI 2023.pptxSlasiWidasmara1
 
Modul 1.2.a.8 Koneksi antar materi 1.2.pdf
Modul 1.2.a.8 Koneksi antar materi 1.2.pdfModul 1.2.a.8 Koneksi antar materi 1.2.pdf
Modul 1.2.a.8 Koneksi antar materi 1.2.pdfSitiJulaeha820399
 
Bab 7 - Perilaku Ekonomi dan Kesejahteraan Sosial.pptx
Bab 7 - Perilaku Ekonomi dan Kesejahteraan Sosial.pptxBab 7 - Perilaku Ekonomi dan Kesejahteraan Sosial.pptx
Bab 7 - Perilaku Ekonomi dan Kesejahteraan Sosial.pptxssuser35630b
 
Materi Pertemuan Materi Pertemuan 7.pptx
Materi Pertemuan Materi Pertemuan 7.pptxMateri Pertemuan Materi Pertemuan 7.pptx
Materi Pertemuan Materi Pertemuan 7.pptxRezaWahyuni6
 
2 KISI-KISI Ujian Sekolah Dasar mata pelajaranPPKn 2024.pdf
2 KISI-KISI Ujian Sekolah Dasar  mata pelajaranPPKn 2024.pdf2 KISI-KISI Ujian Sekolah Dasar  mata pelajaranPPKn 2024.pdf
2 KISI-KISI Ujian Sekolah Dasar mata pelajaranPPKn 2024.pdfsdn3jatiblora
 
MATERI EKOSISTEM UNTUK SEKOLAH MENENGAH ATAS
MATERI EKOSISTEM UNTUK SEKOLAH MENENGAH ATASMATERI EKOSISTEM UNTUK SEKOLAH MENENGAH ATAS
MATERI EKOSISTEM UNTUK SEKOLAH MENENGAH ATASKurniawan Dirham
 
Bab 6 Kreatif Mengungap Rasa dan Realitas.pdf
Bab 6 Kreatif Mengungap Rasa dan Realitas.pdfBab 6 Kreatif Mengungap Rasa dan Realitas.pdf
Bab 6 Kreatif Mengungap Rasa dan Realitas.pdfbibizaenab
 
PERAN PERAWAT DALAM PEMERIKSAAN PENUNJANG.pptx
PERAN PERAWAT DALAM PEMERIKSAAN PENUNJANG.pptxPERAN PERAWAT DALAM PEMERIKSAAN PENUNJANG.pptx
PERAN PERAWAT DALAM PEMERIKSAAN PENUNJANG.pptxRizkyPratiwi19
 
Keterampilan menyimak kelas bawah tugas UT
Keterampilan menyimak kelas bawah tugas UTKeterampilan menyimak kelas bawah tugas UT
Keterampilan menyimak kelas bawah tugas UTIndraAdm
 
PPT PERUBAHAN LINGKUNGAN MATA PELAJARAN BIOLOGI KELAS X.pptx
PPT PERUBAHAN LINGKUNGAN MATA PELAJARAN BIOLOGI KELAS X.pptxPPT PERUBAHAN LINGKUNGAN MATA PELAJARAN BIOLOGI KELAS X.pptx
PPT PERUBAHAN LINGKUNGAN MATA PELAJARAN BIOLOGI KELAS X.pptxdpp11tya
 
Paparan Refleksi Lokakarya program sekolah penggerak.pptx
Paparan Refleksi Lokakarya program sekolah penggerak.pptxPaparan Refleksi Lokakarya program sekolah penggerak.pptx
Paparan Refleksi Lokakarya program sekolah penggerak.pptxIgitNuryana13
 
11 PPT Pancasila sebagai Paradigma Kehidupan dalam Masyarakat.pptx
11 PPT Pancasila sebagai Paradigma Kehidupan dalam Masyarakat.pptx11 PPT Pancasila sebagai Paradigma Kehidupan dalam Masyarakat.pptx
11 PPT Pancasila sebagai Paradigma Kehidupan dalam Masyarakat.pptxMiftahunnajahTVIBS
 
soal AKM Mata Pelajaran PPKN kelas .pptx
soal AKM Mata Pelajaran PPKN kelas .pptxsoal AKM Mata Pelajaran PPKN kelas .pptx
soal AKM Mata Pelajaran PPKN kelas .pptxazhari524
 
REFLEKSI MANDIRI_Prakarsa Perubahan BAGJA Modul 1.3.pdf
REFLEKSI MANDIRI_Prakarsa Perubahan BAGJA Modul 1.3.pdfREFLEKSI MANDIRI_Prakarsa Perubahan BAGJA Modul 1.3.pdf
REFLEKSI MANDIRI_Prakarsa Perubahan BAGJA Modul 1.3.pdfirwanabidin08
 
Latihan Soal bahasa Indonesia untuk anak sekolah sekelas SMP atau pun sederajat
Latihan Soal bahasa Indonesia untuk anak sekolah sekelas SMP atau pun sederajatLatihan Soal bahasa Indonesia untuk anak sekolah sekelas SMP atau pun sederajat
Latihan Soal bahasa Indonesia untuk anak sekolah sekelas SMP atau pun sederajatArfiGraphy
 
PELAKSANAAN + Link2 Materi Pelatihan "Teknik Perhitungan & Verifikasi TKDN & ...
PELAKSANAAN + Link2 Materi Pelatihan "Teknik Perhitungan & Verifikasi TKDN & ...PELAKSANAAN + Link2 Materi Pelatihan "Teknik Perhitungan & Verifikasi TKDN & ...
PELAKSANAAN + Link2 Materi Pelatihan "Teknik Perhitungan & Verifikasi TKDN & ...Kanaidi ken
 
MODUL 1 Pembelajaran Kelas Rangkap-compressed.pdf
MODUL 1 Pembelajaran Kelas Rangkap-compressed.pdfMODUL 1 Pembelajaran Kelas Rangkap-compressed.pdf
MODUL 1 Pembelajaran Kelas Rangkap-compressed.pdfNurulHikmah50658
 
TUGAS GURU PENGGERAK Aksi Nyata Modul 1.1.pdf
TUGAS GURU PENGGERAK Aksi Nyata Modul 1.1.pdfTUGAS GURU PENGGERAK Aksi Nyata Modul 1.1.pdf
TUGAS GURU PENGGERAK Aksi Nyata Modul 1.1.pdfElaAditya
 
CAPACITY BUILDING Materi Saat di Lokakarya 7
CAPACITY BUILDING Materi Saat di Lokakarya 7CAPACITY BUILDING Materi Saat di Lokakarya 7
CAPACITY BUILDING Materi Saat di Lokakarya 7IwanSumantri7
 

Último (20)

LK.01._LK_Peta_Pikir modul 1.3_Kel1_NURYANTI_101.docx
LK.01._LK_Peta_Pikir modul 1.3_Kel1_NURYANTI_101.docxLK.01._LK_Peta_Pikir modul 1.3_Kel1_NURYANTI_101.docx
LK.01._LK_Peta_Pikir modul 1.3_Kel1_NURYANTI_101.docx
 
MODUL P5 KEWIRAUSAHAAN SMAN 2 SLAWI 2023.pptx
MODUL P5 KEWIRAUSAHAAN SMAN 2 SLAWI 2023.pptxMODUL P5 KEWIRAUSAHAAN SMAN 2 SLAWI 2023.pptx
MODUL P5 KEWIRAUSAHAAN SMAN 2 SLAWI 2023.pptx
 
Modul 1.2.a.8 Koneksi antar materi 1.2.pdf
Modul 1.2.a.8 Koneksi antar materi 1.2.pdfModul 1.2.a.8 Koneksi antar materi 1.2.pdf
Modul 1.2.a.8 Koneksi antar materi 1.2.pdf
 
Bab 7 - Perilaku Ekonomi dan Kesejahteraan Sosial.pptx
Bab 7 - Perilaku Ekonomi dan Kesejahteraan Sosial.pptxBab 7 - Perilaku Ekonomi dan Kesejahteraan Sosial.pptx
Bab 7 - Perilaku Ekonomi dan Kesejahteraan Sosial.pptx
 
Materi Pertemuan Materi Pertemuan 7.pptx
Materi Pertemuan Materi Pertemuan 7.pptxMateri Pertemuan Materi Pertemuan 7.pptx
Materi Pertemuan Materi Pertemuan 7.pptx
 
2 KISI-KISI Ujian Sekolah Dasar mata pelajaranPPKn 2024.pdf
2 KISI-KISI Ujian Sekolah Dasar  mata pelajaranPPKn 2024.pdf2 KISI-KISI Ujian Sekolah Dasar  mata pelajaranPPKn 2024.pdf
2 KISI-KISI Ujian Sekolah Dasar mata pelajaranPPKn 2024.pdf
 
MATERI EKOSISTEM UNTUK SEKOLAH MENENGAH ATAS
MATERI EKOSISTEM UNTUK SEKOLAH MENENGAH ATASMATERI EKOSISTEM UNTUK SEKOLAH MENENGAH ATAS
MATERI EKOSISTEM UNTUK SEKOLAH MENENGAH ATAS
 
Bab 6 Kreatif Mengungap Rasa dan Realitas.pdf
Bab 6 Kreatif Mengungap Rasa dan Realitas.pdfBab 6 Kreatif Mengungap Rasa dan Realitas.pdf
Bab 6 Kreatif Mengungap Rasa dan Realitas.pdf
 
PERAN PERAWAT DALAM PEMERIKSAAN PENUNJANG.pptx
PERAN PERAWAT DALAM PEMERIKSAAN PENUNJANG.pptxPERAN PERAWAT DALAM PEMERIKSAAN PENUNJANG.pptx
PERAN PERAWAT DALAM PEMERIKSAAN PENUNJANG.pptx
 
Keterampilan menyimak kelas bawah tugas UT
Keterampilan menyimak kelas bawah tugas UTKeterampilan menyimak kelas bawah tugas UT
Keterampilan menyimak kelas bawah tugas UT
 
PPT PERUBAHAN LINGKUNGAN MATA PELAJARAN BIOLOGI KELAS X.pptx
PPT PERUBAHAN LINGKUNGAN MATA PELAJARAN BIOLOGI KELAS X.pptxPPT PERUBAHAN LINGKUNGAN MATA PELAJARAN BIOLOGI KELAS X.pptx
PPT PERUBAHAN LINGKUNGAN MATA PELAJARAN BIOLOGI KELAS X.pptx
 
Paparan Refleksi Lokakarya program sekolah penggerak.pptx
Paparan Refleksi Lokakarya program sekolah penggerak.pptxPaparan Refleksi Lokakarya program sekolah penggerak.pptx
Paparan Refleksi Lokakarya program sekolah penggerak.pptx
 
11 PPT Pancasila sebagai Paradigma Kehidupan dalam Masyarakat.pptx
11 PPT Pancasila sebagai Paradigma Kehidupan dalam Masyarakat.pptx11 PPT Pancasila sebagai Paradigma Kehidupan dalam Masyarakat.pptx
11 PPT Pancasila sebagai Paradigma Kehidupan dalam Masyarakat.pptx
 
soal AKM Mata Pelajaran PPKN kelas .pptx
soal AKM Mata Pelajaran PPKN kelas .pptxsoal AKM Mata Pelajaran PPKN kelas .pptx
soal AKM Mata Pelajaran PPKN kelas .pptx
 
REFLEKSI MANDIRI_Prakarsa Perubahan BAGJA Modul 1.3.pdf
REFLEKSI MANDIRI_Prakarsa Perubahan BAGJA Modul 1.3.pdfREFLEKSI MANDIRI_Prakarsa Perubahan BAGJA Modul 1.3.pdf
REFLEKSI MANDIRI_Prakarsa Perubahan BAGJA Modul 1.3.pdf
 
Latihan Soal bahasa Indonesia untuk anak sekolah sekelas SMP atau pun sederajat
Latihan Soal bahasa Indonesia untuk anak sekolah sekelas SMP atau pun sederajatLatihan Soal bahasa Indonesia untuk anak sekolah sekelas SMP atau pun sederajat
Latihan Soal bahasa Indonesia untuk anak sekolah sekelas SMP atau pun sederajat
 
PELAKSANAAN + Link2 Materi Pelatihan "Teknik Perhitungan & Verifikasi TKDN & ...
PELAKSANAAN + Link2 Materi Pelatihan "Teknik Perhitungan & Verifikasi TKDN & ...PELAKSANAAN + Link2 Materi Pelatihan "Teknik Perhitungan & Verifikasi TKDN & ...
PELAKSANAAN + Link2 Materi Pelatihan "Teknik Perhitungan & Verifikasi TKDN & ...
 
MODUL 1 Pembelajaran Kelas Rangkap-compressed.pdf
MODUL 1 Pembelajaran Kelas Rangkap-compressed.pdfMODUL 1 Pembelajaran Kelas Rangkap-compressed.pdf
MODUL 1 Pembelajaran Kelas Rangkap-compressed.pdf
 
TUGAS GURU PENGGERAK Aksi Nyata Modul 1.1.pdf
TUGAS GURU PENGGERAK Aksi Nyata Modul 1.1.pdfTUGAS GURU PENGGERAK Aksi Nyata Modul 1.1.pdf
TUGAS GURU PENGGERAK Aksi Nyata Modul 1.1.pdf
 
CAPACITY BUILDING Materi Saat di Lokakarya 7
CAPACITY BUILDING Materi Saat di Lokakarya 7CAPACITY BUILDING Materi Saat di Lokakarya 7
CAPACITY BUILDING Materi Saat di Lokakarya 7
 

OPTIMASI FIREBASE

  • 1. Kenalan dengan Firebase (Firebase Android Codelab) Diterjemahkan oleh Agus Haryanto http://agusharyanto.net 1
  • 2. Daftar Isi Pendahuluan......................................................................................................................................... 3 Import Project android-start................................................................................................................. 4 Buat project di Firebase Console..........................................................................................................6 Run Starter Aplikasi............................................................................................................................11 Enable Authentication........................................................................................................................ 12 Konfigurasi Authentication APIs........................................................................................................13 Activate Firebase Realtime Database.................................................................................................19 Send Messages....................................................................................................................................26 Receive Reengagement Notifcations..................................................................................................30 Remotely Configure Friendly Message Length................................................................................. 36 Send Install Invites............................................................................................................................. 43 Track User Flows................................................................................................................................45 Monetize With Ads.............................................................................................................................47 Report Crashes....................................................................................................................................50 Summary.............................................................................................................................................52 Referensi.............................................................................................................................................53 Lain-lain............................................................................................................................................. 53 2
  • 3. Pendahuluan Salah satu yang lagi trend di mata developer android adalah firebase, yah firebase memang istimewa dengan segala kelebihan yang dipunyai. Disini Google tampak tidak mau kalah dalam era dimana developer dalam membangun aplikasi tidak perlu lagi memikirkan infrastruktur backendnya. Untuk mempelajarinya tidak sulit di web firebasenya sendiri sudah ada petunjuknya dan menurut saya cukup mudah untuk diikuti. Jika tertarik bisa ke link ini https://codelabs.developers.google.com/codelabs/firebase-android/#0 Tapi kalau masih kesulitan juga mengikuti petunjuknya. Saya coba buatkan versi bahasa indonesianya yang semoga dapat membantu kita dalam mengenal firebase karena berawal dari perkenalanlah rasa suka dan cinta itu akan datang (Disini saya hanya berusaha menterjemahkan kedalam bahasa indonesia dan menambahkan beberapa gambar screen shoot untuk lebih memperjelas). Mari kita mulai. Pada project kali ini kita akan buat aplikasi Friendly Chat. Tenang saja kita sudah sedikan code labnya jadi dari code lab ini kita akan kembangkan dengan menggunakan fitur-fitur yang ada di firebase. Disini kita akan mengimplementasikan aplikasi chat client dan dapat digunakan untuk memonitor performance menggunakan firebase. Apa yang akan kita pelajari. 1. Mengijinkan user untuk Sign in 2. Sync data dengan menggunakan Firebase Realtime Database 3. Menerima message secara background dengan Firebase Notifictions 4. Mengkonfigure config Aplikasi dengan menggunakan Firebase Remote Config 5. Track Flow penggunaan aplikasi dengan Firebase Analytics 6. Mengijinkan pengguna untuk mengirim undangan untuk menginstall dengan Firebase Invites 7. Menampilkan iklan dengan AdMob. 8. Menampilkan Laporan Kesalahan Aplikasi dengan Firebase Crash Reporting 9. Test Aplikasi mu dengan Firebase Test Lab. Apa yang kita butuhkan. 1. Adroid studio version 2.0 2. sample code 3. A test device dengan Android 2.3 dan Google Play Services 9.0 atau versi yang lebih baru. 4. Kabel data. Sekarang mari kita mulai langkahnya Dapatkan / Download source codelabnya. Yang pakai linux atau Mac OS bisa langsung ketik melalui terminal $ git clone https://github.com/firebase/friendlychat Lalu enter maka akan menkloning sourcenya dari github ke komputerkita Aguss-MacBook-Pro:firebase agus$ git clone https://github.com/firebase/friendlychat Cloning into 'friendlychat'... remote: Counting objects: 1671, done. remote: Compressing objects: 100% (9/9), done. remote: Total 1671 (delta 0), reused 0 (delta 0), pack-reused 1657 3
  • 4. Receiving objects: 100% (1671/1671), 843.56 KiB | 140.00 KiB/s, done. Resolving deltas: 100% (765/765), done. Checking connectivity... done. Aguss-MacBook-Pro:firebase agus$ Kalau belum install git. Bisa download langung disini https://github.com/firebase/friendlychat klik tombol Clone or Download Jika berhasil maka akan terlihat direktory friendlychat yang didalamnya ada dua directory khusus android. android-start Code awal untuk belajar firebase android Code lengkap hasil belajar firebase Import Project android-start 2. Selanjutnya kita mulai dengan mengopen project android-start dengan android studio. 4
  • 5. Pilih Klik Don’t remind me again for this project dan Add root maka projectnya akan terbuka 5
  • 6. Buat project di Firebase Console 4. Buat project di Firebase Console untuk itu anda harus login dengan email gmail. Klik Create New Project, berinama dengan “FriendlyChat” 6
  • 7. Klik CREATE PROJECT Maka secara otomatis project akan terbuat - Klik Add Firebase to your Android app - pada package name “com.google.firebase.codelab.friendlychat” - Isi Sha1 caranya dari terminal ketikkan keytool -exportcert -alias androiddebugkey -keystore ~/.android/debug.keystore -list -v -storepass android Hasilnya [Aguss-MacBook-Pro:firebase agus$ keytool -exportcert -alias androiddebugkey -keystore ~/.android/debug.keystore -list -v -storepass android 7
  • 8. Alias name: androiddebugkey Creation date: Mar 19, 2015 Entry type: PrivateKeyEntry Certificate chain length: 1 Certificate[1]: Owner: CN=Android Debug, O=Android, C=US Issuer: CN=Android Debug, O=Android, C=US Serial number: 269f9b45 Valid from: Thu Mar 19 07:54:20 WIB 2015 until: Sat Mar 11 07:54:20 WIB 2045 Certificate fingerprints: MD5: 2A:19:B3:B8:09:F1:10:EC:D2:71:CD:DB:D1:2A:D1:41 SHA1: 4F:64:87:92:16:74:B5:7D:70:D1:F0:DE:70:12:48:5E:7A:22:94:32 SHA256: 7E:3E:45:AE:78:B8:E3:E9:75:F1:A6:20:0F:9D:D5:36:AB:18:63:00:43:98:44:57:8E:B4:04:51:62:F1:73:E1 Signature algorithm name: SHA256withRSA Version: 3 - Klik ADD APP 8
  • 9. - Copy google-services.json yang terdownload otomatis ke project kita letaknya seperti diatas yaitu pada directory app - Kembali ke jendela console klik continue 9
  • 10. Kita harus tambahkan konfigurasi diatas pada script gradle kita. Tapi tenang di source codelab ini sudah ditambahkan jadi kita tidak perlu menambahkannya lagi. Silahkan dilihat di codenya 10
  • 11. Run Starter Aplikasi 5. Saatnya untuk me Run App ini. Hasilnya masih belum ada message dalam list. 11
  • 12. Enable Authentication 6. Enable Authentication. Mari kita haruskan user untuk sign in agar dapat membaca atau mempost message di Friendly Chat Akses Firebase Database lalu atur rulesnya dengan menggunakan format JSON. Masuk ke Firebase Console, pilih Database lalu piih tab Rules maka akan terlihat seperti ini. 12
  • 13. Konfigurasi Authentication APIs Sebelum aplikasimu dapat mengakses Firebase Authentication APIs berdasarkan usermu, kamu harus mengenablenya. Caranya Masuk ke Firebase Console lalu pilih Auth lalu pilih Sign In Method lalu Set Enable pada baris Google dengan cara klik baris tersebut lalu pada Jendela dialog Google pilih Enable lalu klik Save 13
  • 14. 14
  • 15. Add Firebase Auth dependency Untuk menambahkan kode firebase-auth ke project kita terlebih dulu kita harus menambahkan library firebase auth ke dependency pada file app/build.gradle app/build.gradle compile 'com.google.firebase:firebase-auth:9.2.1' Tapi tenang saja ternyata ini juga sudah ada dicodelab kita jadi tidak perlu menambahkannya. - Edit class MainActivity lalu tambahkan Auth instance Variables MainActivity.java (instance variable) // Firebase instance variables private FirebaseAuth mFirebaseAuth; 15
  • 16. private FirebaseUser mFirebaseUser; Check for current user Masih pada MainActivity.java tambahkan script agar user ke layar sign-in apabila mereka buak aplikasi tetapi belum melakukan autentikasi. Pada method onCreate setelah mUsername diinisialiasi tambahkan script berikut MainActivity.java // Initialize Firebase Auth mFirebaseAuth = FirebaseAuth.getInstance(); mFirebaseUser = mFirebaseAuth.getCurrentUser(); if (mFirebaseUser == null) { // Not signed in, launch the Sign In activity startActivity(new Intent(this, SignInActivity.class)); finish(); return; } else { mUsername = mFirebaseUser.getDisplayName(); if (mFirebaseUser.getPhotoUrl() != null) { mPhotoUrl = mFirebaseUser.getPhotoUrl().toString(); } } Kemudian pada method onOptionsItemSelected() tambahkan case untuk menangani Sign out Button MainActivity.java @Override public boolean onOptionsItemSelected(MenuItem item) { switch (item.getItemId()) { case R.id.sign_out_menu: mFirebaseAuth.signOut(); Auth.GoogleSignInApi.signOut(mGoogleApiClient); mUsername = ANONYMOUS; startActivity(new Intent(this, SignInActivity.class)); return true; default: return super.onOptionsItemSelected(item); } } 16
  • 17. Sekarang kita sudah punya semua logika yang tepat untuk mengirim user ke Layar Sign-In ketika diperlukan. Selanjutnya kita harus menambahkan script untuk autetukasi user di layar Sign-In Implement the Sign-In screen Buka file SignInActivity.java . Disini ada sebuah buttin Sign-In yang digunakan untuk menginisialisasi autentikasi, Pada langkah ini kita implement logic sign in ke Firebase dengan Menggunakan Google Acccount. Tambahkan Auth instance variables pada class SignInActivity SignInActivity.java // Firebase instance variables private FirebaseAuth mFirebaseAuth; Kemudian pada method onCreate () tambahkan script untuk inisiliasi Firebase SignInActivity.java // Initialize FirebaseAuth mFirebaseAuth = FirebaseAuth.getInstance(); Selanjutnya, Inisialisasi sugning in dengan Google. Update SignInActivity’s onClick method agar terlihat seperti ini SignInActivity.java @Override public void onClick(View v) { switch (v.getId()) { case R.id.sign_in_button: signIn(); break; } } Tambahkan methid signIn yang akan membuat user sign in dengan Goggle Sign In UI. SignInActivity.java /private void signIn() { Intent signInIntent = Auth.GoogleSignInApi.getSignInIntent(mGoogleApiClient); startActivityForResult(signInIntent, RC_SIGN_IN); } Selanjutnya, tangani hasil kembalian dari Google Sign In, tambahkan method onActivityResult untuk menangani hasil signin. Ketika hasilnya sukses, maka account digunakan untuk autentikasi ke firebase. SignInActivity.java @Override 17
  • 18. public void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); // Result returned from launching the Intent from GoogleSignInApi.getSignInIntent(...); if (requestCode == RC_SIGN_IN) { GoogleSignInResult result = Auth.GoogleSignInApi.getSignInResultFromIntent(data); if (result.isSuccess()) { // Google Sign In was successful, authenticate with Firebase GoogleSignInAccount account = result.getSignInAccount(); firebaseAuthWithGoogle(account); } else { // Google Sign In failed Log.e(TAG, "Google Sign In failed."); } } } Tambahkan method firebaseAuthWithGoogle untuk autentikasi dengan Google Account SignInActivity.java private void firebaseAuthWithGoogle(GoogleSignInAccount acct) { Log.d(TAG, "firebaseAuthWithGooogle:" + acct.getId()); AuthCredential credential = GoogleAuthProvider.getCredential(acct.getIdToken(), null); mFirebaseAuth.signInWithCredential(credential) .addOnCompleteListener(this, new OnCompleteListener<AuthResult>() { @Override public void onComplete(@NonNull Task<AuthResult> task) { Log.d(TAG, "signInWithCredential:onComplete:" + task.isSuccessful()); // 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()) { Log.w(TAG, "signInWithCredential", task.getException()); Toast.makeText(SignInActivity.this, "Authentication failed.", Toast.LENGTH_SHORT).show(); } else { 18
  • 19. startActivity(new Intent(SignInActivity.this, MainActivity.class)); finish(); } } }); } Itu saja ! Kita telah megimplementasikan autentikasi ke firebase dengan menggunakan Google Account tanpa harus menangani konfigurasi di sisi server Test Aplikasi. Run aplikasinya. Maka kita akan langsung ke layar SignIn. Sentuh button Google Sign In. jika sukses maka kita akan pindah ke layar chat message. Activate Firebase Realtime Database 7.Activate Firebase Realtime Database Import Messages ke database 1. Pada Firebase console pilih database 2. Pada menu di database pilih Import JSON 3. Browse ke file initial_message.json yang ada root directory FriendlyChat, kli file tersebut 4. Click Import 19
  • 20. 20
  • 21. Note: Aksi Import ini akan mereplace semua data yang ada pada database Setelah berhasil diimport maka datanya pada database akan sepeti ini. 21
  • 22. - Add Firebase Realtime Database dependency Pada blok dependecies di file app/build.gradle tambahkan library untuk firebase database. Tapi tenang saja di sourcecode kita sudah ada jadi tidak perlu menambahkannya. compile 'com.google.firebase:firebase-database:9.2.1' - Synchronize messages tambagkan code untuk synkronisasi messages yang baru ditambahkan ke Applikasi. Inisialisasi Firebase Realtime Database dan tambahkan sebuah listener untuk menangani perubahan data. Update RecyclerView adapter untuk menampilkan pesan baru. tambahkan sebuah Database instance variables pada class MainActivity MainActivity.java // Firebase instance variables private DatabaseReference mFirebaseDatabaseReference; private FirebaseRecyclerAdapter<FriendlyMessage, MessageViewHolder> 22
  • 23. mFirebaseAdapter; Pada class MainActivity edit method onCreate, ganti mProgressBar.setVisibility(ProgressBar.INVISIBLE); dengan code dibawah ini. Code ini akan menambahkan semua pesan kemudian memonitor pakah ada message baru pada Firebase Relatime Database. Ini menambahkan semua elemen ke UI untuk setiap message. MainActivity.java // New child entries mFirebaseDatabaseReference = FirebaseDatabase.getInstance().getReference(); mFirebaseAdapter = new FirebaseRecyclerAdapter<FriendlyMessage, MessageViewHolder>( FriendlyMessage.class, R.layout.item_message, MessageViewHolder.class, mFirebaseDatabaseReference.child(MESSAGES_CHILD)) { @Override protected void populateViewHolder(MessageViewHolder viewHolder, FriendlyMessage friendlyMessage, int position) { mProgressBar.setVisibility(ProgressBar.INVISIBLE); viewHolder.messageTextView.setText(friendlyMessage.getText()); viewHolder.messengerTextView.setText(friendlyMessage.getName()); if (friendlyMessage.getPhotoUrl() == null) { viewHolder.messengerImageView .setImageDrawable(ContextCompat .getDrawable(MainActivity.this, R.drawable.ic_account_circle_black_36dp)); } else { Glide.with(MainActivity.this) .load(friendlyMessage.getPhotoUrl()) .into(viewHolder.messengerImageView); } } }; mFirebaseAdapter.registerAdapterDataObserver(new RecyclerView.AdapterDataObserver() { @Override public void onItemRangeInserted(int positionStart, int itemCount) { super.onItemRangeInserted(positionStart, itemCount); int friendlyMessageCount = mFirebaseAdapter.getItemCount(); 23
  • 24. int lastVisiblePosition = mLinearLayoutManager.findLastCompletelyVisibleItemPosition(); // If the recycler view is initially being loaded or the // user is at the bottom of the list, scroll to the bottom // of the list to show the newly added message. if (lastVisiblePosition == -1 || (positionStart >= (friendlyMessageCount - 1) && lastVisiblePosition == (positionStart - 1))) { mMessageRecyclerView.scrollToPosition(positionStart); } } }); mMessageRecyclerView.setLayoutManager(mLinearLayoutManager); mMessageRecyclerView.setAdapter(mFirebaseAdapter); Test message sync 1. click Run, Jika semua lancar maka semua message yang ada pada database akan terlihat 24
  • 25. 2. Tambahkan message baru langsung di Firebase Databse Console. Pastikan pesan barunya muncul di Aplikasi kita (Friendly-Chat UI). Cara menambahkan message baru di database. - Pada bagian Databse di Firebase Console, Data tab, pilih tanda ‘+’ pada elemen messages. - Buat elemen baru dengan nama -ABCD - klik tanda ‘+’ pada elemen -ABCD - Pada elemen baru isi Name dengan name dan Value dengan Marry - klik tanda ‘+’ pada elemen -ABCD - Pada elemen baru isi Name dengan text dan Value dengan hello - klik Add 25
  • 26. Keren Datanya langsung tampil di Aplikasi. Amazing. Coba kalau kita coding sendiri untuk sisi servernya apakah bisa sesimple ini. Inilah salah satu kedahsyatan Firebase. Send Messages 8. Send Messages Implement message sending Pada bagian ini, kita kan menambahkan kemampuan aplikasi kita agar user bisa kirim message dari aplikasinya. Code snipped dibawah ini dipasang listener untuk events klik pada button send, yang membuat objek FriendlyMessage baru dengan isi yang ada pada field message, dan mendorong message ke database. push() method menambahkan sebuah ID yang digenerate secara otomatis untuk disimpan pada bagian objek. ID ini sifatnya sequential yang mana menjamin bahwa message baru akan ditambahkan pada bagian akhir dari list. Update method onClick pada mSendButton didalam method onCreate class MainActivity. 26
  • 27. MainActivity.java mSendButton = (Button) findViewById(R.id.sendButton); mSendButton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { FriendlyMessage friendlyMessage = new FriendlyMessage(mMessageEditText.getText().toString(), mUsername, mPhotoUrl); mFirebaseDatabaseReference.child(MESSAGES_CHILD) .push().setValue(friendlyMessage); mMessageEditText.setText(""); } }); Test Sending Messages. 1. Click Run 2. Isi field message dengan ‘Indonesia’ lalu klik button send. Lihat hasilnya 27
  • 28. Wow amazing langsung tampil messagenya dengan nama saya. Sekarang mari kita lihat didatabasenya. Di database juga langsung ada datanya tanpa merefresh browser, benar-benar Real Time 28
  • 29. 29
  • 30. Receive Reengagement Notifcations 9. Receive Reengagement Notifcations Kita dapat menggunakan Firebase Cloud Messaging (FCM) untuk mengirim notifikasi ke user aplikasi kita. Pada bagian ini kita akan mengkonfigurasi aplikasi agar dapt menerima notifikasi yang dikirim dari Firebase Console. Add FCM dependency Agar bisa menggunakan FCM seperti biasa kita harus menambahkan library FCM ini ke file app/build.gradle. Tetapi ternyata pada source project kita ini sudah ditambahkan. Jadi kita tidak perlu menambahkannya. app/build.gradle compile 'com.google.firebase:firebase-messaging:9.2.1' 30
  • 31. Add FCM Services class RegistrationIntentService adalah background services yang digunakan untuk mendapatkan token instanceID yang merupakan identifikasi aplikasi ke FCM server. Juga subscribes ke topic yang digunakan untuk mengirim notifikasi re-engagement (via topic messaging ) class MyFirebaseMessagingService akan menjadi backkground service yang menangani incoming FCM messages Update untuk extend FirebaseMessagingService yang disediakan oleh library firebase-fcm yang sudah kita tambahkan sebelumnya. Ini secara otomatis menangani notifikasi messages, yang mana messagges server itu secara spesisk seharusnya menghasilkan notifikasi. Untuk menangani data messages (yang dilewatkan secara diam-diam ke aplikasi tanpa membuat notifikasi) kia bisa meng override method onMessageReceived dari class FirebaseMessagingService MyFirebaseMessagingService.java public class MyFirebaseMessagingService extends FirebaseMessagingService { private static final String TAG = "MyFMService"; @Override public void onMessageReceived(RemoteMessage remoteMessage) { // Handle data payload of FCM messages. Log.d(TAG, "FCM Message Id: " + remoteMessage.getMessageId()); Log.d(TAG, "FCM Notification Message: " + remoteMessage.getNotification()); Log.d(TAG, "FCM Data Message: " + remoteMessage.getData()); } } class MyFirebaseIntentServices akan menjadi service yang digunakan untuk mengani FCM logic. Service ini digunakan untuk mengalert aplikasi ketika sebuah InstanceID token baru tergenerate. Rubah class tersebut untuk extend FirebaseInstanceIdService dan overrid method onTokenRefresh untuk subscribe ke topic. Gunakan kode berikut untuk mengupdtae method onTokenRefresh di class MyFirebaseInstanceIdService agar terlihat seperti ini MyInstanceIDListenerService public class MyFirebaseInstanceIdService extends FirebaseInstanceIdService { private static final String TAG = "MyFirebaseIIDService"; private static final String FRIENDLY_ENGAGE_TOPIC = "friendly_engage"; /** 31
  • 32. * The Application's current Instance ID token is no longer valid * and thus a new one must be requested. */ @Override public void onTokenRefresh() { // If you need to handle the generation of a token, initially or // after a refresh this is where you should do that. String token = FirebaseInstanceId.getInstance().getToken(); Log.d(TAG, "FCM Token: " + token); // Once a token is generated, we subscribe to topic. FirebaseMessaging.getInstance() .subscribeToTopic(FRIENDLY_ENGAGE_TOPIC); } } Tambahkan dekalarasi service untuk MyFirebaseListenerService dan MyInstanceIdListenerService. Tambahkan didalame element appclication pada AndroidManifest.xml AndroidManifest.xml <service android:name=".MyFirebaseMessagingService" android:exported="false"> <intent-filter> <action android:name="com.google.firebase.MESSAGING_EVENT" /> </intent-filter> </service> <service android:name=".MyFirebaseInstanceIdService" android:exported="false"> <intent-filter> <action android:name="com.google.firebase.INSTANCE_ID_EVENT" /> </intent-filter> </service> Itu saja. Aplikasi kita sudah siap untuk menerima messages. Test Background Notification 1. Run Aplikasi 2. Sentuh Home Button device android kita 32
  • 33. 3. Gunakan Firebase Console untuk mengirim notifikasi - Pada Firebase Console klik Notifications - klik Send Your First Messages - isi text Message dengan “Friendly Chat?” - pilih app yang kita gunakan sebagai App Target - klik Send Message 33
  • 34. 34
  • 35. 4. pastikan message diterima dan notifikasi muncul pada device. 35
  • 36. Wow keren. Messagenya sampai ke device android kita. Remotely Configure Friendly Message Length 10. Remotely Configure Friendly Message Length Firebase Remote Config memungkinkan kita utuk melakukan perubahan config aplikasi secara remote. Jada kita tidak perlu merubah source dan membuat apk baru. Disini kita akan coba merubah panjang maskimal karakter untuk kirim message di aplikasi kita. Dan ini kedepan akan banyak manfaatnya buat kita sebagai developer. Pada code lab kita panjang message dibatasi maksimal 9 karakter dan sekarang kita akan merubahnya melalui Firebase Console. Add Config Rules in Firebase Console. 36
  • 37. Pada bagian Remote Config klik Add Parameter. Set Parameter key dengan friendly_msg_length dan Default Value dengan 10. lalu klik ADD PARAMETER selanjutnya klik PUBLISH CHANGES 37
  • 38. Add Firebase Remote Config dependency Untuk memanfaatkan fitur ini kita perlu menambahkan library firbase-config ke app/build.gradle. Tetapi ternyata ini juga sudah ditambahkan di sorurce code lab kita. app/build.gradle compile 'com.google.firebase:firebase-messaging:9.2.1' Tambahkan Firebase Remote Config instance variable pada class MainActivity. MainActivity.java (instance variable) // Firebase instance variables private FirebaseRemoteConfig mFirebaseRemoteConfig; Request dan Use config Pada class MainActivity di method onCreate tambahkan code untuk menginisiliasi FirebaseRemoteConfig dan memnggil method fetchConfig. Tambahkan kode berikut dibawah inisiliasi Firebase Realtime Database. MainActivity.java /// Initialize Firebase Remote Config. mFirebaseRemoteConfig = FirebaseRemoteConfig.getInstance(); // Define Firebase Remote Config Settings. FirebaseRemoteConfigSettings firebaseRemoteConfigSettings = new FirebaseRemoteConfigSettings.Builder() .setDeveloperModeEnabled(true) 38
  • 39. .build(); // Define default config values. Defaults are used when fetched config values are not // available. Eg: if an error occurred fetching values from the server. Map<String, Object> defaultConfigMap = new HashMap<>(); defaultConfigMap.put("friendly_msg_length", 10L); // Apply config settings and default values. mFirebaseRemoteConfig.setConfigSettings(firebaseRemoteConfigSettings); mFirebaseRemoteConfig.setDefaults(defaultConfigMap); // Fetch remote config. fetchConfig(); Buat method fetchConfig dan applyRetrevedLengthLimit, method ini digunakan untuk mendapatkan data konfigurasi dari RemoteConfigAPI dan mengaktifkannya. Konfigurasi yang didapat akan menentukan panjang karakter maksimal yang dibolehkan pada isian message. Nilai defaultnya adalh 10, dan ini sudah kita set melalui Firebase Console MainActivity.java // Fetch the config to determine the allowed length of messages. public void fetchConfig() { long cacheExpiration = 3600; // 1 hour in seconds // If developer mode is enabled reduce cacheExpiration to 0 so that // each fetch goes to the server. This should not be used in release // builds. if (mFirebaseRemoteConfig.getInfo().getConfigSettings() .isDeveloperModeEnabled()) { cacheExpiration = 0; } mFirebaseRemoteConfig.fetch(cacheExpiration) .addOnSuccessListener(new OnSuccessListener<Void>() { @Override public void onSuccess(Void aVoid) { // Make the fetched config available via // FirebaseRemoteConfig get<type> calls. mFirebaseRemoteConfig.activateFetched(); applyRetrievedLengthLimit(); } }) .addOnFailureListener(new OnFailureListener() { @Override 39
  • 40. public void onFailure(@NonNull Exception e) { // There has been an error fetching the config Log.w(TAG, "Error fetching config: " + e.getMessage()); applyRetrievedLengthLimit(); } }); } /** * Apply retrieved length limit to edit text field. * This result may be fresh from the server or it may be from cached * values. */ private void applyRetrievedLengthLimit() { Long friendly_msg_length = mFirebaseRemoteConfig.getLong("friendly_msg_length"); mMessageEditText.setFilters(new InputFilter[]{new InputFilter.LengthFilter(friendly_msg_length.intValue())}); Log.d(TAG, "FML is: " + friendly_msg_length); } Tambahkan juga pada method onOptionItemSelected untuk memanggil method fetchConfig MainActivity.java @Override public boolean onOptionsItemSelected(MenuItem item) { switch (item.getItemId()) { case R.id.fresh_config_menu: fetchConfig(); return true; case R.id.sign_out_menu: mFirebaseAuth.signOut(); mUsername = ANONYMOUS; startActivity(new Intent(this, SignInActivity.class)); return true; default: return super.onOptionsItemSelected(item); } 40
  • 41. } Test Remote Configure. 1. Click Run 2. Coba Ketik message seharusnya maksimal masih 10 karakter. 3. Update Remote Config value pada Firbase Console rubah 10 jadi 15. 4. Coba ketik message lagi seharusnya panjang maksimalnya sudah 15. 41
  • 42. Luar biasa benar-benar tidak perlu rubah source code dan publish apk baru. 42
  • 43. Send Install Invites 11. Send Install Invites AppInvite Firebase menyediakan fungsi untuk Menginvite User mendownload aplikasi melalui email dan SMS Add Firebase AppInvite dependency Untuk memanfaatkan fitur ini kita perlu menambahkan library firbase-appinvites ke app/build.gradle. Tetapi ternyata ini juga sudah ditambahkan di sorurce code lab kita. app/build.gradle compile 'com.google.android.gms:play-services-appinvite:9.2.1' Setup GoogleApiClient Ubah class MainActivity agar mengimplement interface GoogleApiClient.OnConnectionFailedListener rubah seperti dbawah ini MainActivity.java public class MainActivity extends AppCompatActivity implements GoogleApiClient.OnConnectionFailedListener { Kita akan diharuskan mengimpelement method oConnectionFailed. MainActivity.java @Override public void onConnectionFailed(ConnectionResult connectionResult) { Log.d(TAG, "onConnectionFailed:" + connectionResult); } Tambahkan GoogleApiClient instance variable pada class MainActivity: private GoogleApiClient mGoogleApiClient; Inisialiasi mGoogleApiClient pada menthod onCreate di class MainActivity. AppInvites diinisialisasi dengan memanggil startActivityForResult, ini mengijinkan AppInvites UI untuk menangani pembuatan invitation kemudian mengembalikan status completenya dengan memanggil activity melalui method onActivityResult. Berikut kode inisialiasainya. mGoogleApiClient = new GoogleApiClient.Builder(this) .enableAutoManage(this, this) .addApi(Auth.GOOGLE_SIGN_IN_API) .addApi(AppInvite.API) .build(); 43
  • 44. Send invitations Tambahkan method sendInvitation lalu buat intent yang bisa digunakn untuk mengirim invitation. private void sendInvitation() { Intent intent = new AppInviteInvitation.IntentBuilder(getString(R.string.invitation_title)) .setMessage(getString(R.string.invitation_message)) .setCallToActionText(getString(R.string.invitation_cta)) .build(); startActivityForResult(intent, REQUEST_INVITE); } Tangani kembalian hasilnya apakah invitation terkirim atau sukses pada method onActivityResult @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); Log.d(TAG, "onActivityResult: requestCode=" + requestCode + ", resultCode=" + resultCode); if (requestCode == REQUEST_INVITE) { if (resultCode == RESULT_OK) { // Check how many invitations were sent. String[] ids = AppInviteInvitation .getInvitationIds(resultCode, data); Log.d(TAG, "Invitations sent: " + ids.length); } else { // Sending failed or it was canceled, show failure message to // the user Log.d(TAG, "Failed to send invitation."); } } } Pada onOptionItemSelected Tambahkan kondisi untuk call ke method sendInvitation. @Override public boolean onOptionsItemSelected(MenuItem item) { switch (item.getItemId()) { 44
  • 45. case R.id.invite_menu: sendInvitation(); return true; case R.id.fresh_config_menu: fetchConfig(); return true; case R.id.sign_out_menu: mFirebaseAuth.signOut(); mUsername = ANONYMOUS; startActivity(new Intent(this, SignInActivity.class)); return true; default: return super.onOptionsItemSelected(item); } } Sekarang kita Test AppInvitenya. 1. Run Aplikasi 2. Dari menu dipojok kanan applikasi pilih Invite 3. Anda akan melihat tampilan App Invites yang mengijinkan kita untuk memilih email dan SMS dan mengirim sebuah invitation. Anda harus pilih account penerima yang bisa anda cek apakah iinvitation masuk atau tidak. Ini agar kita dapat melihatnya ketika sebuah invitation terkirim. 4. Tap send dan verify invitationnya terkirim ke contact yang sidah dipilih. 5. cek pada contact yang kita kirimkan invitation apakah invitationnya terkirim. Track User Flows 12. Track User Flows Firebase Analytics menyediakan jalan bagi untuk mengetahui tingkah laku user pada aplikasi kita, dimana mereka nyaman atau tidak dengan aplikasi kita. Ini dapat juga digunakan untuk mgetahui bagian aplikasi yang sering digunakan. Add Firebase Analytics dependency Untuk memanfaatkan fitur ini kita perlu menambahkan library firbase-analytics ke app/build.gradle. Tetapi ternyata ini juga sudah ditambahkan di sorurce code lab kita. app/build.gradle compile 'com.google.firebase:firebase-analytics:9.2.1' Inisialisasi Analytics Tambahkan FirebaseAnalytics innstance variable ke class MainActivity 45
  • 46. MainActivity.java mFirebaseAnalytics = FirebaseAnalytics.getInstance(this); Kirim Custom Events Inisialisasi Firebase Analytics menyediakan beberapa standar matrix seperti app installs dan sesi lifecycle, jika kita ingin menambah custom events yang dapat membantu kita mengerti interaksi yang dilakukan user diaplikasi secara lebih detail. Untuk mengirim custom event dapat memanggil mFirebaseAnalytics.logEvent() dengan informasi tentang custome event. Pada MainActivity log inviting events pada callback onActivityResult. Rubahlah isi dalam method onActivityResult menjadi seperti dibawah ini. Kita dapat melihat dalam setiap kasus kita kirim sebuah SHARE event tetapi dengan parameter yang berbeda untuk sukses dan gagal. MainActivity.java @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); Log.d(TAG, "onActivityResult: requestCode=" + requestCode + ", resultCode=" + resultCode); if (requestCode == REQUEST_INVITE) { if (resultCode == RESULT_OK) { Bundle payload = new Bundle(); payload.putString(FirebaseAnalytics.Param.VALUE, "sent"); mFirebaseAnalytics.logEvent(FirebaseAnalytics.Event.SHARE, payload); // Check how many invitations were sent and log. String[] ids = AppInviteInvitation.getInvitationIds(resultCode, data); Log.d(TAG, "Invitations sent: " + ids.length); } else { Bundle payload = new Bundle(); payload.putString(FirebaseAnalytics.Param.VALUE, "not sent"); mFirebaseAnalytics.logEvent(FirebaseAnalytics.Event.SHARE, payload); // Sending failed or it was canceled, show failure message to // the user Log.d(TAG, "Failed to send invitation."); } } } Setiap events yang kita log ke Firebase Analytics akan disummarykan dan akan terlihat pada Firebase console dalam 24 jam. 46
  • 47. Monetize With Ads 13. Monetize with Ads Admob memberikan kita kemudahan dalam memonetisasi aplikasi kita, kita dapat menggunakan komponen AdView dan Google akan menampilkan iklannya untuk anda. Add Admob dependency Untuk memanfaatkan fitur ini kita perlu menambahkan play-services-ads ke app/build.gradle. Tetapi ternyata ini juga sudah ditambahkan di sorurce code lab kita. app/build.gradle compile 'com.google.android.gms:play-services-ads:9.2.1' Tambahkan ads namespace tambahkan ads namespace dalam root tag RelativeLayout dalam activity_main.xml activity_main.xml <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" xmlns:ads="http://schemas.android.com/apk/res-auto" android:layout_width="match_parent" android:layout_height="match_parent" android:paddingBottom="@dimen/activity_vertical_margin" android:paddingLeft="@dimen/activity_horizontal_margin" android:paddingRight="@dimen/activity_horizontal_margin" 47
  • 48. android:paddingTop="@dimen/activity_vertical_margin" tools:context="com.google.firebase.codelab.friendlychat.MainActivity"> Tambahkan adView ke main layout (acivity_main.xml) Tambahan adView ini akan berisi iklan. Untuk itu tambahkan adview tag pad root RelativeLayout. Sehingga lengkap isi activity_main.xml menjadi seperti ini. <?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" xmlns:ads="http://schemas.android.com/apk/res-auto" android:layout_width="match_parent" android:layout_height="match_parent" android:paddingBottom="@dimen/activity_vertical_margin" android:paddingLeft="@dimen/activity_horizontal_margin" android:paddingRight="@dimen/activity_horizontal_margin" android:paddingTop="@dimen/activity_vertical_margin" tools:context="com.google.firebase.codelab.friendlychat.MainActivity"> <com.google.android.gms.ads.AdView android:id="@+id/adView" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_centerHorizontal="true" android:layout_alignParentTop="true" ads:adSize="BANNER" ads:adUnitId="@string/banner_ad_unit_id"> </com.google.android.gms.ads.AdView> <android.support.v7.widget.RecyclerView android:id="@+id/messageRecyclerView" android:layout_width="match_parent" android:layout_height="match_parent" android:layout_below="@+id/adView" android:layout_above="@+id/linearLayout"/> <LinearLayout android:id="@+id/linearLayout" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_alignParentBottom="true" android:layout_alignParentLeft="true" android:layout_alignParentStart="true" android:orientation="horizontal"> <EditText android:id="@+id/messageEditText" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_gravity="center_vertical" android:layout_weight="1"/> <Button android:id="@+id/sendButton" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="bottom" android:enabled="false" android:text="SEND"/> </LinearLayout> <ProgressBar android:id="@+id/progressBar" style="?android:attr/progressBarStyleLarge" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_centerHorizontal="true" android:layout_centerVertical="true"/> </RelativeLayout> 48
  • 49. activity_main.xml compile 'com.google.android.gms:play-services-ads:9.2.1' Add AdView variable Pada MainActivity tambahk instance varibale untuk adView MainActivity.java private AdView mAdView; Request Ad Pada MainActivity didalam method onCreate permintaan untuk menampilkan iklan di adView. MainActivity.java mAdView = (AdView) findViewById(R.id.adView); AdRequest adRequest = new AdRequest.Builder().build(); mAdView.loadAd(adRequest); Tangani lifecycle events Pada MainActivity, Bila diperlukan tambahkan Activity lifecycle event handling pada saat activity activity disembunyikan sementara (onPause), ditampilkan kembali (onResume) dan saat activity di tutup (onDestroy) MainActivity.java @Override public void onPause() { if (mAdView != null) { mAdView.pause(); } super.onPause(); } /** Called when returning to the activity */ @Override public void onResume() { super.onResume(); if (mAdView != null) { mAdView.resume(); } } /** Called before the activity is destroyed */ @Override public void onDestroy() { if (mAdView != null) { mAdView.destroy(); } super.onDestroy(); 49
  • 50. } Test AdMob. 1. Run Aplikasi 2. Lihat Apakah iklannya berhasil ditampilkan. Report Crashes 14. Report Crashes Firebase Crash mengijinkan aplikasi kita untuk melaporkan ketika terjadi crash dan mencatat event penyebab terjadinya. 50
  • 51. Tambahkan Firebase Crash dependency Untuk memanfaatkan fitur ini kita perlu menambahkan firebase-crash ke app/build.gradle. Tetapi ternyata ini juga sudah ditambahkan di sorurce code lab kita. app/build.gradle compile 'com.google.firebase:firebase-crash:9.2.1' Inisialisasi Crash Tambahkan handler Untuk Click yang menyebabkan aplikasi crash pada item menu. Rubah method onOptionsItemSelected pada MainActivity sehingga terlihat seperti dibawah ini MainActivity.java @Override public boolean onOptionsItemSelected(MenuItem item) { switch (item.getItemId()) { case R.id.crash_menu: FirebaseCrash.logcat(Log.ERROR, TAG, "crash caused"); causeCrash(); return true; case R.id.invite_menu: sendInvitation(); return true; case R.id.fresh_config_menu: fetchConfig(); return true; case R.id.sign_out_menu: mFirebaseAuth.signOut(); mUsername = ANONYMOUS; startActivity(new Intent(this, SignInActivity.class)); return true; default: return super.onOptionsItemSelected(item); } } Pada MainActivity tambahkan method causeCrash private void causeCrash() { throw new NullPointerException("Fake null pointer exception"); } Test Firebase Crash 1. Run Aplikasi 2. Klik menu item yang membuat aplikasi crash. 3. Dari logcat cek apakah crash report sukses terkirim. 51
  • 52. Summary Firebase dengan kemampuan yang sudah kita coba berdasarkan tutorial diatas membuat kita sebagai developer android optimis bisa membuat aplikasi yang besar, cetar dan membahana. Salah satu beban biaya terbesar untuk infrastruktur mendevelop aplikasi yang besar dalam hal ini bisa menghandle banyak user dan mempunyai preformance yang baik itu adalah pekerjaan disisi Backend. Dan Firebase bisa menjadi salah satu solusi untuk membantu urusan Backend. Firebase juga tidak hanya android saja, untuk IOS dan Web juga bisa. Untuk tahu lebih jauh bisa berkunjung langsung ke website https://firebase.google.com/ Dan untuk para pemula developer android bisa belajar di website http://agusharyanto.net punya saya bisa juga ke web https://pratamawijaya.com/ punya Pratama Nur Wijaya http://www.gookkis.com/ punya Heri Kiswanto Di Indonesia juga sudah ada situs yang bagus untuk para developer yaitu http://dicoding.com disini banyak materi pelajaran dari android sampai unity dan kawan-kawan bisa mendapatkan point dari tantangan (Chalenge) yang ada, dimana pointnya bisa ditukar dengan hadiah yang ada di dicoding. Disini juga banyak acara-acara seminar dan workshop yang bagus. 52
  • 53. Referensi 1. https://firebase.google.com/ Lain-lain Tahun 2017 sudah tinggal sebentar lagi dan Pemerintah Indonesia juga sudah mengeluarkan libur resmi dan cuti bersama tahun 2017. Tidak perlu tunggu bulan desember Anda bisa mendapatkan Kalender Indonesia lengkap dengan hari libur dan cuti bersama tahun 2017 dan bonus jadwal liga sepak bola top eropa. Anda bisa download Aplikasinya disini http://bit.ly/2bZglSY 53