Bu cevap örnek kimliğini yok etmez, bunun yerine mevcut olanı alabilir. Yenilenmiş olanı da Paylaşılan tercihlerde depolar.
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 (tercihleri ayarlamak / almak istediğiniz herhangi bir sınıf)
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 (FirebaseInstanceIdService'i genişletir)
@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);
....
}
Android 2.0 ve üstü onCreate
hizmet, otomatik olarak başlatıldığında çağrılmaz ( kaynak ). Bunun yerine onStartCommand
geçersiz kılınır ve kullanılır. Ancak gerçek FirebaseInstanceIdService'de nihai olarak bildirilir ve geçersiz kılınamaz. Bununla birlikte, startService () kullanarak hizmeti başlattığımızda, hizmet zaten çalışıyorsa, orijinal örneği kullanılır (ki bu iyidir). Bizim onCreate () (yukarıda tanımlanan) da çağrıldı !.
Bunu MainActivity'nin başlangıcında veya örnek kimliğine ihtiyacınız olduğunu düşündüğünüz her noktada kullanın.
MyFirebaseInstanceIdService myFirebaseInstanceIdService = new MyFirebaseInstanceIdService();
Intent intent= new Intent(getApplicationContext(),myFirebaseInstanceIdService.getClass());
//Log.d(this.getClass().getSimpleName(),"Starting MyFirebaseInstanceIdService");
startService(intent); //invoke onCreate
Ve sonunda,
Utility.getFirebaseInstanceId(getApplicationContext())
Not , sen detayli getFirebaseInstanceId yöntemine startservice () kodunu hareket ettirmeye çalışarak bu artırabilir.