Как полностью отказаться от подписки на получение push-уведомлений? - PullRequest
0 голосов
/ 24 мая 2019

В моем приложении я реализовал функцию Push Notification.Я добавил кнопку для пользователя, которая позволяет ему полностью отключить уведомление.Однако это не работает, как я ожидал.Вот фрагмент кода:

Из MainActivity:

 @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        FirebaseMessaging.getInstance().subscribeToTopic("test_topic");

        ((SwitchCompat)findViewById(R.id.notification_switch)).setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
            @Override
            public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {

                if(isChecked) {
                    Toast.makeText(MainActivity.this, "Switch activated ", Toast.LENGTH_LONG).show();
                    FirebaseMessaging.getInstance().subscribeToTopic("test_topic");
                }else {
                    Toast.makeText(MainActivity.this, "Switch deactivated ", Toast.LENGTH_LONG).show();
                    FirebaseMessaging.getInstance().unsubscribeFromTopic("test_topic");

                        new Thread(new Runnable() {
                            @Override
                            public void run() {
                                try {
                                    FirebaseInstanceId.getInstance().deleteInstanceId();
                                } catch (IOException e) {
                                    e.printStackTrace();
                                }
                            }
                        }).start();
                }
            }
        });
}

Класс FirebaseMessagingService для обработки сообщения:

public class MyFirebaseMessagingService extends FirebaseMessagingService {

    public static String TAG = MyFirebaseMessagingService.class.getName();
    @Override
    public void onMessageReceived(RemoteMessage remoteMessage){
        super.onMessageReceived(remoteMessage);
        Log.e(TAG, "onMessageReceived() --> " + remoteMessage.getNotification().getTitle());

    }

//    @Override
//    public void onNewToken(String s) {
//        super.onNewToken(s);
//        Log.e(TAG, "onNewToken() --> " + s);
//    }

}

Когда я пытаюсь отправить уведомление, используя тему, я нене получаю никаких уведомлений.Если я отправляю уведомление на все устройства с приложением, я все равно получаю уведомление.Как я могу полностью запретить моему приложению получать уведомления?

Ответы [ 2 ]

0 голосов
/ 25 мая 2019

Попробуйте установить setAutoInitEnabled(false) до FirebaseInstanceId.getInstance().deleteInstanceId(). Когда этот параметр включен, FCM генерирует маркер регистрации при запуске приложения, если его нет, а генерирует новый токен при его удалении (, который не позволяет deleteInstanceId () остановить периодическую отправку данных ). Этот параметр сохраняется при перезапуске приложения и переопределяет параметр, указанный в манифесте.

По умолчанию автоматическая инициализация FCM включена .

Для получения дополнительной информации: FirebaseMessaging

0 голосов
/ 24 мая 2019

Отмена регистрации и отмена подписки

Существует три метода, которые клиентское приложение может использовать для прекращения получения сообщений и / или подписок на темы с сервера приложений:

InstanceID deleteToken () с аудиторией, для которой установлен идентификатор отправителя сервера приложений, а для области действия установлено значение GCM. Это останавливает сообщения (включая тематические сообщения) с определенного сервера приложений

InstanceID deleteID (). Это останавливает сообщения от всех предыдущих регистраций и подписок на темы для всех серверов приложений

GCMPubSub отписаться (). Это останавливает сообщения тем из определенной темы сервера приложений

Для FCM это должен быть FirebaseInstanceId.

...