Код-ревью Middle Push-уведомления обновлено
Код-ревью: настройка уведомлений
Вопрос
Инициализация уведомлений в корне приложения. Найдите проблемы.
export function App() {
useEffect(() => {
(async () => {
await Notifications.requestPermissionsAsync();
const token = (await Notifications.getExpoPushTokenAsync()).data;
if (!(await AsyncStorage.getItem('tokenSent'))) {
await api.saveToken(token);
await AsyncStorage.setItem('tokenSent', '1');
}
})();
Notifications.addNotificationResponseReceivedListener((r) => {
const order = JSON.parse(r.notification.request.content.data.order);
navigationRef.navigate('Order', { order });
});
}, []);
return <RootNavigator />;
}
Коротко
Разрешение после объясняющего экрана с проверкой результата, токен на сервер при каждом запуске с привязкой к пользователю, слушатели с очисткой, обработка холодного старта, в данных только тип и id, навигация после готовности и проверки входа.
Что должен найти ревьюер
- Стильстрока 4Системный запрос разрешения сразу при старте, без объяснения: высокий шанс отказа, а повторно iOS не спросит. Сначала свой экран с пользой.
- Ошибкастрока 5Результат запроса разрешения не проверяется: при отказе токен всё равно запрашивается, ошибки не обрабатываются.
- Ошибкастрока 6Токен отправляется один раз за всё время: при смене токена или смене пользователя сервер не узнает. Отправлять при каждом запуске и привязывать к текущему пользователю.
- Ошибкастрока 11Слушатель не удаляется в очистке эффекта, и не обработан холодный старт (начальное уведомление).
- Ошибкастрока 12Весь заказ передаётся в уведомлении и в параметры навигации: устаревшие данные, ограничение размера, персональные данные;
JSON.parseупадёт на неожиданных данных. Передавать id. - Ошибкастрока 13Навигация без проверки готовности
navigationRefи авторизации.
Разбор
Разрешение после объясняющего экрана с проверкой результата, токен на сервер при каждом запуске с привязкой к пользователю, слушатели с очисткой, обработка холодного старта, в данных только тип и id, навигация после готовности и проверки входа.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.