Android: Подпишитесь на Firebase Cloud Messaging (FCM) Тема

Согласно Firebase cloud messaging documentation, для подписки пользователя на тему мне нужно позвонить

FirebaseMessaging.getInstance().subscribeToTopic("news");
  • В моем приложении мне нужно, чтобы все пользователи подписались на мое облако тема обмена сообщениями. Поскольку возвращаемое значение void, вопрос в том, как могу ли я понять, что подписка прошла успешно?
  • Неправильно ли вы называть subscribeToTopic каждый раз, когда мой запускается приложение?

Ответ 1

1. Как я могу понять, что подписка прошла успешно?

Редактировать:

Теперь вы можете проверить успешность подписки, добавив addOnSuccessListener()

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

Оригинал:

В документах ничего не упоминается об ответе, полученном при успешной подписке.

Однако, если вам нужно поручить всем своим пользователям подписаться на определенную тему, вам следует сначала вызвать subscribeToTopic в вашем приложении. Скорее всего, это обеспечит подключение к Интернету (так как оно, вероятно, было загружено и установлено через Play Store) и успешная подписка.

Тем не менее, если вы хотите убедиться, вы можете также выполнить проверку через свой собственный сервер приложений. Как упомянуто в документах:

Вы можете воспользоваться API-интерфейсами Instance ID для выполнения основных задач по управлению темами на стороне сервера. Учитывая регистрационные токены экземпляров клиентских приложений, вы можете сделать следующее:

Проверьте через маркеры регистрации, если они не были успешно подписаны на вашу тему, отправьте ему уведомление, где оно вызовет ваше клиентское приложение для вызова subscribeToTopic.

2. Является ли плохой практикой вызывать subscribeToTic при каждом запуске моего приложения?

Редактировать: добавив его из раздела комментариев: подписка при запуске приложения должна быть в порядке.

Спасибо @FrankvanPuffelen за проверку. :)

Ответ 2

Я написал эту функцию и протестировал. Может быть полезно

    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();
            }
        }
    }

Не забудьте написать эти строки выше onCreate()

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