web-dev-qa-db-fra.com

Se désabonner de tous les sujets à la fois de la messagerie Firebase

Existe-t-il un moyen de se désinscrire de tous les sujets à la fois?

J'utilise Firebase Messaging pour recevoir une notification Push de certains sujets abonnés, et je dois en quelque sorte me désinscrire de tous les sujets sans me désabonner un par un. Est-ce possible?

23
Lennon Petrick

Vous pouvez utiliser API d'instance pour interroger tous les sujets disponibles abonnés au jeton donné et appeler plusieurs demandes pour vous désabonner de tous les sujets.

Cependant, si vous souhaitez arrêter de recevoir de toutes les rubriques et que le jeton n'est pas utile du tout, vous pouvez appeler FirebaseInstanceId.getInstance().deleteInstanceId() (référence: deleteInstanceId () et entourer d'un essai/catch pour une potentielle IOException) qui réinitialisera l'ID d'instance et que vous pouvez vous abonner à de nouvelles rubriques à partir du nouvel ID d'instance et du nouveau jeton.

J'espère que cela aide quelqu'un.

13
kirtan403

Je sais que ce n'est pas la meilleure façon mais ça marche! Vous pouvez stocker la liste de tous les sujets dans la base de données, puis vous désinscrire de tous les sujets lorsque les utilisateurs se déconnectent

final FirebaseMessaging messaging= FirebaseMessaging.getInstance();
      FirebaseDatabase.getInstance().getReference().child("topics").addChildEventListener(new ChildEventListener() {
          @Override
          public void onChildAdded(DataSnapshot dataSnapshot, String s) {
              String topic  = dataSnapshot.getValue(String.class);
              messaging.unsubscribeFromTopic(topic);
}...//rest code
1
Asad Mirza

Conservez une liste privée des sujets abonnés dans les Préférences.

Ce n'est pas si dur. Voici ce que je fais:

public class PushMessagingSubscription {

  private static SharedPreferences topics;

  public static void init(ApplicationSingleton applicationSingleton) {
    topics = applicationSingleton.getSharedPreferences("pushMessagingSubscription", 0);
  }

  public static void subscribeTopic(String topic) {
    if (topics.contains(topic)) return; // Don't re-subscribe
    topics.edit().putBoolean(topic, true).apply();

    // Go on and subscribe ...
  }


  public static void unsubscribeAllTopics() {
    for (String topic : topics.getAll().keySet()) {
      FirebaseMessaging.getInstance().unsubscribeFromTopic(topic);
    }
    topics.edit().clear().apply();
    // FirebaseInstanceId.getInstance().deleteInstanceId();
  }
}
0
Jacob Nordfalk