Cette réponse ne détruit pas l'identifiant de l'instance, mais peut en obtenir le courant. Il stocke également une actualisée dans les préférences partagées.
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 (toute classe dans laquelle vous souhaitez définir / obtenir des préférences)
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 (étend 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);
....
}
Android 2.0 et supérieur onCreate
du service n'est pas appelé lors du démarrage automatique ( source ). Au lieu de cela, il onStartCommand
est remplacé et utilisé. Mais dans FirebaseInstanceIdService, il est déclaré comme final et ne peut pas être remplacé. Cependant, lorsque nous démarrons le service en utilisant startService (), si le service est déjà en cours d'exécution, son instance d'origine est utilisée (ce qui est bien). Notre onCreate () (défini ci-dessus) a également été appelé !.
Utilisez ceci au début de MainActivity ou à tout moment où vous pensez avoir besoin de l'identifiant d'instance.
MyFirebaseInstanceIdService myFirebaseInstanceIdService = new MyFirebaseInstanceIdService();
Intent intent= new Intent(getApplicationContext(),myFirebaseInstanceIdService.getClass());
//Log.d(this.getClass().getSimpleName(),"Starting MyFirebaseInstanceIdService");
startService(intent); //invoke onCreate
Et enfin,
Utility.getFirebaseInstanceId(getApplicationContext())
Notez que vous pouvez encore améliorer cela en essayant de déplacer le code startservice () vers la méthode getFirebaseInstanceId.