web-dev-qa-db-fra.com

Android: abonnez-vous à la rubrique Firebase Cloud Messaging (FCM)

Selon documentation de messagerie Firebase cloud , pour abonner un utilisateur à un sujet que je dois appeler

FirebaseMessaging.getInstance().subscribeToTopic("news");
  1. Dans mon application, j'ai besoin que tous les utilisateurs soient abonnés à ma rubrique de messagerie cloud. Étant donné que la valeur de retour est void, la question est de savoir comment puis-je comprendre que l'abonnement a réussi?
  2. Est-ce une mauvaise pratique d'appeler subscribeToTopic à chaque démarrage de mon application?
20
VSB

1. Comment puis-je comprendre que l'abonnement a réussi?

Éditer:

Vous pouvez maintenant vérifier si l'abonnement est réussi en ajoutant addOnSuccessListener()

FirebaseMessaging.getInstance().subscribeToTopic("news").addOnSuccessListener(new OnSuccessListener<Void>() {
        @Override
        public void onSuccess(Void aVoid) {
            Toast.makeText(getApplicationContext(),"Success",Toast.LENGTH_LONG).show();
        }
    });

Original:

Il n'y a rien explicitement mentionné dans les documents sur une réponse reçue lorsque l'abonnement est réussi.

Cependant, si vous devez obliger tous vos utilisateurs à s'abonner à un sujet spécifique, vous devez appeler le subscribeToTopic lors de la première installation de votre application. Cela garantira très probablement qu'il existe une connexion à Internet (car il a probablement été téléchargé et installé via le Play Store) et que l'abonnement est réussi.

Cependant, si vous voulez vous en assurer, vous pouvez également gérer la vérification via votre propre serveur d'applications. Comme mentionné dans les docs :

Vous pouvez tirer parti des API d'ID d'instance pour effectuer des tâches de gestion de rubrique de base du côté serveur. Compte tenu du ou des jetons d'enregistrement des instances d'application cliente, vous pouvez effectuer les opérations suivantes:

Vérifiez les jetons d'enregistrement, s'ils n'ont pas été souscrits avec succès à votre sujet, envoyez-lui une notification où cela déclenchera votre application client pour appeler subscribeToTopic.

2. Est-ce une mauvaise pratique d'appeler subscribeToTopic à chaque démarrage de mon application?

Modifier: l'ajouter dans la section des commentaires: l'abonnement au démarrage de l'application devrait être bien.

Merci @FrankvanPuffelen d'avoir vérifié. :)

19
AL.

J'ai écrit cette fonction et testé. Peut être utile.

    private void subscribeToMessaging(){
        SharedPreferences prefs = getSharedPreferences(SETTINGS_TITLE, MODE_PRIVATE);

// Getting value from shared preferences
        boolean isSubscriptionEnable = prefs.getBoolean(SETTING_NOTIFICATION, true);

// if "isSubscriptionEnable" is true then check whether its already subscribed or not
        if (isSubscriptionEnable){

            boolean alreadySubscribed = prefs.getBoolean(SETTING_ALREADY_SUBSCRIBED, false);
// if not already subscribed then subscribe to topic and save value to shared preferences
            if (!alreadySubscribed){
                FirebaseMessaging.getInstance().subscribeToTopic("global");

                SharedPreferences.Editor editor = getSharedPreferences(SETTINGS_TITLE, MODE_PRIVATE).edit();
                editor.putBoolean(SETTING_ALREADY_SUBSCRIBED, true);
                editor.apply();
                Toast.makeText(this, "Subscribed", Toast.LENGTH_LONG).show();
            } else {
                Toast.makeText(this, "Already subscribed", Toast.LENGTH_LONG).show();
            }
        }
    }

N'oubliez pas d'écrire ces lignes ci-dessus surCreate ()

    public static final String SETTINGS_TITLE = "settings";
    public static final String SETTING_NOTIFICATION = "notification_state";
    public static final String SETTING_ALREADY_SUBSCRIBED = "already_subscribed";
0
Pooja