Ця відповідь не знищує ідентифікатор екземпляра, натомість він може отримати поточний. Він також зберігає оновлений в спільних налаштуваннях.
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 (будь-який клас, де потрібно встановити / отримати налаштування)
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)
@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);
....
}
onCreate
Сервіс Android 2.0 і вище не запускається при автоматичному запуску ( джерело ). Натомість onStartCommand
переосмислюється та використовується. Але в фактичному FirebaseInstanceIdService він оголошується як остаточний і його не можна перекрити. Однак, коли ми запускаємо сервіс за допомогою startService (), якщо служба вже запущена, використовується її оригінальний примірник (що добре). Наш onCreate () (визначений вище) також отримав посилання!
Використовуйте це на початку MainActivity або в той момент, коли вам здається, що вам потрібен ідентифікатор екземпляра.
MyFirebaseInstanceIdService myFirebaseInstanceIdService = new MyFirebaseInstanceIdService();
Intent intent= new Intent(getApplicationContext(),myFirebaseInstanceIdService.getClass());
//Log.d(this.getClass().getSimpleName(),"Starting MyFirebaseInstanceIdService");
startService(intent); //invoke onCreate
І, нарешті,
Utility.getFirebaseInstanceId(getApplicationContext())
Зверніть увагу , ви можете покращити це, намагаючись перемістити код startservice () на метод getFirebaseInstanceId.