Как узнать, был ли ранее вызван firebase.messaging (). RequestPermission с использованием response-native-firebase - PullRequest
0 голосов
/ 09 октября 2019

У меня есть приложение React Native, которое использует Firebase Cloud Messaging с пакетомact-native-firebase.

Я делаю это на первом экране приложения React Native, поэтому через 5 секунд пользовательбудет отправлен на новый экран, который объясняет, почему push-уведомления полезны, и дает им кнопку для запуска диалога, в котором они могут принять или отклонить разрешение.

setTimeout(() => {

            firebase.messaging().hasPermission()
                .then(enabled => {
                    if (enabled) {
                        // user has permissions
                    } else {
                        // user doesn't have permission
                        this.props.navigation.navigate('EnableNotificationPermissionScreen')
                    }
                });

        },
            5000);

На экране EnableNotificationPermissionScreen естькнопка, подобная этой:

 <Button onPress={this.onSetNotificationPref.bind(this)} title="Set Notification Preference" color="#4ab2fc"/>

, которая обрабатывается таким событием:

onSetNotificationPref() {

        firebase.messaging().requestPermission()
            .then(() => {
                // User has authorized
                firebase.analytics().logEvent('messaging_permission_accepted');

                this.props.navigation.navigate('App');
            })
            .catch(error => {
                // User has rejected permissions
                firebase.analytics().logEvent('messaging_permission_rejected');

                this.props.navigation.navigate('App');
            });
    }

Если пользователь принимает, все работает, как я надеюсь, и у пользователя будет разрешениеи не будет переходить к этому экрану снова.

Однако, если пользователь отклоняет разрешение, я не хочу снова переходить к нему. Как есть, они будут перемещаться туда снова, потому что hasPermission будет ложным. Кроме того, нажатие кнопки для выполнения requestPermission на этом экране ничего не изменит, поскольку ОС заблокирует requestPermission ().

В примерах, которые я видел, requestPermission вызывается всякий раз, когда разрешение не включено (без пользовательскихэкран как этот);и так или всплывает диалоговое окно, или нет. Однако в потоке, которого я пытаюсь достичь, я хочу перейти к этому пользовательскому экрану только , если у пользователя нет разрешения, потому что его не спрашивали. Если их спросили и отклонили, они не должны переходить на этот экран.

Есть ли способ добиться этого с помощью функций в firebase.messaging (), или мне нужно использовать постоянное хранилище, например async? -хранилище, чтобы самостоятельно отслеживать, был ли показан диалог?

...