Selon documentation de messagerie Firebase cloud , pour abonner un utilisateur à un sujet que je dois appeler
FirebaseMessaging.getInstance().subscribeToTopic("news");
void
, la question est de savoir comment puis-je comprendre que l'abonnement a réussi?subscribeToTopic
à chaque démarrage de mon application?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:
Découvrez les détails des abonnements d'une instance d'application cliente, y compris chaque nom de rubrique et date d'abonnement. Voir Obtenir des informations sur les instances d'application .
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é. :)
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";