Belajar Cara Meyimpan Token pada Firebase Cloud Messaging


Assalamualaikum Warahmatullahi Wabarakatuh.

Pada tutorial sebelumnya kita sudah membahas mengenai Cara Mengirim Notofikasi Menggunakan Firebase Cloud Messaging, pada Client atau kepada terget yang spesifik dengan menggunakan Token. Token yaitu kode unik yang dihasilkan oleh server FCM untuk membedakan setiap perangkat/Klien yang terhubung, berguna untuk mengirim pesan kepada pengguna yang spesifik atau target yang telah ditentukan.


Pada pembahasan sebelumnya kita sudah belajar bagaimana cara mendapatkan token tersebut dari server FCM, dan menampilkan hasilnya pada Logcat. Pertanyaannya bagaimana cara menyimpan Token tersebut, karena token pendaftaran akan dibuat hanya satu kali saat aplikasi dipasang, dan akan dibuat kembali jika:
  • Aplikasi menghapus ID Instance
  • Aplikasi diaktifkan kembali di perangkat baru
  • Pengguna melakukan uninstal/instal ulang aplikasi
  • Pengguna menghapus data aplikasi.

Materi lainnya yang direkomendasikan:

Oleh arena itu, saat pemasangan pertama, sistem perlu meyimpan tokennya, disini kita akan menggunakan SharedPreference, sehingga kita dapat dengan mudah untuk menggunakan token tersebut jika diperlukan.

Belajar Cara Meyimpan Token pada Firebase Cloud Messaging

1) Pertama, tambahkan Firebase kedalam Project Aplikasi,Untuk Tutorialnya kalian bisa lihat Disini

2) Selanjutnya buka file build.gradle (module:app), tambahkan library FCM berikut ini kedalam dependencies.
implementation 'com.google.firebase:firebase-messaging:11.8.0'
3) Buka AndroidManifest.xml, lalu tambahkan permission berikut ini.
<uses-permission android:name="android.permission.INTERNET" />
4) Siapkan class MyFirebaseInstanceIdService dengan mengextends FirebaseInstanceIdService , untuk menerima token pemdaftaran.
package cianjur.developer.net.firebaseexample;

import android.util.Log;

import com.google.firebase.iid.FirebaseInstanceId;
import com.google.firebase.iid.FirebaseInstanceIdService;

public class MyFirebaseInstanceIdService extends FirebaseInstanceIdService {

    final String TAG = MyFirebaseInstanceIdService.class.getSimpleName();

    @Override
    public void onTokenRefresh() {
        //Mendapatkan Instance dan Memperoleh Token
        String refreshedToken = FirebaseInstanceId.getInstance().getToken();

        //Menampilkan Token pada Log
        Log.d(TAG, "Token Saya : "+ refreshedToken);
        
        saveToken(refreshedToken);
    }

    //Method berikut ini digunakan untuk memperoleh token dan mennyimpannya ke server atau sistem lainnya
    private void saveToken(String refreshedToken) {
        
    }
}
5) Daftarkan class tersebut pada AndroidManifest.xml, dengan intent-filternya. Didalam tag <application>.
<service
    android:name=".MyFirebaseInstanceIdService">
    <intent-filter>
        <action android:name="com.google.firebase.INSTANCE_ID_EVENT"/>
    </intent-filter>
</service>
6) Selanjutnya buat class bernama SharedPrefManager, class ini digunakan untuk menerima data yang masuk serta mengrim data tersebut pada activity yang telah ditentukan. data yang di maksud yaitu Token dari FCM.
package cianjur.developer.net.firebaseexample;

import android.annotation.SuppressLint;
import android.content.Context;
import android.content.SharedPreferences;

public class SharedPrefManager {

    //Deklarasi Variable, untuk kontek activity
    private Context mContext;

    //Nama File untuk SharedPreferenxe
    private static final String SHARED_PREF_NAME = "FCMTokenMessenger";

    //Deklarasi Variabel untuk Instance
    @SuppressLint("StaticFieldLeak")
    private static SharedPrefManager mSPM;

    //Key untuk mengambil Value/Token pada SharedPreference
    private static String TOKEN_KEY_ACCESS = "token";

    private SharedPrefManager(Context context){
        mContext = context;
    }

    //Digunakan untuk mendapatkan Instance dati Activity yang di Context
    static synchronized SharedPrefManager getInstance(Context context){
        if(mSPM == null){
            mSPM = new SharedPrefManager(context);
        }
        return mSPM;
    }

    //Untuk menerima dan menyimpan token yang dihasilkan dari FirebaseInstanceIdService
    void setToken(String token){
        SharedPreferences preferences = mContext.getSharedPreferences(SHARED_PREF_NAME, Context.MODE_PRIVATE);
        SharedPreferences.Editor editor = preferences.edit();
        editor.putString(TOKEN_KEY_ACCESS, token);
        editor.apply();
    }

    //Untuk mendapatkan dan mengirim token yang diasilkan dari FirebaseInstanceIdService
    public String getToken(){
        SharedPreferences preferences = mContext.getSharedPreferences(SHARED_PREF_NAME, Context.MODE_PRIVATE);
        return preferences.getString(TOKEN_KEY_ACCESS, null);
    }
}
7) Selanjutnya buka kembali class MyFirebaseInstanceIdService,  pada method saveToken(), tambahkan fungsi dari class SharedPrefManager, secara otomatis,saat token pendaftaran dibuat, maka akan lengsung tersimpan.
public void onTokenRefresh() {
    //Mendapatkan Instance dan Memperoleh Token
    String refreshedToken = FirebaseInstanceId.getInstance().getToken();

    //Menampilkan Token pada Log
    Log.d(TAG, "Token Saya : "+ refreshedToken);

    saveToken(refreshedToken);
}

//Method berikut ini digunakan untuk memperoleh token dan mennyimpannya ke server atau sistem lainnya
private void saveToken(String refreshedToken) {
    SharedPrefManager.getInstance(getApplicationContext()).setToken(refreshedToken);
}
8) Sekarang coba kita cek dan jalankan Project tersebut, kita akan lihat pada bagian logcat, untuk memeriksa apakah token tersebut berhasil dibuat atau tidak.


9) Jika berhasil, itu artinya token telah tersimpan didalam SharedPreference, terakhir kita akan mencoba menampilkan token tersebut kedalam TextView didalam MainActivity kita. Tambahkan TextView kedalam Activity.
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:layout_margin="12dp"
    tools:context="cianjur.developer.net.firebaseexample.MainActivity">

    <TextView
        android:id="@+id/mytoken"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerHorizontal="true"
        android:layout_centerVertical="true"
        android:text="TextView"
        android:textSize="15sp" />
</RelativeLayout>
10) Buka class MainActivity.java, masukan source code berikut ini.
package cianjur.developer.net.firebaseexample;

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.widget.TextView;

public class MainActivity extends AppCompatActivity{

    //Deklarasi Variable
    private TextView getMyToken;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        getMyToken = findViewById(R.id.mytoken);
        //Menampilkan token yang tersimpan pada SharedPreference
        getMyToken.setText(SharedPrefManager.getInstance(this).getToken());
    }
}
Demo:


Terimakasih atas kunjungannya, semoga tutorial yang saya berikan bisa bermanfaat untuk kalian semua, selebihnya, mohon maaf bila ada kesalahan.

Wassalamualaikum Warahmatullahi Wabarakatuh.

Wildan M Athoillah
Wildan M Athoillah Blogger dan spesialis pembuat aplikasi android.