Я хочу иметь возможность проверять, есть ли у пользователя разрешения на уведомления или нет, каждый раз, когда пользователь открывает приложение из какого-либо состояния (если приложение никогда не открывалось ранее или оно находилось в фоновом режиме и т. Д.)теперь проверяет разрешения через PushNotificationIOS.checkPermissions в функции рендеринга.Однако с этим методом он продолжает вызываться и вызывает утечку памяти.Другой метод, который я пробовал, был всякий раз, когда пользователь хочет получить уведомление (нажатием на значок), вызывается метод onPress для проверки разрешений, но при этом пользователь дважды нажимает на значок, чтобы обновить состояние разрешения.
import {
PushNotificationIOS,
AsyncStorage,
..
} from "react-native";
export default class Bell extends React.Component {
constructor(props) {
super(props);
this.state = {
isNotifActive: null,
isBellActive: false,
alertBody:"",
fireDate: null,
LaunchStatus: "",
ID:'',
timeSelected: ""
};
this.accessKeyNotif = `${this.props.fireDate}-isNotifActive`;
}
componentDidMount = () =>{
this.setState({
set props to state....
});
AsyncStorage.getItem(this.accessKeyNotif).then(value => this.setState({ isNotifActive: JSON.parse(value) }));
}
render() {
PushNotificationIOS.checkPermissions((permissions) => {
if (permissions.alert) {
AsyncStorage.setItem(this.accessKeyNotif, JSON.stringify(true)).then(() => {
this.setState({ isNotifActive: true});
});
}
else{
AsyncStorage.setItem(this.accessKeyNotif, JSON.stringify(false)).then(() => {
this.setState({ isNotifActive: false});
});
}
});
return (
<Ionicons
name={this.state.isBellActive? "md-notifications":"md-notifications-off"}
color={"white"}
size={30}
style={styles.NotifIcon}
onPress={() => {
if(this.state.isNotifActive){
Make a notification
}
else if(!this.state.isNotifActive){
Cancel Notifications
}
}}
/>
);
}
}
Компонент Bell вызывается несколько раз (20 раз) другим классом для отображения звонка.