Jawaban ini tidak merusak id instance, melainkan bisa mendapatkan id saat ini. Itu juga menyimpan yang baru di preferensi Bersama.
Strings.xml
<string name="pref_firebase_instance_id_key">pref_firebase_instance_id</string>
<string name="pref_firebase_instance_id_default_key">default</string>
Utility.java (semua kelas di mana Anda ingin mengatur / mendapatkan preferensi)
public static void setFirebaseInstanceId(Context context, String InstanceId) {
SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(context);
SharedPreferences.Editor editor;
editor = sharedPreferences.edit();
editor.putString(context.getString(R.string.pref_firebase_instance_id_key),InstanceId);
editor.apply();
}
public static String getFirebaseInstanceId(Context context) {
SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(context);
String key = context.getString(R.string.pref_firebase_instance_id_key);
String default_value = context.getString(R.string.pref_firebase_instance_id_default_key);
return sharedPreferences.getString(key, default_value);
}
MyFirebaseInstanceIdService.java (memperluas FirebaseInstanceIdService)
@Override
public void onCreate()
{
String CurrentToken = FirebaseInstanceId.getInstance().getToken();
//Log.d(this.getClass().getSimpleName(),"Inside Instance on onCreate");
String savedToken = Utility.getFirebaseInstanceId(getApplicationContext());
String defaultToken = getApplication().getString(R.string.pref_firebase_instance_id_default_key);
if(CurrentToken != null && !savedToken.equalsIgnoreCase(defaultToken))
//currentToken is null when app is first installed and token is not available
//also skip if token is already saved in preferences...
{
Utility.setFirebaseInstanceId(getApplicationContext(),CurrentToken);
}
super.onCreate();
}
@Override
public void onTokenRefresh() {
.... prev code
Utility.setFirebaseInstanceId(getApplicationContext(),refreshedToken);
....
}
Layanan Android 2.0 dan yang lebih baru onCreate
tidak dipanggil saat dimulai secara otomatis ( sumber ). Sebaliknya onStartCommand
diganti dan digunakan. Namun dalam FirebaseInstanceIdService yang sebenarnya, ini dideklarasikan sebagai final dan tidak dapat diganti. Namun, ketika kita memulai layanan menggunakan startService (), jika layanan sudah berjalan, instance aslinya digunakan (yang bagus). OnCreate () (didefinisikan di atas) kita juga dipanggil !.
Gunakan ini di awal MainActivity atau di titik mana pun yang menurut Anda perlu id instance.
MyFirebaseInstanceIdService myFirebaseInstanceIdService = new MyFirebaseInstanceIdService();
Intent intent= new Intent(getApplicationContext(),myFirebaseInstanceIdService.getClass());
//Log.d(this.getClass().getSimpleName(),"Starting MyFirebaseInstanceIdService");
startService(intent); //invoke onCreate
Dan akhirnya,
Utility.getFirebaseInstanceId(getApplicationContext())
Catatan , Anda selanjutnya dapat menyempurnakan ini dengan mencoba memindahkan kode startservice () ke metode getFirebaseInstanceId.